トラブルシューティング: PDF/A および PDF/UA の検証失敗
これらの項目では、ドキュメントを PDF/A または PDF/UA のプロファイル内に保とうとしたときに、エンジンが発生させる失敗を取り上げます。以下の条項番号は、エンジンが自らのソースおよび例外メッセージで引用しているものです。このページでは、それらを言い換えて説明します。エンジンは検出したプロファイル失敗を報告しますが、ドキュメントが適合していることを認証するわけではありません。適合性に関する最終判定は、独自のルールセットで動作する外部バリデーターによって下されます。
項目: PDF/A では暗号化が拒否される
「項目: PDF/A では暗号化が拒否される」という見出しのセクション- 症状。
NextPDF\Security\Exception\IncompatiblePdfAModeExceptionが発生し、PDF/A モードでは暗号化操作が禁止されているというメッセージが表示されます。 - 考えられる原因。 パイプラインで PDF/A モードを有効にしている一方で、暗号化も要求しています。エンジンは ISO 19005-{1,2,3,4} §6.1.3 を引用しています。つまり、PDF/A ファイルのトレーラーに
Encryptキーが存在してはなりません。エンジンはこれを、呼び出し順序にかかわらず絶対的な拒否として扱います。 - 根拠 / 診断。
getContext()はpdfa_modeとencryption_operationを返します。失敗パスのテストtests/SecurityScenarios/PdfAEncryptionRefusalTest.phpは、PDF/A を暗号化呼び出しの前に有効にした場合でも、後に有効にした場合でも、拒否が発生することをアサートしています。 - resolve(解決)の方法。
- ドキュメントに必要な特性、すなわちアーカイブ適合性と暗号化のどちらが必要かを決定します。
- アーカイブ用ドキュメントの場合は、暗号化呼び出しを削除します。
- 暗号化されたドキュメントの場合は、PDF/A の有効化呼び出しを削除します。
- パイプラインを再実行します。
- 関連項目。 暗号化と権限。
項目: PDF/A-1 では画像フィルターが禁止される
「項目: PDF/A-1 では画像フィルターが禁止される」という見出しのセクション- 症状。 画像の取り込み中に
Pdf14FeatureRejectedExceptionが発生し、/JPXDecodeまたは/JBIG2Decode、および条項ISO 19005-1:2005 §6.1.13を示すメッセージが表示されます。 - 考えられる原因。 PDF/A-1 のビルドで、PDF 1.4 以降に導入されたフィルターを使用する画像を取り込んでいます。PDF/A-1 は PDF 1.4 の機能セットを対象としているため、
PdfA1FeatureGuardは JPEG 2000 (/JPXDecode) と JBIG2 (/JBIG2Decode) を拒否します。 - 根拠 / 診断。
src/Writer/PdfA1FeatureGuard.phpが禁止フィルターの一覧を保持しており、引用された条項とともに例外を発生させます。このガードが拒否するのは PDF/A-1 プロファイルの場合のみです。PDF/A-2、PDF/A-3、および PDF 2.0 プロファイルでは、これらのフィルターが許可されます。 - 解決方法。
- ソース画像を JPEG 2000 や JBIG2 を使わずに再エンコードします。たとえば、ベースライン JPEG または Flate 圧縮の画像として保存し直します。
- あるいは、これらのフィルターを許可する PDF/A-2 または PDF/A-3 を対象にします。
- ビルドを再実行します。
- 関連項目。 適合性リファレンス。
項目: PDF/A でフォントが埋め込まれていない
「項目: PDF/A でフォントが埋め込まれていない」という見出しのセクション- 症状。 PDF/A のビルドがフォント検証ステップで失敗します。外部バリデーターが、埋め込まれていないフォントを報告します。
- 考えられる原因。 プログラムが、埋め込まれていないフォントでグリフを描画しています。PDF/A マネージャーの契約では、すべてのフォントを埋め込む必要があると規定されています。standard-14 フォントであっても、埋め込みなしでは許可されません。
- 根拠 / 診断。
src/Contracts/PdfAManagerInterface.phpはvalidateFont(string $fontName, bool $isEmbedded, array $cmapForward)を宣言しており、「すべてのフォントを埋め込む必要があり、埋め込みなしの standard 14 フォントは許可されない」というルールが文書化されています。具体的な強制はnextpdf/proに含まれています。 - 解決方法。
- 埋め込まれていないと報告されたフォントを特定します。
- 組み込みの standard-14 書体に頼るのではなく、埋め込み可能なプログラムファイルでそのフォントを設定します。
- 詳しくは、Base 14 置換との相互作用について、フォントとタグ付けの項目を参照してください。
- ビルドを再実行し、再検証します。
- 関連項目。 フォントとタグ付け。
項目: JavaScript が存在し PDF/A の検証が失敗する
「項目: JavaScript が存在し PDF/A の検証が失敗する」という見出しのセクション- 症状。 PDF/A のビルドが JavaScript 検証ステップで失敗するか、外部バリデーターが JavaScript アクションを報告します。
- 考えられる原因。 ドキュメント、またはフォームフィールドが JavaScript アクションを保持しています。PDF/A マネージャーの契約は、JavaScript アクションを禁止する ISO 19005-4:2020 §6.7.1 を引用しています。
- 根拠 / 診断。
PdfAManagerInterface::validateNoJavaScript()とvalidateNoJavaScriptActions()は、いずれもドックブロックで §6.7.1 を引用しています。 - 解決方法。
- ドキュメントまたはフォームフィールドから JavaScript アクションを削除します。
- 動作のためにそのアクションが必要な場合、そのドキュメントを PDF/A にすることはできません。その用途には PDF/A 以外のバリアントを生成します。
- ビルドを再実行し、再検証します。
- 関連項目。 適合性リファレンス。
項目: タグ付き出力が PDF/UA-2 を宣言しない
「項目: タグ付き出力が PDF/UA-2 を宣言しない」という見出しのセクション- 症状。 タグ付けを有効にしてビルドしたドキュメントが PDF/UA-2 として認識されないか、PDF/UA-2 の宣言が存在しません。
- 考えられる原因。 構造ツリーが空です。空の構造ツリーはプロファイルを満たさないため、エンジンはタグ付き構造を持たないドキュメントに対して PDF/UA-2 を宣言しません。
- 根拠 / 診断。 失敗パスのテスト
tests/Integration/Accessibility/EmptyTaggedPdfDoesNotAdvertisePdfUa2Test.phpは、空のタグ付きドキュメントが PDF/UA-2 を宣言しないことをアサートしています。これは欠陥ではなく、エンジンの文書化された動作です。 - 解決方法。
- 構造ツリーが空ではなく値で満たされるよう、コンテンツがタグ付けパスを通じて出力されていることを確認します。
- マークコンテンツシーケンスが構造要素にマッピングされていることを確認します。
- ビルドを再実行し、PDF/UA-2 のステータスを再確認します。
- 関連項目。 フォントとタグ付け。
項目: 言語の欠落または不正により PDF/UA-2 が失敗する
「項目: 言語の欠落または不正により PDF/UA-2 が失敗する」という見出しのセクション- 症状。 言語エントリーが存在しないか、有効なタグでないために、PDF/UA-2 のチェックが失敗します。
- 考えられる原因。 ドキュメントまたは構造要素に有効な言語が欠けています。PDF/UA-2 は自然言語の宣言を必要とします。
Langの値が欠落しているか不正な形式の場合、厳格なチェックで失敗します。 - 根拠 / 診断。 失敗パスのテスト
tests/Unit/Conformance/PdfUa2Section844LangStrictTest.phpは、厳格な言語要件を検証します。言語タグはsrc/Accessibility/Bcp47Validator.phpを通じて検証されます。不正なタグはsrc/Accessibility/InvalidBcp47TagException.phpを発生させます。 - 解決方法。
- 有効な BCP-47 タグとして、ドキュメントレベルの言語を設定します。たとえば
en-USやzh-Hant-TWです。 - ある箇所が別の言語である場合は、その構造要素に言語を設定します。
- ビルドを再実行し、再検証します。
- 有効な BCP-47 タグとして、ドキュメントレベルの言語を設定します。たとえば
- 関連項目。 フォントとタグ付け。
エッジケースと注意点
「エッジケースと注意点」という見出しのセクション- ここで説明している PDF/A および PDF/UA の拒否は、エンジン内部で生成されます。これらは外部バリデーターの判定とは独立しており、その代替にはなりません。最終的な結果を得るには、veraPDF などのバリデーターを実行してください。
- PDF/A に必須となるオブジェクトの具体的なライター (XMP メタデータストリーム、ICC プロファイル付きの出力インテント) は、実行時に
nextpdf/proから解決されます。コアパッケージのみがインストールされている場合、これらのオブジェクトは出力されません。コアのみのビルドは、完全な PDF/A 生成プログラムではありません。 - 暗号化の拒否は絶対的であり、順序に依存しません。暗号化呼び出しの後に PDF/A を有効にした場合でも、拒否は発生します。