THotPDF.AddStructureElement + PDF/UA accessibility attributes

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

 

AddXFAPacket  AcroForm Support

THotPDF.AddStructureElement og hjælpefunktioner til Tagged PDF

Denne side beskriver de aktuelle THotPDF-hjælpere til Tagged PDF og PDF/UA-strukturtræer. Kodeidentifikatorer svarer til de offentlige deklarationer

Aktuel Delphi-overflade

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;

Oprettelse af strukturelementer

AddStructureElement opretter en /StructElem-ordbog og føjer den til som barn af Parent; brug nil for at lægge den under strukturtræets rod. PageIndex knytter elementet til siden via /Pg, mens en negativ værdi udelader koblingen. MCID på nul eller højere forbinder en marked-content-sekvens på siden med elementet og registrerer den i dokumentets /ParentTree. Overloaden med seks argumenter tilføjer /Alt til alternativ beskrivelse og /ActualText til erstatningstekst ved kopiering. Overloaden med syv argumenter skriver desuden et dokumentunikt /ID

Standardstrukturer (Table 333)

Overloaden med THPDFStandardStructureType er den typesikre indgang: rollen /S bliver altid et standardnavn fra ISO 32000-1 §14.8.4 Table 333, så fejlstavning og store/små bogstaver i en fri tekstrolle undgås

Bemærk de små bogstaver i sstLbl / sstLBody: de faktiske PDF-rollenavne er Lbl og LBody. Egne rollenavne kan stadig sendes gennem AnsiString-overloaden og mappes tilbage til en standardrolle med AddStructRoleMap

Eksempel

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', '');

Strukturattributter og rollemapping

SetStructureElementLanguage skriver en BCP-47 /Lang-overstyring, SetStructureElementExpansionText skriver udvidelsesteksten /E, SetStructureElementTitle skriver den læsbare titel /T, og AddStructRoleMap mapper egne strukturroller tilbage til standard PDF-roller. StandardStructureTypeToName returnerer PDF-rollenavnet for en THPDFStandardStructureType-værdi, og IsStandardStructureType kontrollerer om et rollenavn er standard

Hjælpere på højt niveau til tagged indhold

EmitTaggedHeading, BeginTaggedList, EmitTaggedListItem, BeginTaggedTable, AddTaggedTableRow, EmitTaggedTableHeader, EmitTaggedTableCell, BeginTaggedFigure, EndTaggedFigure og RegisterAnnotForStructure dækker almindelig PDF/UA-kobling af overskrifter, lister, tabeller, figurer og annotationer uden at kaldere skal styre MCID manuelt

Typisk arbejdsgang

Aktivér tagged output eller PDFUACompliance, opret rodstrukturelementet, brug hjælperfamilien til semantisk indhold, og luk hver startet tagged-content- eller figursekvens før EndDoc