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ño | Estructura generada |
|---|---|
THPDFDOMText | P, o H1 hasta H6 cuando se asigna HeadingLevel |
THPDFDOMStack y THPDFDOMContainer | Div |
THPDFDOMList | L con descendientes LI, Lbl y LBody más ListNumbering |
THPDFDOMTable | Table, TR, TH y TD, con ámbito de columna en las celdas de encabezado |
THPDFDOMImage | Figure con texto alternativo |
| Encabezados, pies de página, encabezados de tabla repetidos, espaciadores y cajas decorativas | Contenido 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