コンプライアンス: PDF/R-1 バリデーター、Arlington 文法、ライフサイクルツール
NextPDF\Compliance は、完成した PDF を読み取り、規範上の契約からの逸脱を報告するバイトストリームバリデーターと文法クロスチェックを提供します。バリデーターが検出結果ゼロを返すのは、実装済みの箇条について チェック済み であることを示す結果であり、包括的な認証ではありません。
インストール
「インストール」という見出しのセクションcomposer require nextpdf/core:^3概念の概要
「概念の概要」という見出しのセクションこのモジュールは、3 つの部分で構成されています。
PdfRValidator は、候補となる ISO 23504-1:2020 (PDF/R-1) バイトストリームを検証します。これは、ライターの内部状態ではなく、生のバイトに対して動作します。ライターが出力しようとする内容と、仕様が要求する内容とのずれを検出します。これは最終チェックです。実装されている箇条のセットは v5.1.0 クラスターです。§5 バージョン識別コメント、§6.2.2/§6.2.3 ヘッダー許可リスト、§6.2.4 世代番号 0 およびオブジェクトストリームの禁止、§6.5.7 コンテンツストリーム演算子許可リスト (q、Q、cm、Do のみ)、§6.6.1 画像 XObject キー許可リスト、§6.4.3 Info ディクショナリキー許可リスト、および §6.3 Catalog キー許可リストです。§6.7 のインクリメンタル更新と §6.8 の暗号化は、初期クラスターでは明示的に対象外であり、claims.json でもそのように宣言されています。バリデーターは最初の検出結果で例外を発生させません。すべての逸脱を 1 回のパスで収集するため、呼び出し元は完全な差分を確認できます。
PdfRConformancePolicy は、PDF/R-1 周辺の 推奨されるが情報提供にとどまる 範囲に対するイミュータブルなポリシーです。規範的な §6 の下限が、構成可能になることはありません。このポリシーが制御するのは、§A.5 の実装上限に関する推奨事項、§6.6.1 のマルチストリップ非推奨、および下流の PDF/A 再分類に向けた §A.6 の XMP 要件のみです。
ArlingtonValidator は、上流の PDF Association Arlington PDF モデルをレポート専用モードで駆動します。現在のサイクルでは常に助言的です。validateReportOnly() は例外をスローしません。3 つのモードにわたって段階的に縮退します。リファレンスチェッカーのバイナリがある場合は、構造化された検出結果を解析します。ピン留めされた文法のみがある場合は、文法ピンが読み込まれたことを証明する info 検出結果を 1 件出力します。文法がない場合は、空のリストを返します。WaiverRegistry を使用すると、オーケストレーターは監査証跡を保持しながら、許容可能と判明している不一致を抑制できます。
この誠実性ルールは、CSS サポートマトリックスや適合性モジュールと共通です。箇条が Verified となるのは、合格するテストが存在し、規範的な箇条が引用されている場合のみです。実装されているものの、専用の合格フィクスチャがない箇条は Claimed となります。対象外の箇条は、曖昧なまま放置されるのではなく、明示的に記載されます。検出結果ゼロの PdfRValidator の結果がアサートするのは、実際にチェックする箇条のみです。実装していない §6.7 や §6.8 については、いかなる主張も行いません。
API サーフェス
「API サーフェス」という見出しのセクション| 型 | 種別 | 主なメンバー |
|---|---|---|
NextPDF\Compliance\Validator\PdfRValidator | final class | validate(string $pdfBytes): list<PdfRValidationFinding> |
NextPDF\Compliance\Validator\PdfRValidationFinding | final readonly class | string $clause, 'error'|'warning'|'info' $severity, string $message |
NextPDF\Compliance\Profile\PdfRConformancePolicy | final readonly class | __construct(bool $enforceA5ImplementationLimits = true, bool $rejectMultiStripPages = false, bool $requireXmpForA6Compatibility = false); lax(), strictArchival() |
NextPDF\Compliance\Validator\ArlingtonValidator | final class | validateReportOnly(string $pdfPath): list<ArlingtonFinding> |
NextPDF\Compliance\Validator\WaiverRegistry | final class | isWaived(string $validator, string $ruleId, string $scopeKey): bool |
コードサンプル — クイックスタート
「コードサンプル — クイックスタート」という見出しのセクション<?php
declare(strict_types=1);
use NextPDF\Compliance\Validator\PdfRValidator;
$validator = new PdfRValidator();$findings = $validator->validate(file_get_contents('candidate.pdf'));
if ($findings === []) { // Zero divergences from the §6 clauses PdfRValidator implements. // This is NOT a PDF/R-1 certificate — §6.7 and §6.8 are not checked. echo "No PDF/R-1 §6 divergences detected (implemented clause set).\n";} else { foreach ($findings as $f) { echo "[{$f->severity}] §{$f->clause}: {$f->message}\n"; }}コードサンプル — 本番環境
「コードサンプル — 本番環境」という見出しのセクション<?php
declare(strict_types=1);
use NextPDF\Compliance\Validator\ArlingtonValidator;use NextPDF\Compliance\Validator\ArlingtonGrammarLoader;use NextPDF\Compliance\Validator\WaiverRegistry;
$validator = new ArlingtonValidator( waivers: new WaiverRegistry(/* loaded waiver entries */), grammar: new ArlingtonGrammarLoader(/* pinned submodule path */), adapter: null, // grammar-only mode when the reference checker is absent);
// Advisory by contract — never throws on findings.$findings = $validator->validateReportOnly('artifact.pdf');
foreach ($findings as $finding) { // Each finding pins the Arlington grammar commit SHA for provenance. logger()->info('arlington', [ 'rule' => $finding->ruleId, 'severity' => $finding->severity, 'grammarSha' => $finding->grammarSha, ]);}エッジケースと注意点
「エッジケースと注意点」という見出しのセクションPdfRValidatorは正規表現ベースであり、完全なパーサーではありません。 対象はNextPDF\Writer\PdfRWriterの決定論的な出力です。そのライターのドリフト検出器として機能します。汎用的な PDF パーサーではありません。- 検出結果ゼロ ≠ 完全な PDF/R-1 適合性。 §6.7 (インクリメンタル更新) と §6.8 (暗号化) は v5.1.0 クラスターでは実装されておらず、
claims.jsonで対象外と宣言されています。クリーンな結果は、あくまで「実装された箇条のセットに逸脱がない」ことを示すものとして扱い、それ以上の意味は持たせないでください。 - Arlington は助言的です。
validateReportOnly()は、現在のサイクルではビルドを失敗させることはありません。CI はこのアーティファクトを消費しますが、ゲートには使用しません。 - PDF/A ICC 検証はここにはありません。 ISO 19005-4:2020 §6.2.2 OutputIntent ICC 検証は、Core の Compliance モジュールではなく、Enterprise の
PdfAManager(nextpdf/pro) に存在します。Core の PDF/A サーフェスはConformanceModeディスクリミネーターのみです。 - 免除は監査証跡を保持します。 免除されたルールは検出結果リストから抑制されますが、免除エントリは 理由 の記録として残ります。
パフォーマンス
「パフォーマンス」という見出しのセクションPdfRValidator::validate() は、バイトストリームを境界付きの正規表現で走査する単一の線形パスです。コストはドキュメントサイズに比例して増加しますが、モジュールの予算内に十分収まります。文法のみモードの ArlingtonValidator では、読み込み証明の検出結果は O(grammar-rule-count) です。リファレンスチェッカーの実行パスはサブプロセスであり、NextPDF ではなく上流のツールによって境界付けられます。これは帯域外の CI ステップです。
セキュリティに関する注意事項
「セキュリティに関する注意事項」という見出しのセクションこれらのバリデーターは、信頼できない PDF バイトを読み取ります。PdfRValidator はキー抽出の前に括弧で囲まれたリテラルと 16 進リテラルを除去するため、細工された Creator 文字列が偽の /Name キーを注入することはできません (ISO 32000-1:2008 §7.3.4.2 エスケープ処理)。Arlington アダプターは、上流のチェッカーを境界付きのサブプロセスとして実行します。タイムアウトや実行エラーが発生した場合は、部分的な出力を信頼するのではなく、「検出結果なし」として扱います。PDF 解析の攻撃対象領域については、プロジェクトの脅威モデルを参照してください。
| 規格 | 箇条 | Compliance モジュールの動作内容 | ステータス |
|---|---|---|---|
| ISO 23504-1:2020 (PDF/R-1) | §6.5.7 | PdfRValidator が {q,Q,cm,Do} コンテンツストリーム演算子許可リストを強制 | Verified (ユニット + 標準プロファイル + 統合テストが合格) |
| ISO 23504-1:2020 (PDF/R-1) | §6.4.3 | PdfRValidator が Info ディクショナリキー許可リストを強制 | Verified (テストで裏付け済み) |
| ISO 23504-1:2020 (PDF/R-1) | §6.7、§6.8 | v5.1.0 クラスターでは未実装 | 明示的な対象外 (claims.json で宣言) |
| ISO 32000-2:2020 (PDF 2.0) | §7.5.2 | Catalog キー許可リストの走査 | Claimed (正規表現による走査、構造的) |
| ISO 19005-4:2020 (PDF/A-4) | §6.7.3 | Conformance モジュールを介した識別スキーマの認識 | 相互参照 (/specifications/pdfa4/ を参照) |
サポートは適合性ではありません。 検出結果を返さない PdfRValidator の実行が証明するのは、入力が バリデーターが実装している §6 の箇条から逸脱しなかったことです。そのファイルが適合する PDF/R-1 ファイルであることまではアサートしません。§6.7 と §6.8 はチェックされません。Arlington のクロスチェックは助言的であり、適合性をアサートすることはありません。PDF/A-4 については、権威あるバリデーターは veraPDF であり、帯域外で実行されます。veraPDF オラクルとそのオプトインゲートについては、適合性モジュールを参照してください。
引用は、NextPDF コンプライアンスコーパスの内容を言い換えたものです。完全な 64 文字の reference_id ダイジェストは、ページのフロントマターと _normative-evidence-conf.md に記録されています。
- Conformance モジュール —
ConformanceModeのルーティングと veraPDF オラクル - Audit モジュール — 監査証跡と認証サーフェス
- PDF/A-4 仕様マッピング — ISO 19005-4 の対象範囲と対象外範囲
- Security モジュール — PDF 解析の脅威モデル