THotPDF.AddStructureElement and Tagged PDF Helpers
Den här sidan dokumenterar de aktuella THotPDF -hjälpfunktionerna för taggad PDF och PDF/UA-strukturträd. Kodidentifierare matchar de publika deklarationerna
Aktuell Delphi-yta
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;
Att skapa strukturelement
AddStructureElement skapar en /StructElem -ordlista och lägger till den som barn till Parent (skicka nil för att bifoga under strukturträdets rot). PageIndex länkar elementet till dess sida via /Pg; skicka ett negativt värde för att utelämna. MCID, när noll eller större, kopplar en markerad-innehåll-sekvens på sidan till elementet och registrerar den i dokumentets /ParentTree. Sexargument-överbelastningen lägger till /Alt (alternativ beskrivning som läses upp för icke-textinnehåll som figurer och formler) och /ActualText (ersättningstext som returneras vid kopiera/klistra in för svårextraherade glyfer). Sjuargument-överbelastningen skriver dessutom ett dokumentunikt /ID så att andra strukturelement kan rikta elementet per ID (ISO 32000-1 §14.7.2)
Standardstrukturtyper (tabell 333)
Den THPDFStandardStructureType enum-överbelastningen är den typsäkra ingångspunkten: det emitterade /S rollnamnet är garanterat en av standardstrukturtyperna i ISO 32000-1 §14.8.4 tabell 333, vilket eliminerar risken för stavfel och skiftlägeskänslighet hos öppen-sträng-överbelastningen. Enummen grupperar namnen efter sin specifikationsfamilj:
- Gruppering:
sstDocument,sstPart,sstArt,sstSect,sstDiv,sstBlockQuote,sstCaption,sstTOC,sstTOCI,sstIndex,sstNonStruct,sstPrivate - Blocknivå:
sstH,sstH1-sstH6,sstP,sstL,sstLI,sstLbl,sstLBody,sstTable,sstTR,sstTH,sstTD,sstTHead,sstTBody,sstTFoot - Radnivå:
sstSpan,sstQuote,sstNote,sstReference,sstBibEntry,sstCode,sstLink,sstAnnot - Ruby och Warichu:
sstRuby,sstRB,sstRT,sstRP,sstWarichu,sstWT,sstWP - Illustration:
sstFigure,sstFormula,sstForm
Notera gemenerna i sstLbl / sstLBody: de litterala PDF-rollnamnen är Lbl och LBody. Egna rollnamn kan fortfarande skickas via AnsiString överbelastningen och mappas tillbaka till en standardroll med AddStructRoleMap
Exempel
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', '');
Strukturattribut och rollmappning
SetStructureElementLanguage skriver en BCP-47 /Lang -överskrivning, SetStructureElementExpansionText skriver /E -expansionstexten, SetStructureElementTitle skriver den människoläsbara /T -titeln, och AddStructRoleMap mappar egna strukturroller tillbaka till standardroller i PDF. StandardStructureTypeToName returnerar PDF-rollnamnet för ett THPDFStandardStructureType värde, och IsStandardStructureType kontrollerar om ett rollnamn är en av standardrollerna
Högnivå-tagged-hjälpfunktioner
EmitTaggedHeading, BeginTaggedList, EmitTaggedListItem, BeginTaggedTable, AddTaggedTableRow, EmitTaggedTableHeader, EmitTaggedTableCell, BeginTaggedFigure, EndTaggedFigure och RegisterAnnotForStructure täcker vanlig PDF/UA-koppling av rubrik, lista, tabell, figur och annotering utan att tvinga anropare att hantera MCIDs manuellt
Typiskt arbetsflöde
Aktivera taggad utdata eller PDFUACompliance, skapa rotstrukturelementet, använd hjälpfamiljen för att emittera semantiskt innehåll, och stäng varje påbörjad tagged-content- eller figursekvens innan EndDoc
Fortsättningssäker författning
BeginTaggedContentForStructure och AppendStructureMarkedContent bifogar sidlokala referenser för markerat innehåll till ett befintligt logiskt strukturelement över sidfortsättningar
Automatic PDF/UA Structure from Layout Trees tillämpar samma modell på deklarativa rubriker, listor, tabeller, figurer och artefakter