Automatyczna struktura PDF/UA z drzew układu
THPDFDOMRenderer może przekształcić wizualne drzewo układu w pasujące logiczne drzewo struktury bez ręcznego przydzielania identyfikatorów MCID
THPDFDOMDocument.GenerateStructure domyślnie przyjmuje wartość True, włącza oznaczony wyjście PDF, tworzy jeden korzeń Document i jeden Sect na sekcję oraz używa THPDFDOMDocument.Language, gdy obiekt docelowy nie ma języka dokumentu
Domyślna semantyka i nadpisywania
| Zawartość układu | Wygenerowana struktura |
|---|---|
THPDFDOMText | P lub H1 do H6, gdy przypisano HeadingLevel |
THPDFDOMStack i THPDFDOMContainer | Div |
THPDFDOMList | L z potomkami LI, Lbl i LBody oraz ListNumbering |
THPDFDOMTable | Table, TR, TH i TD z zakresem kolumny na komórkach nagłówka |
THPDFDOMImage | Figure z tekstem alternatywnym |
| Nagłówki, stopki, powtarzane nagłówki tabel, odstępniki i dekoracyjne ramki | Oznaczona treść Artifact |
Każdy komponent udostępnia również SemanticRole, SemanticLanguage, AlternativeText, ActualText, ExpansionText i Artifact dla jawnej kontroli
Przykład dostępnego dokumentu
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);
Renderer odrzuca pierwszy nagłówek powyżej H1, pominięte poziomy nagłówków, osierocone role list lub tabel oraz figurę PDF/UA bez tekstu alternatywnego przed zapisaniem nieprawidłowej struktury
Tożsamość między stronami i kolejność czytania
Komponent logiczny zachowuje jeden element struktury, gdy rozdziela się na strony
Każda widoczna kontynuacja otrzymuje lokalny dla strony identyfikator MCID oraz słownik MCR, który wskazuje z istniejącego elementu struktury na prawidłową stronę
Strona ParentTree odwzorowuje każdy identyfikator MCID z powrotem na ten sam element struktury, podczas gdy klony kontynuacji zachowują tożsamość logiczną bez kopiowania źródłowego tekstu ani wierszy tabeli
Powtarzane nagłówki tabel na stronach kontynuacji są artefaktami, więc ich wizualne powtarzanie nie przestawia logicznego nagłówka tabeli przed wcześniejsze wiersze treści
Bezpośrednie API autorskie bezpieczne dla kontynuacji
BeginTaggedContentForStructure przydziela identyfikator MCID i otwiera oznaczoną treść dla elementu struktury, który już istnieje
AppendStructureMarkedContent dołącza jawną stronę i identyfikator MCID jako MCR oraz aktualizuje stronę ParentTree
Użyj tych metod niższego poziomu, gdy niestandardowy renderer układu posiada logikę kontynuacji poza HPDFLayoutDOM
Statystyki i zgodność
THPDFDOMRenderStatistics zgłasza liczniki elementów struktury, oznaczonych treści i artefaktów obok stron, rozmieszczeń, podziałów i głębokości kontynuacji
Ustaw GenerateStructure na False przed renderowaniem, gdy wymagane jest wyjście bez oznaczeń zgodne bajtowo