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 layoutEstrutura gerada
THPDFDOMTextP, ou H1 a H6 quando HeadingLevel é atribuído
THPDFDOMStack e THPDFDOMContainerDiv
THPDFDOMListL com descendentes LI, Lbl e LBody mais ListNumbering
THPDFDOMTableTable, TR, TH e TD, com escopo de coluna nas células de cabeçalho
THPDFDOMImageFigure com texto alternativo
Cabeçalhos, rodapés, cabeçalhos de tabela repetidos, espaçadores e caixas decorativasConteú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

APIs relacionadas