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ño | Estructura generada |
|---|---|
THPDFDOMText | P, o H1 a 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 cuadros decorativos | Contenido 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