Automatische PDF/UA-Struktur aus Layout-Bäumen
THPDFDOMRenderer kann den visuellen Layout-Baum ohne manuelle MCID-Zuweisung in einen passenden logischen Strukturbaum überführen
THPDFDOMDocument.GenerateStructure ist standardmäßig True, aktiviert die Tagged-PDF-Ausgabe, erstellt eine Document-Wurzel sowie pro Abschnitt ein Sect und verwendet THPDFDOMDocument.Language, falls das Ziel keine Dokumentsprache besitzt
Semantische Vorgaben und Überschreibungen
| Layout-Inhalt | Erzeugte Struktur |
|---|---|
THPDFDOMText | P oder H1 bis H6, wenn HeadingLevel gesetzt ist |
THPDFDOMStack und THPDFDOMContainer | Div |
THPDFDOMList | L mit Nachfahren LI, Lbl und LBody sowie ListNumbering |
THPDFDOMTable | Table, TR, TH und TD mit Spaltengültigkeitsbereich in Kopfzellen |
THPDFDOMImage | Figure mit Alternativtext |
| Kopf- und Fußzeilen, wiederholte Tabellenköpfe, Abstandselemente und dekorative Rahmen | als Artifact markierter Inhalt |
Jede Komponente bietet außerdem SemanticRole, SemanticLanguage, AlternativeText, ActualText, ExpansionText und Artifact für explizite Steuerung
Beispiel für ein barrierefreies Dokument
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);
Der Renderer weist vor dem Schreiben einer ungültigen Struktur eine erste Überschrift oberhalb von H1, übersprungene Überschriftenebenen, verwaiste Listen- oder Tabellenrollen und PDF/UA-Abbildungen ohne Alternativtext zurück
Seitenübergreifende Identität und Lesereihenfolge
Eine logische Komponente behält ein einzelnes Strukturelement, wenn sie sich über mehrere Seiten erstreckt
Jede sichtbare Fortsetzung erhält eine seitenlokale MCID und ein MCR-Dictionary, das vom bestehenden Strukturelement auf die richtige Seite verweist
Der ParentTree der Seite ordnet jede MCID demselben Strukturelement zu, während Fortsetzungsklone die logische Identität bewahren, ohne den Quelltext oder Tabellenzeilen zu kopieren
Wiederholte Tabellenköpfe auf Folgeseiten sind Artefakte, damit ihre visuelle Wiederholung den logischen Tabellenkopf nicht vor frühere Datenzeilen einsortiert
Direkte APIs für fortsetzungssicheres Schreiben
BeginTaggedContentForStructure reserviert eine MCID und öffnet markierten Inhalt für ein bereits vorhandenes Strukturelement
AppendStructureMarkedContent fügt eine explizite Seite und MCID als MCR an und aktualisiert den ParentTree der Seite
Verwenden Sie diese APIs auf niedriger Ebene, wenn ein eigener Layout-Renderer die Fortsetzungslogik außerhalb von HPDFLayoutDOM verwaltet
Statistiken und Kompatibilität
THPDFDOMRenderStatistics meldet Struktur-, markierte Inhalts- und Artefaktanzahlen zusammen mit Seiten, Platzierungen, Aufteilungen und Fortsetzungstiefe
Setzen Sie GenerateStructure vor dem Rendern auf False, wenn eine bytekompatible Ausgabe ohne Tags erforderlich ist