THotPDF.AddStructureElement + PDF/UA accessibility attributes

THotPDF tagged-PDF surface (v2.119.36 / v2.119.40 / v2.119.41)

 

AddXFAPacket  AcroForm Support

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

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