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 page | Structure générée |
|---|---|
THPDFDOMText | P, ou H1 à H6 lorsque HeadingLevel est affecté |
THPDFDOMStack et THPDFDOMContainer | Div |
THPDFDOMList | L avec descendants LI, Lbl et LBody plus ListNumbering |
THPDFDOMTable | Table, TR, TH et TD, avec portée de colonne pour les cellules d’en-tête |
THPDFDOMImage | Figure avec texte de remplacement |
| En-têtes, pieds de page, en-têtes de tableaux répétés, espacements et boîtes décoratives | Contenu 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