準拠:ConformanceMode のルーティングと検証境界
NextPDF\Conformance は、ドキュメントがどの ISO コントラクトを対象とするかをライターに伝える唯一の識別子を保持します。 ライブラリは、コントラクトが定義する構造を出力します。 生成されたファイルが準拠していることを証明することはなく、また証明できません。 準拠を証明できるのは外部バリデーターのみです。
インストール
「インストール」という見出しのセクションcomposer require nextpdf/core:^3概念の概要
「概念の概要」という見出しのセクションConformance モジュールには 2 つの公開型があります。 ConformanceMode は、対象コントラクトを表す値付き enum です(Plain、PdfUa1、PdfUa2、PdfA2、PdfA3、PdfA3b、PdfA3u、PdfA4、PdfA4e、PdfA4f)。 ConformancePolicy は、モードと直交する厳格性トグルを組み合わせたイミュータブルな値オブジェクトです。
モードは、下流のライターゲートにとって唯一の信頼できる情報源です。 この enum が存在する前は、エンジンは「このドキュメントは仕様タグ付きか?」を分散したフラグから推測していました。 ConformanceMode::isTagged()、isAccessibility()、isArchival()、pdfaPart()、pdfaConformanceLetter()、および requiresPdf17() はそれぞれ、ライターが直接読み取れる型付きの答えを返します。 カタログ、/MarkInfo、ファイルヘッダーの系統、および XMP の pdfaid マーカーは、宣言された意図と一貫した状態を保ちます。
サポート範囲の境界は正確に理解してください。 NextPDF Core は、これらの標準で定義された構造を 出力 します。 ISO 19005-4:2020 §6.7.3 は、ファイルが主張する PDF/A バリアントを記録する識別スキーマを規定しています。 ISO 19005-4:2020 は、準拠の実際の判定はその箇条 5 に規定されたとおり、つまり規範的要件に照らして、生成側のライブラリではなくチェックツールによって実行されると述べています。 ISO 14289-2:2024 §6 は、適合性を ファイル が満たす性質として位置づけています。 NextPDF がモードを設定することは、準拠ファイルにとって必要な入力です。 それ自体は準拠の結果ではありません。
これは、CSS サポートマトリクスで適用している「検証済み」と「主張済み」を区別する原則と同じです。 ある機能が 検証済み となるのは、合格するテストまたはオラクル実行と、引用された箇条の両方が存在する場合のみです。 それ以外はすべて、ライブラリが 出力 する実装です。有用ではありますが、準拠の保証ではありません。 準拠は、最終的なファイルとバリデーターの組み合わせが持つ性質であり、ライブラリの約束ではありません。 出力は veraPDF で検証してください(以下の「準拠」を参照)。
アーカイブ作業では、もう 1 つの境界が重要になります。 PDF/A-4 の オーサリング(OutputIntent ディクショナリ、埋め込み ICC プロファイル、XMP 拡張スキーマ)は、Core ではなく nextpdf/pro 拡張に同梱されています。 Core のみのインストールでは、Document::enablePdfA() は InvalidConfigException を送出します。これは、security.pdfa 機能が登録されていないためです。 Core は引き続き ConformanceMode 識別子を保持しているため(イントロスペクションと PDF/UA-2 タグ付きパスは機能します)、それ自体では PDF/A-4 ファイルをオーサリングしません。
API サーフェス
「API サーフェス」という見出しのセクション| 型 | 種別 | 主なメンバー |
|---|---|---|
NextPDF\Conformance\ConformanceMode | enum: string | Plain, PdfUa1, PdfUa2, PdfA2, PdfA3, PdfA3b, PdfA3u, PdfA4, PdfA4e, PdfA4f; isTagged(), isAccessibility(), isArchival(), requiresPdfUa2PageTabs(), pdfaPart(): ?int, pdfaConformanceLetter(): string, requiresPdf17(): bool |
NextPDF\Conformance\ConformancePolicy | final readonly class | __construct(ConformanceMode $mode = PdfUa2, bool $strictUa2 = false, bool $rejectUnvalidatedLang = false, …); lax(), strictUa2(), withUax9IsolateSupport(), withoutAstShadowMode(), withBlackPointCompensation(), withStrictOcspProducedAtTolerance(), withAllowStaleOcsp() |
ConformancePolicy はコンストラクターで不変条件を強制します。つまり、厳格な PDF/UA-2 トグルはモードが PdfUa2 のときにのみ適用され、strictUa2 = true は rejectUnvalidatedLang = true を強制します。 整合しない組み合わせでは、黙って劣化するのではなく InvalidConfigException を送出します。
コードサンプル — クイックスタート
「コードサンプル — クイックスタート」という見出しのセクション<?php
declare(strict_types=1);
use NextPDF\Conformance\ConformanceMode;
$mode = ConformanceMode::PdfA4f;
// Introspect the declared contract — these drive writer-side gates.$mode->pdfaPart(); // 4$mode->pdfaConformanceLetter(); // 'F'$mode->requiresPdf17(); // false (PDF/A-4 is PDF 2.0 lineage)$mode->isArchival(); // trueコードサンプル — 本番
「コードサンプル — 本番」という見出しのセクション準拠コントラクトをエンドツーエンドで実行する Core 同梱のパスは、PDF/UA-2 タグ付きルートです。 これは実行可能なサンプル(examples/31-pdfua2-tagged.php)であり、厳格な PDF/UA-2 プロファイルのオラクルターゲットでもあります。
<?php
declare(strict_types=1);
use NextPDF\Core\Document;
$doc = Document::createStandalone();
// Set the tagged-PDF contract BEFORE writing content so the HTML pipeline// wires the TaggedContentEmitter at parser-construction time.$doc->enableTaggedPdf(lang: 'en');
$doc->setTitle('Accessible report');// … write content …
$doc->save(__DIR__ . '/out/report-ua2.pdf');
// The library has now emitted PDF/UA-2 structures. It has NOT asserted// conformance. Verify the file with the pinned veraPDF oracle://// php oracle/run.php pdfua.strict//// (Requires the veraPDF Docker image — opt-in; see "Conformance" below.)エッジケースと注意点
「エッジケースと注意点」という見出しのセクション- PDF/A-4 オーサリングは Premium の機能です。 Core のみのインストールでは、
Document::enablePdfA()はInvalidConfigExceptionを送出します(security.pdfaが利用できないため)。 Core が保持するのは識別子であり、OutputIntent/ICC/XMP の出力ではありません。/specifications/pdfa4/を参照してください。 - アンブレラケースとバリアントケース。
PdfA4はアンブレラケースであり、空のpdfaConformanceLetter()を返します。 ISO 19005-4:2020 §6.7.3 は、PDF/A-4e にも PDF/A-4f にも準拠しないファイルはpdfa:conformanceを提供しないと定めています。PdfA4e/PdfA4fは、Annex B / Annex A バリアントの場合にのみ使用してください。 - 厳格な PDF/UA-2 はオプトインです。
ConformancePolicy::lax()が BC セーフなデフォルトです。strictUa2()は/MarkInfo /Marked trueと BCP-47 で検証されない言語タグの拒否を強制します。PdfUa2以外のモードで有効化すると、例外を送出します。 isTagged()はバリアントを認識します。Plain、PdfA2、PdfA3b、およびPdfA4eは、タグなしとして報告されます。 ライターは、アーカイブモードが構造ツリーを含意すると想定してはなりません。- 合格するモードは、合格するファイルを意味しません。
PdfA4を設定しても、出力が有効な PDF/A-4 ファイルになるわけではありません。 バリデーターで検証してください。
パフォーマンス
「パフォーマンス」という見出しのセクションConformanceMode と ConformancePolicy は純粋な値型です。enum ケースの resolve(解決)と match ディスパッチは O(1) であり、イミュータブルなポリシーオブジェクト以外の割り当ては発生しません。 書き込みパスに測定可能なコストを追加しません。 モジュールバジェット(wall_ms: 1500)を支配するのは、識別子ではなくライターです。 veraPDF オラクルは帯域外の CI ステップであり、ドキュメント生成の一部ではありません。
セキュリティに関する注意
「セキュリティに関する注意」という見出しのセクション厳格トグルは、ConformancePolicy 上でフェイルクローズのセキュリティ動作を制御します。securityPkiRfc5280Strict(RFC 5280 §6 のパス検証)、strictOcspProducedAtTolerance(RFC 6960 §4.2.2.1 のスキューウィンドウ)、および allowStaleOcsp(デフォルトは false — OCSP レスポンスのうち nextUpdate を欠くものを拒否)です。 これらのデフォルトは保守的であり、文書化された後方互換性戦略に従って、将来のメジャーバージョンで厳格な設定へ切り替わります。 署名パスの詳細については、セキュリティモジュールとプロジェクトの脅威モデルを参照してください。
NextPDF は準拠を証明しません。 以下の標準で定義された構造を出力し、ファイル が準拠しているかどうかは別のバリデーターが判定します。
| 標準 | 箇条 | NextPDF Core の動作 | ステータス |
|---|---|---|---|
| ISO 14289-2:2024(PDF/UA-2) | §6 | Core タグ付きパスを通じた、構造ツリー、/MarkInfo /Marked true(厳格時)、/Lang、pdfuaid XMP の出力 | 検証済みプロファイル: veraPDF バイナリが存在する場合に veraPDF オラクルで検証される pdfua.strict(php oracle/run.php pdfua.strict)(オプトインゲート) |
| ISO 19005-4:2020(PDF/A-4 アーカイブ) | §6.7.3 | ConformanceMode による、識別子 pdfaid:part / pdfa:conformance の出力 | 主張済み(識別子の出力、ユニットテスト済み)。PDF/A-4 ファイル のオーサリングは Premium 限定 |
| ISO 32000-2:2020(PDF 2.0) | §7.5.2 | 基本の catalog/document 構造 | 主張済み(基本エンジンの動作) |
サポートは準拠ではありません。 NextPDF Core は、PDF/UA-2 および PDF/A-4 の識別構造を 出力 します(実装であり、tests/Unit/Conformance/ のテストによって裏付けられています)。 ファイル が PDF/A-4 または PDF/UA-2 に準拠していることは、対応するプロファイルを実行するバリデーターによってのみ表明できます。 ISO 19005-4:2020 箇条 5 によれば、準拠の判定はバリデーターの役割であり、生成側のライブラリの役割ではありません。
veraPDF のゲーティングは、その要件を明確に示します。 オラクル(oracle/run.php、oracle/lib/OracleRunner.php)は、固定された veraPDF Docker イメージにシェルアウトします。 Docker またはイメージが存在しない場合、ランナーはコード 2(インフラストラクチャーの障害)で終了し、何も検証しません。 したがって pdfua.strict プロファイルはオプトインの準拠ゲートです。準拠を証明できるのは、veraPDF バイナリが存在するマシン上のみです。 NextPDF は埋め込みバリデーターを同梱しておらず、その不在時には準拠の主張を行いません。
引用は NextPDF コンプライアンスコーパスから言い換えたものです。 完全な 64 文字の reference_id ダイジェストは、ページのフロントマターと _normative-evidence-conf.md に記録されています。
- Compliance モジュール — PDF/R-1 バリデーター、Arlington 文法、ライフサイクルツール
- Accessibility モジュール — PDF/UA-2 タグ付きコンテンツエミッター
- PDF/A-4 仕様マッピング — ISO 19005-4 の機能カバレッジと明示的な非カバレッジ
- PDF/UA-2 仕様マッピング — ISO 14289-2 のアクセシビリティマッピング
- Security モジュール — 署名パスの厳格トグル