THotPDF.AddStructureElement et assistants PDF balisés
Cette page documente les helpers actuels de PDF balisé et d’arbre de structure PDF/UA de THotPDF. Les identifiants de code correspondent aux déclarations publiques
Surface Delphi actuelle
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 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;
Création d’éléments de structure
AddStructureElement crée un dictionnaire /StructElem et l’ajoute comme enfant de Parent (transmettez nil pour l’attacher sous la racine de l’arbre de structure). PageIndex lie l’élément à sa page via /Pg ; transmettez une valeur négative pour omettre. MCID, lorsqu’il est supérieur ou égal à zéro, associe une séquence de contenu marqué de la page à l’élément et l’enregistre dans le /ParentTree du document. La surcharge à six arguments ajoute /Alt (description alternative lue à voix haute pour le contenu non textuel tel que figures et formules) et /ActualText (texte de remplacement renvoyé par copier/coller pour les glyphes difficiles à extraire). La surcharge à sept arguments écrit en outre un /ID unique dans le document afin que d’autres éléments de structure puissent cibler l’élément par ID (ISO 32000-1 §14.7.2)
Types de structure standard (Table 333)
La surcharge à énumération THPDFStandardStructureType est le point d’entrée sûr en types : le nom de rôle /S émis est garanti être l’un des types de structure standard d’ISO 32000-1 §14.8.4 Table 333, éliminant le risque de faute de frappe et de casse de la surcharge à chaîne ouverte. L’énumération groupe les noms par famille de spécification :
- Groupement :
sstDocument,sstPart,sstArt,sstSect,sstDiv,sstBlockQuote,sstCaption,sstTOC,sstTOCI,sstIndex,sstNonStruct,sstPrivate - Niveau bloc :
sstH,sstH1-sstH6,sstP,sstL,sstLI,sstLbl,sstLBody,sstTable,sstTR,sstTH,sstTD,sstTHead,sstTBody,sstTFoot - Niveau en ligne :
sstSpan,sstQuote,sstNote,sstReference,sstBibEntry,sstCode,sstLink,sstAnnot - Ruby et Warichu :
sstRuby,sstRB,sstRT,sstRP,sstWarichu,sstWT,sstWP - Illustration :
sstFigure,sstFormula,sstForm
Notez les minuscules dans sstLbl / sstLBody : les noms de rôles PDF littéraux sont Lbl et LBody. Les noms de rôles personnalisés peuvent toujours être transmis via la surcharge AnsiString et ramenés à un rôle standard avec AddStructRoleMap
Exemple
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 voyagent sur la surcharge AnsiString ; réutilisez le
// nom de rôle prescrit par la spécification via StandardStructureTypeToName
Fig := PDF.AddStructureElement(StandardStructureTypeToName(sstFigure), Doc, 0, -1,
function IsStandardStructureType(const Name: AnsiString): Boolean;
Attributs de structure et mappage des rôles
SetStructureElementLanguage écrit une substitution BCP-47 /Lang, SetStructureElementExpansionText écrit le texte d’expansion /E, SetStructureElementTitle écrit le titre lisible /T, et AddStructRoleMap mappe les rôles de structure personnalisés vers les rôles PDF standard. StandardStructureTypeToName renvoie le nom de rôle PDF pour une valeur THPDFStandardStructureType, et IsStandardStructureType vérifie si un nom de rôle est standard
Assistants PDF balisés de haut niveau
EmitTaggedHeading, BeginTaggedList, EmitTaggedListItem, BeginTaggedTable, AddTaggedTableRow, EmitTaggedTableHeader, EmitTaggedTableCell, BeginTaggedFigure, EndTaggedFigure et RegisterAnnotForStructure couvrent le chaînage courant des titres, listes, tableaux, figures et annotations PDF/UA sans obliger les appelants à gérer les MCID manuellement
Flux de travail type
Activez la sortie balisée ou PDFUACompliance, créez l’élément racine de structure, utilisez la famille d’assistants pour émettre du contenu sémantique, puis fermez chaque séquence de contenu balisé ou de figure ouverte avant EndDoc
Création sûre en continuation
BeginTaggedContentForStructure et AppendStructureMarkedContent attachent des références de contenu marqué locales à la page à un même élément de structure logique existant à travers les continuations de pages
Structure PDF/UA automatique issue des arbres de mise en page applique le même modèle aux titres, listes, tableaux, figures et artefacts déclaratifs