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 equivalente sin asignación manual de MCID

THPDFDOMDocument.GenerateStructure tiene por defecto el valor 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 y reemplazos semánticos

Contenido de diseñoEstructura generada
THPDFDOMTextP, o H1 hasta 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 cajas decorativasContenido marcado Artifact

Cada componente también expone 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, los niveles de encabezado omitidos, los roles de lista o tabla huérfanos y una figura PDF/UA sin texto alternativo antes de escribir una estructura no válida

Identidad entre páginas y orden de lectura

Un componente lógico conserva un elemento de estructura cuando se divide entre varias páginas

Cada continuación visible recibe un MCID local de página y un diccionario MCR que apunta del 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 clonados de continuación conservan la identidad lógica sin copiar el texto fuente ni las filas de la tabla

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

API de autoría directas seguras para continuaciones

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

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

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

Estadísticas y compatibilidad

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

Defina GenerateStructure en False antes de renderizar cuando se necesite una salida sin etiquetar compatible a nivel de bytes

API relacionadas