Estructura PDF/UA automática a partir de árboles de diseño

THPDFDOMRenderer puede convertir el árbol de diseño visual en un árbol de estructura lógica coincidente sin asignación manual de MCID

THPDFDOMDocument.GenerateStructure tiene como valor predeterminado True, habilita la salida PDF etiquetada, crea una raíz Document y un Sect por sección y usa THPDFDOMDocument.Language cuando el destino no tiene idioma de documento

Valores predeterminados semánticos y anulaciones

Contenido de diseñoEstructura generada
THPDFDOMTextP, o H1 a H6 cuando se asigna HeadingLevel
THPDFDOMStack y THPDFDOMContainerDiv
THPDFDOMListL con descendientes LI, Lbl y LBody más ListNumbering
THPDFDOMTableTable, TR, TH y TD, con ámbito de columna en las celdas de encabezado
THPDFDOMImageFigure con texto alternativo
Encabezados, pies de página, encabezados de tabla repetidos, espaciadores y cuadros decorativosContenido marcado Artifact

Todos los componentes exponen además SemanticRole, SemanticLanguage, AlternativeText, ActualText, ExpansionText y Artifact para un control explícito

Ejemplo de documento accesible

Document.Language := 'en-US';
Section := Document.AddSection;
Section.Header := THPDFDOMText.Create('Quarterly report');
Section.Body.AddHeading('Results', 1, 'Title');

List := THPDFDOMList.Create('Decimal', 'Steps');
List.AddItem('1.', 'Review the totals');
Section.Body.Add(List);

Table := THPDFDOMTable.Create('Summary');
Table.AddColumn;
Table.AddColumn;
Header := Table.AddRow(18, True);
Header[0].Text := 'Name';
Header[1].Text := 'Value';
Row := Table.AddRow(18);
Row[0].Text := 'Alpha';
Row[1].Text := '42';
Section.Body.Add(Table);

Section.Body.Add(THPDFDOMImage.Create(Bitmap, 120, 80,
  'Revenue chart by quarter', 'Chart'));

PDF.PDFUACompliance := True;
PDF.PDFUAPart := 2;
Statistics := Renderer.Render(Document, PDF);

El renderizador rechaza un primer encabezado por encima de H1, niveles de encabezado omitidos, roles de lista o tabla huérfanos y una figura PDF/UA sin texto alternativo antes de escribir estructura no válida

Identidad entre páginas y orden de lectura

Un componente lógico mantiene un único elemento de estructura cuando se divide entre páginas

Cada continuación visible recibe un MCID local a la página y un diccionario MCR que apunta desde el elemento de estructura existente a la página correcta

El ParentTree de la página asigna cada MCID de vuelta a ese mismo elemento de estructura, mientras que los clones de continuación preservan la identidad lógica sin copiar el texto de origen ni las filas de la tabla

Los encabezados de tabla repetidos en páginas de continuación son artefactos para que su repetición visual no reordene el encabezado lógico de la tabla delante de filas de cuerpo anteriores

APIs de autoría directas seguras para continuación

BeginTaggedContentForStructure asigna un MCID y abre contenido marcado para un elemento de estructura que ya existe

AppendStructureMarkedContent agrega una página y un MCID explícitos como MCR y actualiza el ParentTree de la página

Use estos métodos de bajo nivel cuando un renderizador de diseño personalizado sea propietario de la lógica de continuación fuera de HPDFLayoutDOM

Estadísticas y compatibilidad

THPDFDOMRenderStatistics informa de los recuentos de elementos de estructura, contenido marcado y artefactos junto con páginas, colocaciones, divisiones y profundidad de continuación

Establezca GenerateStructure en False antes de renderizar cuando se requiera salida no etiquetada compatible a nivel de bytes

APIs relacionadas