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
- Gruppering:
sstDocument,sstPart,sstArt,sstSect,sstDiv,sstBlockQuote,sstCaption,sstTOC,sstTOCI,sstIndex,sstNonStruct,sstPrivate - Blokniveau:
sstH,sstH1-sstH6,sstP,sstL,sstLI,sstLbl,sstLBody,sstTable,sstTR,sstTH,sstTD,sstTHead,sstTBody,sstTFoot - Inline-niveau:
sstSpan,sstQuote,sstNote,sstReference,sstBibEntry,sstCode,sstLink,sstAnnot - Ruby og Warichu:
sstRuby,sstRB,sstRT,sstRP,sstWarichu,sstWT,sstWP - Illustration:
sstFigure,sstFormula,sstForm
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