Structure PDF/UA automatique à partir d’arbres de mise en page

THPDFDOMRenderer peut transformer l’arbre de mise en page visuel en arbre de structure logique correspondant sans allocation manuelle de MCID

THPDFDOMDocument.GenerateStructure vaut True par défaut, active la sortie PDF balisée, crée une racine Document et un Sect par section, et utilise THPDFDOMDocument.Language lorsque la cible ne possède aucune langue de document

Sémantique par défaut et substitutions

Contenu de mise en pageStructure générée
THPDFDOMTextP, ou H1 à H6 lorsque HeadingLevel est affecté
THPDFDOMStack et THPDFDOMContainerDiv
THPDFDOMListL avec descendants LI, Lbl et LBody plus ListNumbering
THPDFDOMTableTable, TR, TH et TD, avec portée de colonne pour les cellules d’en-tête
THPDFDOMImageFigure avec texte de remplacement
En-têtes, pieds de page, en-têtes de tableaux répétés, espacements et boîtes décorativesContenu marqué Artifact

Chaque composant expose également SemanticRole, SemanticLanguage, AlternativeText, ActualText, ExpansionText et Artifact pour un contrôle explicite

Exemple de document accessible

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);

Le moteur de rendu rejette un premier titre au-dessus de H1, les niveaux de titre sautés, les rôles orphelins de listes ou tableaux et toute figure PDF/UA sans texte de remplacement avant d’écrire une structure non valide

Identité interpages et ordre de lecture

Un composant logique conserve un seul élément de structure lorsqu’il se divise sur plusieurs pages

Chaque continuation visible reçoit un MCID local à la page et un dictionnaire MCR reliant l’élément de structure existant à la bonne page

Le ParentTree de la page associe chaque MCID à cet élément de structure, tandis que les clones de continuation préservent l’identité logique sans copier le texte source ni les lignes de tableau

Les en-têtes de tableau répétés sur les pages de continuation sont des artefacts afin que leur répétition visuelle ne réordonne pas l’en-tête logique avant les lignes de corps précédentes

API de création directe sûres pour les continuations

BeginTaggedContentForStructure alloue un MCID et ouvre du contenu marqué pour un élément de structure déjà existant

AppendStructureMarkedContent ajoute une page et un MCID explicites sous forme de MCR et met à jour le ParentTree de la page

Utilisez ces méthodes de bas niveau lorsqu’un moteur de mise en page personnalisé gère une logique de continuation hors de HPDFLayoutDOM

Statistiques et compatibilité

THPDFDOMRenderStatistics rapporte le nombre d’éléments de structure, de contenus marqués et d’artefacts, avec les pages, placements, divisions et la profondeur de continuation

Définissez GenerateStructure à False avant le rendu lorsqu’une sortie non balisée compatible au niveau des octets est requise

API associées