タグ付きPDF(アクセシビリティ)
アクセシビリティモジュール(StructureTreeManager、RoleMap、TaggedContentManager)は、スクリーンリーダーや支援技術向けのタグ付きPDF出力を有効にします。有効にすると、すべてのコンテンツがその意味的な役割を記述する構造要素でラップされます。すべてのタグ付けメソッドはチェーン用に static を返します。
クイックリファレンス
| メソッド | 説明 |
|---|---|
setTaggedPdf() | タグ付きPDFモードの有効化/無効化 |
setLanguage() | ドキュメントの主要言語を設定(BCP 47) |
openTag() | タグ付き構造要素を開始 |
closeTag() | タグ付き構造要素を終了 |
image(..., alt:) | アクセシビリティ用の代替テキスト付きで画像を追加 |
タグ付きPDFの有効化
use Yeeefang\TcpdfNext\Core\Document;
$pdf = Document::create()
->setTaggedPdf(true)
->setLanguage('en-US')
->addPage()
->setFont('Helvetica', '', 12);setTaggedPdf(true) が呼び出されると、StructureTreeManager が遅延初期化され、Marked = true を持つ MarkInfo ディクショナリがPDFカタログに書き込まれます。
構造要素
TCPDF-NextはPDF 2.0標準の完全なタグセットをサポートしています:
| カテゴリ | タグ |
|---|---|
| グループ化 | Document、Part、Sect、Div、BlockQuote、Caption、NonStruct |
| 見出し | H1、H2、H3、H4、H5、H6 |
| 段落 | P、Span |
| リスト | L、LI、Lbl、LBody |
| テーブル | Table、TR、TH、TD、THead、TBody、TFoot |
| インライン | Link、Em、Strong、Code |
| イラスト | Figure、Formula、Form |
基本的なタグ付け
use Yeeefang\TcpdfNext\Core\Document;
$pdf = Document::create()
->setTaggedPdf(true)
->setLanguage('en-US')
->addPage()
->setFont('Helvetica', '', 12)
->openTag('H1')
->cell(0, 10, 'Annual Report 2026', newLine: true)
->closeTag('H1')
->openTag('P')
->multiCell(0, 6, 'This document demonstrates tagged PDF output for accessibility compliance.')
->closeTag('P')
->save('tagged-basic.pdf');タグは適切にネストする必要があります。StructureTreeManager はネストを検証し、不一致の場合は例外をスローします。
タグ付きテーブル
$pdf->openTag('Table')
->openTag('TR')
->openTag('TH')->cell(50, 8, 'Quarter')->closeTag('TH')
->openTag('TH')->cell(50, 8, 'Revenue')->closeTag('TH')
->closeTag('TR')
->openTag('TR')
->openTag('TD')->cell(50, 8, 'Q1')->closeTag('TD')
->openTag('TD')->cell(50, 8, '$1,200,000')->closeTag('TD')
->closeTag('TR')
->closeTag('Table');タグ属性
タグを開くときに追加の属性を渡します:
$pdf->openTag('Figure', ['Alt' => 'Company logo', 'ActualText' => 'Acme Corp Logo'])
->image('/path/to/logo.png', 10, 50, 40, 40)
->closeTag('Figure');一般的な属性:
| 属性 | 説明 |
|---|---|
Alt | 非テキスト要素の代替テキスト |
ActualText | 要素の正確なテキスト置換 |
Lang | この要素の言語オーバーライド(BCP 47) |
Title | 人間が読めるタイトル |
image() メソッドはショートハンドとして alt パラメータも受け付けます。$pdf->image('chart.png', 10, 80, 120, 60, alt: 'Revenue chart') は自動的に画像を Figure タグでラップします。
ロールマッピング
RoleMap はカスタムタグ名を標準PDF構造タイプにマッピングします。これにより、PDF/UA互換性を維持しながらドメイン固有の名前を使用できます:
$pdf->openTag('Invoice', ['roleMap' => 'Sect'])
->openTag('LineItem', ['roleMap' => 'P'])
->cell(0, 8, 'Widget x 10 — $500.00', newLine: true)
->closeTag('LineItem')
->closeTag('Invoice');ロールマップは構造ツリールートに書き込まれるため、バリデーターはカスタムタグを標準の同等タグに解決します。多言語コンテンツの場合は、要素ごとに言語をオーバーライドします:->openTag('P', ['Lang' => 'de-DE'])。
PDF/UA準拠
完全にPDF/UA準拠のドキュメントを作成するには、以下を確認してください:
- タグ付きPDFが有効 —
setTaggedPdf(true) - ドキュメント言語が設定済み —
setLanguage('en-US') - すべてのコンテンツがタグ付き — 構造要素の外にタグなしコンテンツがないこと
- すべての画像に代替テキスト —
alt:パラメータまたはAlt属性付きのFigureタグ経由 - テーブルのヘッダーに
THを使用 — ヘッダーセルはデータセルと区別する必要あり - フォントが埋め込み済み — TCPDF-Nextはデフォルトですべてのフォントを埋め込みます
PDF/A-4との統合
タグ付きPDFはPDF/A-4と完全に互換性があります。アーカイブ + アクセシブルなドキュメントには両方を有効にしてください:
$pdf = Document::create()
->setTaggedPdf(true)
->setPdfA(true)
->setLanguage('en-US')
->setTitle('Accessible Archival Document')
->addPage()
->setFont('Helvetica', '', 12)
->openTag('H1')
->cell(0, 10, 'PDF/A-4 + PDF/UA Document', newLine: true)
->closeTag('H1')
->save('accessible-archival.pdf');