PDF/UA-2 適合性: ISO 14289-2 向けに NextPDF が出力するタグ付き構造
境界の明示。 NextPDF は、アクセシブルなオーサリングを支えるタグ付き構造を出力します。PDF/UA-2 適合性を主張するものではなく、判定するのはチェッカーです。
PDF/UA-2 は ISO 14289-2:2024 で定義される、タグ付き PDF 2.0 を基盤としたアクセシビリティプロファイルです。NextPDF Core は、構造ツリー、マーク付きコンテンツ、catalog/structure の言語、および pdfuaid マーカーを、Document::enableTaggedPdf() を通じて出力します。ライブラリが生成するのはアクセシブルな構造です。適合性を判断するのは PDF/UA チェッカー(たとえば verapdf --flavour ua2)です。ISO 14289-2 §8.1 では、適合性は文書が満たすべき一連のファイル形式要件として位置付けられています。これはチェッカーによって評価されるものであり、生成側が宣言するものではありません。
インストール
「インストール」という見出しのセクションcomposer require nextpdf/core:^3PDF/UA-2 のタグ付けは Core の機能です(security.tagged_pdf)。タグ付き構造そのものに Premium パッケージは必要ありません。
概念の概要
「概念の概要」という見出しのセクションDocument::enableTaggedPdf(string $lang = 'en', ?ConformancePolicy $policy = null) は ConformanceMode::PdfUa2 を設定し、TaggedContentEmitter を接続します。このモードは、「この文書が仕様どおりタグ付けされているか」を示す信頼できる唯一の情報源です。以降、ライターは ISO 14289-2 が課す構造上の義務を満たします。
- 実コンテンツがタグ付けされる — §8.2.2: 実(非アーティファクト)コンテンツのすべての要素が論理構造に含まれ、アーティファクトはアーティファクトとしてマークされます。これは ISO 32000-2 §14.7 のタグ付き PDF 構造(
StructTreeRoot、構造要素、MCID)を基盤としています。 - 自然言語が宣言される — §8.4.4: 文書全体および言語の切り替え箇所には
Langが伴います。ConformancePolicy::strictUa2()を使用すると、不正な形式の BCP-47 タグは、書き込み時に黙って破棄されるのではなく、API 境界で拒否されます(フェイルファスト)。 - 図には代替テキストが付く — §8.5.1: すべての
Figure構造要素には代替説明が設定されます。 - 表はヘッダーとデータを関連付ける — §8.2.5.26: 表の header/data セルの関連付けが構造として表現されます。
NextPDF はこれらを出力します。§8.1 の適合性評価は実行しません。それはチェッカーの役割であり、規格はその役割をチェッカーに留保しています。
API サーフェス
「API サーフェス」という見出しのセクション| メソッド | 効果 |
|---|---|
enableTaggedPdf(string $lang = 'en', ?ConformancePolicy $policy = null): static | このメソッドは ConformanceMode::PdfUa2 を設定し、TaggedContentEmitter を接続し、ポリシーに従って $lang を検証します。InvalidConfigException をスローするのは、ポリシーが Lang の検証を必須とし、かつ $lang が無効な場合です。 |
beginTag()/endTag() | HTML 以外のコンテンツに対する手動構造化です。コンテナ型はグループ化要素になり、リーフ型は MCID を取得します。 |
ConformanceMode::requiresPdfUa2PageTabs(): bool | 戻り値は PdfUa2 の場合に true となり、/Tabs /S のページ強制を制御します。 |
コードサンプル — クイックスタート
「コードサンプル — クイックスタート」という見出しのセクション<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Core\Document;use NextPDF\Conformance\ConformancePolicy;
$out = getenv('NEXTPDF_COOKBOOK_OUTPUT') ?: __DIR__ . '/accessible.pdf';
$doc = Document::createStandalone();$doc->enableTaggedPdf('en', ConformancePolicy::strictUa2()); // fail-fast Lang$doc->setTitle('Accessible report 2026');$doc->writeHtml('<h1>Quarterly report</h1><p>Body text.</p>' . '<img src="chart.png" alt="Revenue rose 12% quarter on quarter">');$doc->save($out);
echo "Wrote {$out} — validate: verapdf --flavour ua2 {$out}\n";コードサンプル — 本番環境
「コードサンプル — 本番環境」という見出しのセクション本番環境のゲートは verapdf --flavour ua2 out.pdf を実行し、違反が報告された場合はビルドを失敗させます。統合テスト tests/Integration/Accessibility/VeraPdfUa2GoldenTest.php は、HTML→タグ付き PDF のゴールデンフィクスチャが veraPDF UA-2 に合格することを検証します(veraPDF が存在しない場合はスキップされます)。チェッカーの判定がゲートであり、エミッターの出力はその入力です。
エッジケースと注意点
「エッジケースと注意点」という見出しのセクション- 最初に有効化する。
enableTaggedPdf()をwriteHtml()の後に呼び出しても、すでに書き込まれたコンテンツへ遡及的にタグが付くことはありません。 - 厳格な言語チェック。 veraPDF 検証の段階で初めて失敗させるのではなく、API 境界で不正な形式の BCP-47 タグを拒否するには、
ConformancePolicy::strictUa2()を渡します。 - 冪等な再有効化。 2 回呼び出しても、内容が入った構造ツリーを再構築せずに言語を更新します。
- 空のタグ付き文書。 空のタグ付き文書は PDF/UA-2 を宣言しません(
EmptyTaggedPdfDoesNotAdvertisePdfUa2Test)。実コンテンツを含まない文書にはマーカーが出力されないため、ファイルが過剰な主張を行うことはありません。
パフォーマンス
「パフォーマンス」という見出しのセクション構造ツリーの出力コストは要素数に比例します。一般的なレポートでは、実時間 ≤ 1500 ms、ピーク ≤ 64 MB を予算としています。
セキュリティに関する注意
「セキュリティに関する注意」という見出しのセクションアクセシビリティのタグ付けは構造情報であり、セキュリティ制御ではありません。設計上、文書の論理構造を支援技術に対して公開するものであり、タグツリーには機密性を担保する役割はありません。
PDF/UA-2 マッピング
「PDF/UA-2 マッピング」という見出しのセクション| PDF/UA-2 の義務 | ISO 14289-2 の箇条 | NextPDF の出力 |
|---|---|---|
| 論理構造でタグ付けされた実コンテンツ | §8.2.2 | TaggedContentEmitter + StructureTree |
| 宣言された文書/構造の言語 | §8.4.4 | catalog の /Lang。検証には Bcp47Validator を使用 |
| Figure の代替説明 | §8.5.1 | alt → /Alt を Figure 要素に付与 |
| 表の header/data の関連付け | §8.2.5.26 | HTML テーブルから生成される TR/TH/TD 構造 |
タグ → ISO 32000-2 §14.9 相互参照
「タグ → ISO 32000-2 §14.9 相互参照」という見出しのセクションPDF/UA-2 は ISO 32000-2 のタグ付き PDF モデルを基盤としています。NextPDF が出力する構造要素は、ISO 32000-2 §14.7 の論理構造(StructTreeRoot、構造要素、MCID)— chunk — および PDF 2.0 向けに定義された標準構造名前空間に対して解決されます。ロールマップは、HTML 要素(h1、p、table)を標準構造型に結び付け、UA-2 チェッカーがそれらを認識できるようにします。
WCAG 2.2 マッピング
「WCAG 2.2 マッピング」という見出しのセクションタグ付き構造は、WCAG 2.2 の達成基準を支える技術的基盤です。対象は 1.1.1(非テキストの代替、§8.5.1 の Figure /Alt 経由)、1.3.1(情報と関係、構造ツリー経由)、および 1.3.2(意味のある順序、読み上げ順序経由)です。構造を出力することは WCAG 適合性に必要ですが、それだけでは十分ではありません。その判定を行うのはライブラリではなくアクセシビリティ監査です。
FIPS モードの動作
「FIPS モードの動作」という見出しのセクションPDF/UA-2 の出力では暗号処理は行われません。FIPS モードはタグ付き構造の処理経路に影響を与えません。
| 主張 | 仕様 | 箇条 | リファレンス ID |
|---|---|---|---|
PDF/UA のバージョンは pdfuaid スキーマ名前空間で識別されます(Table 1)。 | ISO 14289-2 | §5 | |
| PDF/UA-2 への適合は、文書が満たすべきファイル形式要件を課します(適合性を評価するのはチェッカーであり、生成側が宣言するものではありません)。 | ISO 14289-2 | §8.1 | |
| 実コンテンツは論理構造内でタグ付けされなければなりません。 | ISO 14289-2 | §8.2.2 | |
| 文書の自然言語は宣言されなければなりません。 | ISO 14289-2 | §8.4.4 | |
| Figure 要素には代替説明が必要です。 | ISO 14289-2 | §8.5.1 | |
| 表構造はヘッダーセルとデータセルを関連付けなければなりません。 | ISO 14289-2 | §8.2.5.26 | |
| アクセシブルな構造は ISO 32000-2 のタグ付き PDF 論理構造の上に構築されています。 | ISO 32000-2 | §14.7.2 |
引用は、検証コーパスへの clause-id と reference_id のポインターです。規格本文は転載していません。