THotPDF.AddStructureElement e helper per tagged PDF
Questa pagina documenta gli helper correnti di THotPDF per tagged PDF e per l'albero di struttura PDF/UA. Gli identificatori del codice corrispondono alle dichiarazioni pubbliche
Superficie Delphi corrente
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;
Creazione di elementi di struttura
AddStructureElement crea un dizionario /StructElem e lo aggiunge come figlio di Parent (passare nil per collegarlo sotto la radice dell'albero di struttura). PageIndex collega l'elemento alla sua pagina tramite /Pg; passare un valore negativo per ometterlo. MCID, quando è zero o maggiore, associa una sequenza marked-content sulla pagina all'elemento e la registra nel /ParentTree del documento. L'overload a sei argomenti aggiunge /Alt (descrizione alternativa letta per contenuti non testuali come figure e formule) e /ActualText (testo sostitutivo restituito da copia/incolla per glifi difficili da estrarre). L'overload a sette argomenti scrive inoltre un /ID univoco nel documento, così altri elementi di struttura possono puntare all'elemento per ID (ISO 32000-1 §14.7.2)
Tipi di struttura standard (Tabella 333)
L'overload enum THPDFStandardStructureType è il punto di ingresso type-safe: il nome di ruolo /S emesso è garantito come uno dei tipi di struttura standard di ISO 32000-1 §14.8.4 Tabella 333, eliminando il rischio di errori di battitura e sensibilità alle maiuscole dell'overload a stringa libera. L'enum raggruppa i nomi in base alla famiglia di specifica:
- Raggruppamento:
sstDocument,sstPart,sstArt,sstSect,sstDiv,sstBlockQuote,sstCaption,sstTOC,sstTOCI,sstIndex,sstNonStruct,sstPrivate - Livello blocco:
sstH,sstH1-sstH6,sstP,sstL,sstLI,sstLbl,sstLBody,sstTable,sstTR,sstTH,sstTD,sstTHead,sstTBody,sstTFoot - Livello inline:
sstSpan,sstQuote,sstNote,sstReference,sstBibEntry,sstCode,sstLink,sstAnnot - Ruby e Warichu:
sstRuby,sstRB,sstRT,sstRP,sstWarichu,sstWT,sstWP - Illustrazione:
sstFigure,sstFormula,sstForm
Si notino le lettere minuscole in sstLbl / sstLBody: i nomi letterali dei ruoli PDF sono Lbl e LBody. I nomi di ruolo personalizzati possono comunque essere passati tramite l'overload AnsiString e ricondotti a un ruolo standard con AddStructRoleMap
Esempio
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', '');
Attributi di struttura e mappatura dei ruoli
SetStructureElementLanguage scrive un override BCP-47 /Lang, SetStructureElementExpansionText scrive il testo di espansione /E, SetStructureElementTitle scrive il titolo leggibile /T e AddStructRoleMap mappa i ruoli di struttura personalizzati ai ruoli PDF standard. StandardStructureTypeToName restituisce il nome del ruolo PDF per un valore THPDFStandardStructureType e IsStandardStructureType verifica se un nome di ruolo è uno dei ruoli standard
Helper tagged di alto livello
EmitTaggedHeading, BeginTaggedList, EmitTaggedListItem, BeginTaggedTable, AddTaggedTableRow, EmitTaggedTableHeader, EmitTaggedTableCell, BeginTaggedFigure, EndTaggedFigure e RegisterAnnotForStructure coprono il collegamento comune di intestazioni, liste, tabelle, figure e annotazioni PDF/UA senza costringere i chiamanti a gestire manualmente gli MCID
Flusso di lavoro tipico
Abilitare l'output tagged o PDFUACompliance, creare l'elemento di struttura radice, usare la famiglia di helper per emettere contenuto semantico e chiudere ogni sequenza tagged-content o figure iniziata prima di EndDoc