從版面樹自動建立 PDF/UA 結構
THPDFDOMRenderer 可以在不需手動配置 MCID 的情況下,把視覺版面樹轉換成相符的邏輯結構樹
THPDFDOMDocument.GenerateStructure 預設為 True、啟用標籤化 PDF 輸出、為每個區段建立一個 Document 根與一個 Sect,並在目標沒有文件語言時使用 THPDFDOMDocument.Language
語意預設與覆寫
| 版面內容 | 產生的結構 |
|---|---|
THPDFDOMText | 指派 HeadingLevel 時為 P,或 H1 到 H6 |
THPDFDOMStack 與 THPDFDOMContainer | Div |
THPDFDOMList | 含有 LI、Lbl 與 LBody 後代的 L,以及 ListNumbering |
THPDFDOMTable | Table、TR、TH 與 TD,並在頁首儲存格上設定欄的範圍 |
THPDFDOMImage | 帶有替代文字的 Figure |
| 頁首、頁尾、重複的表格頁首、間距與裝飾框 | Artifact 標記內容 |
每個元件也為明確控制公開 SemanticRole、SemanticLanguage、AlternativeText、ActualText、ExpansionText 與 Artifact
無障礙文件範例
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);
轉譯器會在寫入無效結構之前拒絕高於 H1 的第一個標題、跳過的標題層級、孤立清單或表格角色,以及沒有替代文字的 PDF/UA 圖形
跨頁身分與閱讀順序
邏輯元件在跨越頁面分割時會保留單一結構元素
每個可見的接續會收到頁面在地的 MCID 與一個 MCR 字典,從現有的結構元素指向正確的頁面
頁面的 ParentTree 會把每個 MCID 對應回同一個結構元素,而接續複本在不複製來源文字或表格列的情況下保留邏輯身分
接續頁面上重複的表格頁首是工件,因此其視覺重複不會把邏輯表格頁首重新排列到較早的內文列之前
直接支援接續的編寫 API
BeginTaggedContentForStructure 會配置一個 MCID,並為已存在的結構元素開啟標記內容
AppendStructureMarkedContent 會以 MCR 方式附加明確的頁面與 MCID,並更新頁面的 ParentTree
當自訂版面轉譯器在 HPDFLayoutDOM 之外掌管接續邏輯時,請使用這些較低階的方法
統計與相容性
THPDFDOMRenderStatistics 會與頁面、放置、分割與接續深度一起回報結構元素、標記內容與工件的數量
當需要位元組相容的未標籤輸出時,請在轉譯之前把 GenerateStructure 設為 False