THotPDF.AddStructureElement și ajutoare Tagged PDF
Această pagină documentează ajutoarele curente THotPDF pentru Tagged PDF și arborele de structură PDF/UA. Identificatorii de cod corespund declarațiilor publice
Suprafața Delphi curentă
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;
Crearea elementelor de structură
AddStructureElement creează un dicționar /StructElem și îl adaugă ca fiu al lui Parent; transmiteți nil pentru atașare sub rădăcina arborelui de structură. PageIndex leagă elementul de pagină prin /Pg, iar o valoare negativă omite legătura. MCID, când este zero sau mai mare, asociază o secvență marked-content de pe pagină cu elementul și o înregistrează în /ParentTree al documentului. Supraîncărcarea cu șase argumente adaugă /Alt și /ActualText, iar cea cu șapte argumente scrie și un /ID unic în document
Tipuri standard de structură (Table 333)
Supraîncărcarea THPDFStandardStructureType este punctul de intrare type-safe: numele de rol /S emis este garantat ca unul dintre tipurile standard de structură din ISO 32000-1 §14.8.4 Table 333, eliminând riscul de greșeli de scriere și diferențe de majuscule dintr-un rol text liber
- Grupare:
sstDocument,sstPart,sstArt,sstSect,sstDiv,sstBlockQuote,sstCaption,sstTOC,sstTOCI,sstIndex,sstNonStruct,sstPrivate - Nivel bloc:
sstH,sstH1-sstH6,sstP,sstL,sstLI,sstLbl,sstLBody,sstTable,sstTR,sstTH,sstTD,sstTHead,sstTBody,sstTFoot - Nivel inline:
sstSpan,sstQuote,sstNote,sstReference,sstBibEntry,sstCode,sstLink,sstAnnot - Ruby și Warichu:
sstRuby,sstRB,sstRT,sstRP,sstWarichu,sstWT,sstWP - Ilustrație:
sstFigure,sstFormula,sstForm
Observați literele mici din sstLbl / sstLBody: numele reale de rol PDF sunt Lbl și LBody. Numele de rol personalizate pot fi transmise în continuare prin supraîncărcarea AnsiString și mapate înapoi la un rol standard cu AddStructRoleMap
Exemplu
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', '');
Atribute de structură și mapare de roluri
SetStructureElementLanguage scrie o suprascriere /Lang BCP-47, SetStructureElementExpansionText scrie textul de extindere /E, SetStructureElementTitle scrie titlul lizibil /T, iar AddStructRoleMap mapează rolurile de structură personalizate înapoi la roluri PDF standard. StandardStructureTypeToName returnează numele rolului PDF pentru o valoare THPDFStandardStructureType, iar IsStandardStructureType verifică dacă un nume de rol este standard
Ajutoare de nivel înalt pentru conținut tagged
EmitTaggedHeading, BeginTaggedList, EmitTaggedListItem, BeginTaggedTable, AddTaggedTableRow, EmitTaggedTableHeader, EmitTaggedTableCell, BeginTaggedFigure, EndTaggedFigure și RegisterAnnotForStructure acoperă cablarea obișnuită PDF/UA pentru titluri, liste, tabele, figuri și adnotări fără ca apelantul să gestioneze manual MCID
Flux de lucru tipic
Activați ieșirea tagged sau PDFUACompliance, creați elementul rădăcină de structură, folosiți familia de ajutoare pentru conținut semantic și închideți fiecare secvență tagged-content sau figură începută înainte de EndDoc