THotPDF.AddStructureElement と Tagged PDF ヘルパー
このページでは、現在の THotPDF のタグ付き PDF(tagged-PDF)および PDF/UA 構造ツリーヘルパーについて説明します。コードの識別子はパブリック宣言と一致します
現在の Delphi サーフェス
function AddStructureElement(const Role: AnsiString; Parent: THPDFDictionaryObject;
PageIndex: Integer = -1; MCID: Integer = -1): THPDFDictionaryObject; overload;
function AddStructureElement(const Role: AnsiString; Parent: THPDFDictionaryObject;
PageIndex: Integer; MCID: Integer;
const AltText: AnsiString; const ActualText: AnsiString): THPDFDictionaryObject; overload;
function AddStructureElement(const Role: AnsiString; Parent: THPDFDictionaryObject;
PageIndex: Integer; MCID: Integer;
const AltText: AnsiString; const ActualText: AnsiString;
const IDStr: AnsiString): THPDFDictionaryObject; overload;
function AddStructureElement(T: THPDFStandardStructureタイプ; Parent: THPDFDictionaryObject;
PageIndex: Integer = -1; MCID: Integer = -1): THPDFDictionaryObject; overload;
procedure SetStructureElementLanguage(Elem: THPDFDictionaryObject; const Lang: AnsiString);
procedure SetStructureElementExpansionText(Elem: THPDFDictionaryObject; const ExpansionText: AnsiString);
procedure SetStructureElementTitle(Elem: THPDFDictionaryObject; const Title: AnsiString);
procedure AddStructRoleMap(const SourceRole: AnsiString; const TargetRole: AnsiString);
function BeginTaggedContent(const Role: AnsiString; Parent: THPDFDictionaryObject;
const Lang: AnsiString = ''; const Alt: AnsiString = '';
const ActualText: AnsiString = ''; const ExpansionText: AnsiString = ''): THPDFDictionaryObject;
procedure EndTaggedContent;
function EmitTaggedHeading(Level: Integer; Parent: THPDFDictionaryObject; X, Y: Single; const Text: WideString): THPDFDictionaryObject;
function BeginTaggedList(Parent: THPDFDictionaryObject; const NumberingStyle: AnsiString = 'None'): THPDFDictionaryObject;
function EmitTaggedListItem(ListElem: THPDFDictionaryObject; LblX, LblY: Single; const LabelText: WideString; BodyX, BodyY: Single; const BodyText: WideString): THPDFDictionaryObject;
function BeginTaggedTable(Parent: THPDFDictionaryObject): THPDFDictionaryObject;
function AddTaggedTableRow(TableElem: THPDFDictionaryObject): THPDFDictionaryObject;
function EmitTaggedTableHeader(TRElem: THPDFDictionaryObject; X, Y: Single; const Text: WideString; const Scope: AnsiString): THPDFDictionaryObject;
function EmitTaggedTableCell(TRElem: THPDFDictionaryObject; X, Y: Single; const Text: WideString): THPDFDictionaryObject;
function BeginTaggedFigure(Parent: THPDFDictionaryObject; const AltText: AnsiString; const BBox: array of Single): THPDFDictionaryObject;
procedure EndTaggedFigure;
procedure RegisterAnnotForStructure(AnnotDict: THPDFDictionaryObject; StructElem: THPDFDictionaryObject);
function StandardStructureタイプTo名前(T: THPDFStandardStructureタイプ): AnsiString;
function IsStandardStructureタイプ(const 名前: AnsiString): Boolean;
構造要素の作成
AddStructureElement creates a /StructElem dictionary and appends it as a child of Parent (pass nil to attach under the structure tree root). PageIndex links the element to its page via /Pg; pass a negative value to omit. MCID, when zero or greater, associates a marked-content sequence on the page with the element and registers it in the document /ParentTree. The six-argument overload adds /Alt (alternative description read aloud for non-text content such as figures and formulas) and /ActualText (replacement text returned by copy/paste for hard-to-extract glyphs). The seven-argument overload additionally writes a document-unique /ID so other structure elements can target the element by ID (ISO 32000-1 §14.7.2)
標準構造タイプ(テーブル 333)
THPDFStandardStructure タイプの enum overload は型安全な入口です。出力される /S ロール名は ISO 32000-1 §14.8.4 Table 333 の標準構造タイプのいずれかであることが保証され、自由文字列 overload で起こり得るタイプミスや大文字小文字の危険を排除します。この enum は仕様ファミリー別に名前をグループ化します:
- グループ化:
sstDocument、sstPart、sstArt、sstSect、sstDiv、sstBlockQuote、sstCaption、sstTOC、sstTOCI、sstIndex、sstNonStruct、sstPrivate - ブロックレベル:
sstH、sstH1-sstH6、sstP、sstL、sstLI、sstLbl、sstLBody、sstTable、sstTR、sstTH、sstTD、sstTHead、sstTBody、sstTFoot - インラインレベル:
sstSpan、sstQuote、sstNote、sstReference、sstBibEntry、sstCode、sstLink、sstAnnot - ルビと割注(Warichu):
sstRuby、sstRB、sstRT、sstRP、sstWarichu、sstWT、sstWP - イラストレーション:
sstFigure、sstFormula、sstForm
sstLbl / sstLBody の小文字に注意してください。リテラルの PDF ロール名は Lbl と LBody です。カスタムロール名は引き続き AnsiString オーバーロードを介して渡し、AddStructRoleMap を使用して標準ロールにマッピングして戻すことができます。
例
PDF.PDFUACompliance := pdfuaPDFUA1;
PDF.BeginDoc;
Doc := PDF.AddStructureElement(sstDocument, nil);
H1 := PDF.AddStructureElement(sstH1, Doc);
PDF.SetStructureElementLanguage(Doc, 'en-US');
PDF.SetStructureElementTitle(H1, 'Annual Report');
// Alt / ActualText ride on the AnsiString overload; reuse the
// spec-prescribed role name via StandardStructureタイプTo名前
Fig := PDF.AddStructureElement(StandardStructureタイプTo名前(sstFigure), Doc, 0, -1,
'Sales by quarter: Q1 4.2M, Q2 5.1M, Q3 5.8M, Q4 6.4M', '');
構造属性とロールマッピング
SetStructureElementLanguage は BCP-47 /Lang オーバーライドを書き込み、SetStructureElementExpansionText は /E 拡張テキスト(expansion text)を書き込み、SetStructureElementTitle は人間が読める /T タイトルを書き込み、AddStructRoleMap はカスタム構造ロールを標準の PDF ロールにマッピングして戻します。StandardStructureタイプTo名前 は THPDFStandardStructureタイプ 値に対する PDF ロール名を返し、IsStandardStructureタイプ はロール名が標準ロールのいずれかであるかどうかを確認します
高レベルの Tagged ヘルパー
EmitTaggedHeading、BeginTaggedList、EmitTaggedListItem、BeginTaggedTable、AddTaggedTableRow、EmitTaggedTableHeader、EmitTaggedTableCell、BeginTaggedFigure、EndTaggedFigure、および RegisterAnnotForStructure は、呼び出し元に MCID の手動管理を強制することなく、一般的な PDF/UA の見出し、リスト、テーブル、図、および注釈の配線(wiring)をカバーします。
典型的なワークフロー
タグ付き出力を有効にするか PDFUACompliance を有効にし、ルート構造要素を作成し、ヘルパーファミリを使用してセマンティックコンテンツを出力し、開始されたすべてのタグ付きコンテンツまたは図のシーケンスを EndDoc の前に閉じます