Estrutura automática PDF/UA a partir de árvores de layout
THPDFDOMRenderer pode transformar a árvore de layout visual em uma árvore de estrutura lógica correspondente sem alocação manual de MCID
THPDFDOMDocument.GenerateStructure assume o padrão True, habilita a saída PDF marcada, cria uma raiz Document e um Sect por seção e usa THPDFDOMDocument.Language quando o destino não tem idioma de documento
Padrões e substituições semânticas
| Conteúdo de layout | Estrutura gerada |
|---|---|
THPDFDOMText | P, ou H1 a H6 quando HeadingLevel é atribuído |
THPDFDOMStack e THPDFDOMContainer | Div |
THPDFDOMList | L com descendentes LI, Lbl e LBody mais ListNumbering |
THPDFDOMTable | Table, TR, TH e TD, com escopo de coluna nas células de cabeçalho |
THPDFDOMImage | Figure com texto alternativo |
| Cabeçalhos, rodapés, cabeçalhos de tabela repetidos, espaçadores e caixas decorativas | Conteúdo marcado Artifact |
Cada componente também expõe SemanticRole, SemanticLanguage, AlternativeText, ActualText, ExpansionText e Artifact para controle explícito
Exemplo de documento acessível
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);
O renderizador rejeita um primeiro cabeçalho acima de H1, níveis de cabeçalho ignorados, papéis órfãos de lista ou tabela e uma figura PDF/UA sem texto alternativo antes de gravar estrutura inválida
Identidade entre páginas e ordem de leitura
Um componente lógico mantém um elemento de estrutura quando se divide entre páginas
Cada continuação visível recebe um MCID local da página e um dicionário MCR que aponta do elemento de estrutura existente para a página correta
A ParentTree da página mapeia cada MCID de volta para esse mesmo elemento de estrutura, enquanto clones de continuação preservam a identidade lógica sem copiar o texto de origem ou as linhas da tabela
Cabeçalhos de tabela repetidos em páginas de continuação são artefatos para que sua repetição visual não reordene o cabeçalho lógico da tabela à frente das linhas de corpo anteriores
APIs de autoria diretas seguras para continuação
BeginTaggedContentForStructure aloca um MCID e abre conteúdo marcado para um elemento de estrutura que já existe
AppendStructureMarkedContent anexa uma página explícita e um MCID como MCR e atualiza a ParentTree da página
Use esses métodos de nível inferior quando um renderizador de layout personalizado possui a lógica de continuação fora de HPDFLayoutDOM
Estatísticas e compatibilidade
THPDFDOMRenderStatistics relata contagens de elementos de estrutura, conteúdo marcado e artefatos junto com páginas, posicionamentos, divisões e profundidade de continuação
Defina GenerateStructure como False antes de renderizar quando a saída não marcada compatível em bytes for necessária