THotPDF.AddStructureElement and Tagged PDF Helpers
Esta página documenta los helpers actuales de árbol de estructuras tagged-PDF y PDF/UA de THotPDF. Los identificadores de código coinciden con las declaraciones públicas
Superficie Delphi actual
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;
Creación de elementos de estructura
AddStructureElement crea un diccionario /StructElem y lo añade como hijo de Parent (pase nil para colgarlo de la raíz del árbol de estructura). PageIndex vincula el elemento a su página mediante /Pg; pase un valor negativo para omitirlo. MCID, cuando es cero o mayor, asocia al elemento una secuencia de contenido marcado de la página y la registra en el /ParentTree del documento. La sobrecarga de seis argumentos añade /Alt (descripción alternativa que se lee en voz alta para el contenido no textual, como figuras y fórmulas) y /ActualText (texto de sustitución que se obtiene al copiar y pegar glifos difíciles de extraer). La sobrecarga de siete argumentos escribe además un /ID único en el documento, para que otros elementos de estructura puedan apuntar al elemento por ID (ISO 32000-1 §14.7.2)
Tipos de estructura estándar (Tabla 333)
La sobrecarga con enum THPDFStandardStructureType es el punto de entrada con seguridad de tipos: el nombre de rol /S emitido tiene garantizado ser uno de los tipos de estructura estándar de ISO 32000-1 §14.8.4 Tabla 333, eliminando el riesgo de errata y de distinción de mayúsculas de la sobrecarga de cadena abierta. El enum agrupa los nombres por su familia de especificación:
- Agrupación:
sstDocument,sstPart,sstArt,sstSect,sstDiv,sstBlockQuote,sstCaption,sstTOC,sstTOCI,sstIndex,sstNonStruct,sstPrivate - A nivel de bloque:
sstH,sstH1-sstH6,sstP,sstL,sstLI,sstLbl,sstLBody,sstTable,sstTR,sstTH,sstTD,sstTHead,sstTBody,sstTFoot - A nivel en línea:
sstSpan,sstQuote,sstNote,sstReference,sstBibEntry,sstCode,sstLink,sstAnnot - Ruby y Warichu:
sstRuby,sstRB,sstRT,sstRP,sstWarichu,sstWT,sstWP - Ilustración:
sstFigure,sstFormula,sstForm
Fíjese en las minúsculas de sstLbl / sstLBody: los nombres de rol PDF literales son Lbl y LBody. Los nombres de rol personalizados pueden seguir pasándose por la sobrecarga AnsiString y mapearse de vuelta a un rol estándar con AddStructRoleMap
Ejemplo
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', '');
Atributos de estructura y mapeo de roles
SetStructureElementLanguage escribe una anulación /Lang BCP-47, SetStructureElementExpansionText escribe el texto de expansión /E, SetStructureElementTitle escribe el título legible /T, y AddStructRoleMap mapea roles de estructura personalizados de vuelta a roles PDF estándar. StandardStructureTypeToName devuelve el nombre de rol PDF para un valor THPDFStandardStructureType, y IsStandardStructureType comprueba si un nombre de rol es uno de los roles estándar
Helpers etiquetados de alto nivel
EmitTaggedHeading, BeginTaggedList, EmitTaggedListItem, BeginTaggedTable, AddTaggedTableRow, EmitTaggedTableHeader, EmitTaggedTableCell, BeginTaggedFigure, EndTaggedFigure y RegisterAnnotForStructure cubren el cableado habitual de encabezados, listas, tablas, figuras y anotaciones PDF/UA sin obligar a los llamadores a gestionar MCIDs manualmente
Flujo de trabajo típico
Habilite la salida etiquetada o PDFUACompliance, cree el elemento de estructura raíz, use la familia de helpers para emitir contenido semántico y cierre toda secuencia de contenido etiquetado o figura iniciada antes de EndDoc
Autoría segura con continuaciones
BeginTaggedContentForStructure y AppendStructureMarkedContent adjuntan referencias de contenido marcado locales de la página a un elemento de estructura lógica existente a lo largo de las continuaciones de página
Estructura PDF/UA automática a partir de árboles de diseño aplica el mismo modelo a encabezados, listas, tablas, figuras y artifacts declarativos