THotPDF.AddStructureElement dan helper Tagged PDF
Halaman ini mendokumentasikan helper THotPDF saat ini untuk Tagged PDF dan pohon struktur PDF/UA. Identifier kode tetap sesuai deklarasi publik
Permukaan Delphi saat ini
function AddStructureElement(const Role: AnsiString; Parent: THPDFDictionaryObject;
PageIndex: Integer = -1; MCID: Integer = -1): THPDFDictionaryObject; overload;
function AddStructureElement(const Role: AnsiString; Parent: THPDFDictionaryObject;
PageIndex: Integer; MCID: Integer;
const AltText: AnsiString; const ActualText: AnsiString): THPDFDictionaryObject; overload;
function AddStructureElement(const Role: AnsiString; Parent: THPDFDictionaryObject;
PageIndex: Integer; MCID: Integer;
const AltText: AnsiString; const ActualText: AnsiString;
const IDStr: AnsiString): THPDFDictionaryObject; overload;
function AddStructureElement(T: THPDFStandardStructureType; Parent: THPDFDictionaryObject;
PageIndex: Integer = -1; MCID: Integer = -1): THPDFDictionaryObject; overload;
procedure SetStructureElementLanguage(Elem: THPDFDictionaryObject; const Lang: AnsiString);
procedure SetStructureElementExpansionText(Elem: THPDFDictionaryObject; const ExpansionText: AnsiString);
procedure SetStructureElementTitle(Elem: THPDFDictionaryObject; const Title: AnsiString);
procedure AddStructRoleMap(const SourceRole: AnsiString; const TargetRole: AnsiString);
function BeginTaggedContent(const Role: AnsiString; Parent: THPDFDictionaryObject;
const Lang: AnsiString = ''; const Alt: AnsiString = '';
const ActualText: AnsiString = ''; const ExpansionText: AnsiString = ''): THPDFDictionaryObject;
procedure EndTaggedContent;
function EmitTaggedHeading(Level: Integer; Parent: THPDFDictionaryObject; X, Y: Single; const Text: WideString): THPDFDictionaryObject;
function BeginTaggedList(Parent: THPDFDictionaryObject; const NumberingStyle: AnsiString = 'None'): THPDFDictionaryObject;
function EmitTaggedListItem(ListElem: THPDFDictionaryObject; LblX, LblY: Single; const LabelText: WideString; BodyX, BodyY: Single; const BodyText: WideString): THPDFDictionaryObject;
function BeginTaggedTable(Parent: THPDFDictionaryObject): THPDFDictionaryObject;
function AddTaggedTableRow(TableElem: THPDFDictionaryObject): THPDFDictionaryObject;
function EmitTaggedTableHeader(TRElem: THPDFDictionaryObject; X, Y: Single; const Text: WideString; const Scope: AnsiString): THPDFDictionaryObject;
function EmitTaggedTableCell(TRElem: THPDFDictionaryObject; X, Y: Single; const Text: WideString): THPDFDictionaryObject;
function BeginTaggedFigure(Parent: THPDFDictionaryObject; const AltText: AnsiString; const BBox: array of Single): THPDFDictionaryObject;
procedure EndTaggedFigure;
procedure RegisterAnnotForStructure(AnnotDict: THPDFDictionaryObject; StructElem: THPDFDictionaryObject);
function StandardStructureTypeToName(T: THPDFStandardStructureType): AnsiString;
function IsStandardStructureType(const Name: AnsiString): Boolean;
Membuat elemen struktur
AddStructureElement membuat dictionary /StructElem dan menambahkannya sebagai anak dari Parent; berikan nil untuk melampirkannya di bawah akar pohon struktur. PageIndex menautkan elemen ke halaman melalui /Pg, sedangkan nilai negatif menghilangkan tautan tersebut. MCID bernilai nol atau lebih mengaitkan urutan marked-content pada halaman dengan elemen dan mendaftarkannya ke /ParentTree dokumen. Overload enam argumen menambahkan /Alt dan /ActualText, sedangkan overload tujuh argumen juga menulis /ID yang unik dalam dokumen
Tipe struktur standar (Table 333)
Overload THPDFStandardStructureType adalah titik masuk yang type-safe: nama role /S yang dihasilkan selalu termasuk tipe struktur standar ISO 32000-1 §14.8.4 Table 333, sehingga risiko salah ketik dan perbedaan huruf besar/kecil pada role string terbuka dapat dihindari
- Pengelompokan:
sstDocument,sstPart,sstArt,sstSect,sstDiv,sstBlockQuote,sstCaption,sstTOC,sstTOCI,sstIndex,sstNonStruct,sstPrivate - Level blok:
sstH,sstH1-sstH6,sstP,sstL,sstLI,sstLbl,sstLBody,sstTable,sstTR,sstTH,sstTD,sstTHead,sstTBody,sstTFoot - Level inline:
sstSpan,sstQuote,sstNote,sstReference,sstBibEntry,sstCode,sstLink,sstAnnot - Ruby dan Warichu:
sstRuby,sstRB,sstRT,sstRP,sstWarichu,sstWT,sstWP - Ilustrasi:
sstFigure,sstFormula,sstForm
Perhatikan huruf kecil pada sstLbl / sstLBody: nama role PDF sebenarnya adalah Lbl dan LBody. Nama role kustom tetap dapat dikirim melalui overload AnsiString dan dipetakan kembali ke role standar dengan AddStructRoleMap
Contoh
PDF.PDFUACompliance := pdfuaPDFUA1;
PDF.BeginDoc;
Doc := PDF.AddStructureElement(sstDocument, nil);
H1 := PDF.AddStructureElement(sstH1, Doc);
PDF.SetStructureElementLanguage(Doc, 'en-US');
PDF.SetStructureElementTitle(H1, 'Annual Report');
// Alt / ActualText ride on the AnsiString overload; reuse the
// spec-prescribed role name via StandardStructureTypeToName
Fig := PDF.AddStructureElement(StandardStructureTypeToName(sstFigure), Doc, 0, -1,
'Sales by quarter: Q1 4.2M, Q2 5.1M, Q3 5.8M, Q4 6.4M', '');
Atribut struktur dan pemetaan role
SetStructureElementLanguage menulis override /Lang BCP-47, SetStructureElementExpansionText menulis teks ekspansi /E, SetStructureElementTitle menulis judul yang dapat dibaca manusia pada /T, dan AddStructRoleMap memetakan role struktur kustom kembali ke role PDF standar. StandardStructureTypeToName mengembalikan nama role PDF untuk nilai THPDFStandardStructureType, dan IsStandardStructureType memeriksa apakah nama role adalah role standar
Helper tingkat tinggi untuk konten tagged
EmitTaggedHeading, BeginTaggedList, EmitTaggedListItem, BeginTaggedTable, AddTaggedTableRow, EmitTaggedTableHeader, EmitTaggedTableCell, BeginTaggedFigure, EndTaggedFigure, dan RegisterAnnotForStructure mencakup pengaitan heading, daftar, tabel, gambar, dan anotasi PDF/UA tanpa memaksa pemanggil mengelola MCID secara manual
Alur kerja umum
Aktifkan output tagged atau PDFUACompliance, buat elemen struktur akar, gunakan keluarga helper untuk mengeluarkan konten semantik, lalu tutup setiap urutan tagged-content atau gambar yang dimulai sebelum EndDoc