CheckFileComplianceA
準拠性、ドキュメント検査
説明
末尾の A は ANSI(char)DLL エントリポイントを示し、ActiveX/COM の表面では Unicode 形式のみ公開される。動作は CheckFileCompliance と同一で、文字列引数は現在の SetAnsiMode コードページを使って解釈される
外部 PDF ファイルを読み込み、選択した ISO 準拠規格に照らして検証する。返される値はゼロ(ファイルが選択したテストに問題なく合格)または検出されたすべての問題を一覧表示するゼロ以外の StringListID ハンドルである。リストの各エントリは短いコード、コロン、人間が読めるメッセージで構成され、GetPDFUADiagnostics が使用するものとまったく同じコード形式である。GetStringListCount と GetStringListItem で結果を列挙する
PDF/A テストは 6 つの準拠モード(PDF/A-1a、PDF/A-1b、PDF/A-2a、PDF/A-2b、PDF/A-3a、PDF/A-3b)をすべて対象とし、pdfaid:part/pdfaid:conformance XMP エントリを読み取って適用する規則セットを決定します
PDF/UA-1 テスト(v3.56.0 で追加)は外部 PDF を ISO 14289-1 に対してチェックし、10xxx 範囲の診断コードを出力します。これにより PDF/A の 00xxx コードと視覚的に区別できます
構文
Delphi
Function DLCheckFileComplianceA(InstanceID: Integer; InputFileName, Password: PAnsiChar; ComplianceTest, Options: Integer): Integer;
DLL
int DLCheckFileComplianceA(int InstanceID, const char * InputFileName, const char * Password, int ComplianceTest, int Options);
パラメータ
| InputFileName | 検証する PDF ファイルの完全パスです。ファイルは読み取り専用で開かれ、変更されません |
|---|---|
| Password | ファイルを開くためのパスワードです。暗号化されていない文書には空文字列を渡します。正しいパスワードが指定されているかどうかにかかわらず、暗号化文書は PDF/A テスト (コード 00006) に失敗することに注意してください。PDF/A では暗号化が禁止されています |
| ComplianceTest | 確認する規格 1 — PDF/A(ISO 19005-1/-2/-3、6 つの準拠レベルすべて) 2 — PDF/UA-1(ISO 14289-1:2014、アクセシブル PDF) |
| Options | テストを変更するビットフラグです 0 — 既定値: ドキュメントで検出されたすべての問題を報告します 1 — 最初の問題の後で停止し、直ちに返します。呼び出し元が合格または不合格のシグナルのみを必要とする場合に便利です |
戻り値
| 0 | ファイルは選択した標準に準拠しています |
|---|---|
| Non-zero | 検出された各非準拠をエントリで記述する StringListID ハンドル。このハンドルは文書を閉じるか、ReleaseStringList を呼び出すまで有効です |
PDF/A 問題コード(ComplianceTest = 1)
| 00002 | PDF バージョンが準拠レベルで許可される最大値を超えています (PDF/A-1 は 1.4、PDF/A-2 と PDF/A-3 は 1.7 が上限です)。詳細行には違反したバージョンと許可される最大値が示されます |
|---|---|
| 00003 | Catalog に、PDF/A-1 で禁止されている /OCProperties(オプションコンテンツ / レイヤー)が含まれています。PDF/A-2 および PDF/A-3 はレイヤーを許可するため、この検査は発生しません |
| 00005 | XMP の pdfaid:part+pdfaid:conformance の組み合わせが欠落、不正、または有効な集合 1A、1B、2A、2B、3A、3B 以外の値を含んでいます。ライブラリは適用するルールセットを判定できないため、Options にかかわらず致命的問題として報告します |
| 00006 | 文書は暗号化されています。PDF/A ではすべてのパートで暗号化が禁止されています |
| 00007 | Catalog に /OutputIntents エントリがありません。レンダリングカラースペースを明確に定義するため、すべての PDF/A パートで出力インテントが必要です |
| 00011 | Catalog に /MarkInfo エントリがありません。a レベル準拠(PDF/A-1a、2a、3a)でのみ必要です — タグ付き PDF はその旨を宣言する必要があります |
| 00012 | Catalog に /StructTreeRoot エントリがありません。a レベル準拠でのみ必要です。タグ付き PDF には論理構造ツリーが必要です |
PDF/UA-1 問題コード(ComplianceTest = 2)
| 10001 | XMP メタデータストリームに pdfuaid:part が含まれていないか、値が 1 ではありません。ISO 14289-1 §5 では準拠ファイルがこのプロパティで自身を識別することを求め、ISO 14289-1 §6.2 ではこのプロパティなしに準拠を報告することを禁じています |
|---|---|
| 10002 | 文書 Catalog に /Metadata ストリームがありません。PDF/UA-1 準拠の主張はこのストリーム内に記録されます。これがなければ、ファイルはアクセシブルであることを表明できません |
| 10003 | Catalog の /MarkInfo 辞書がないか、/Marked が true ではありません。ISO 14289-1 §7.1 は、支援技術が構造ツリーに依存できるよう、すべての準拠ファイルがタグ付きであることを宣言するよう求めています |
| 10004 | Catalog に /StructTreeRoot エントリがありません。PDF/UA-1 ファイルには、ドキュメントの読み順と意味構造を説明する論理構造ツリーが必要です |
| 10005 | /ViewerPreferences 辞書が存在しないか、その /DisplayDocTitle エントリが true ではありません。ISO 14289-1 §7.1 では、準拠リーダーがウィンドウの表示領域にファイル名ではなくドキュメントタイトルを表示することを求めています |
| 10006 | Catalog の /Lang エントリが存在しないか空です。ISO 14289-1 §7.2 (ISO 32000-1 §14.9.2 を参照) では、スクリーンリーダーが正しい音声と発音規則を選択できるよう、すべての適合ファイルで自然言語を宣言する必要があります |
| 10007 | XMP メタデータストリームに空でない Dublin Core dc:title がありません。ISO 14289-1 §7.1 では「文書を明確に識別する dc:title エントリ」が必要です |
| 10008 | /MarkInfo 辞書の /Suspects が true に設定されています。ISO 14289-1 §7.1: PDF/UA 準拠を宣言するファイルでは Suspects 値を false にする必要があります — true はタグ付けに既知のエラーが含まれることを示します |
| 10009 | ドキュメントの /RoleMap が 1 つ以上の標準構造タイプを再マッピングしています。ISO 14289-1 §7.1: ISO 32000-1 §14.8.4 で定義された標準タグ(P、H1..H6、Figure、Table など)は再マッピングしてはなりません。詳細行には、再マッピングされた最初の標準タグが示されます |
| 10010 | ファイルは暗号化されていますが、暗号化の /P 権限キーのビット 10(マスク 512、"Extract for accessibility")が設定されていません。ISO 14289-1 §7.16 では、暗号化されたすべての準拠ファイルがアクセシビリティ抽出を許可し、支援技術がコンテンツにアクセスできることを求めています |
| 10011 | 動的 XFA フォームが検出されました。XFA XDP パケットに <dynamicRender>required</dynamicRender> が含まれています。ISO 14289-1 §7.15 は準拠ファイル内の動的 XFA フォームを禁じています。静的 XFA は許可されます |
| 10012 | Reference XObject(/Ref エントリを持つ Form XObject)が検出されました。ISO 14289-1 §7.20 は、参照先コンテンツを支援技術に公開せずに、ある PDF が別の PDF を参照として埋め込めるため、Reference XObject を禁止しています |
| 10013 | 1 つ以上の TrapNet 注釈が検出されました。ISO 14289-1 §7.18.2 では準拠ファイル内の TrapNet を明示的に禁止しています。詳細行は検出された注釈数を報告します |
| 10014 | 1 ページ以上に注釈がありますが、ページ辞書に /Tabs /S が設定されていません。ISO 14289-1 §7.18.3 ではこのようなページのタブ順が構造ツリーに従う必要があり、それは /Tabs /S で示されます。詳細行は違反ページ数を報告します |
| 10015 | 1 つ以上の Link 注釈に、空でない /Contents 代替説明がありません。ISO 14289-1 §7.18.5 では、スクリーンリーダーがリンク先を読み上げられるよう、各 Link 注釈にアクセシブルな説明を含める必要があります。詳細行は問題のある Link 注釈の数を報告します |
| 10016 | 1 つ以上の埋め込みファイル FileSpec 辞書に /F ファイル名キーがありません。ISO 14289-1 §7.11 では、すべての埋め込みファイル FileSpec が /F と /UF の両方を持つ必要があります |
| 10017 | 1 つ以上の埋め込みファイル FileSpec 辞書に /UF Unicode ファイル名キーがありません。ISO 14289-1 §7.11 では、すべての埋め込みファイル FileSpec に /F と /UF の両方が必要です |
| 10018 | 1 つ以上のオプショナルコンテンツ構成辞書に、空でない /Name テキスト文字列がありません。ISO 14289-1 §7.10 では、すべての OCG 構成辞書(既定の D エントリと OCProperties/Configs 内の各辞書)に空でない /Name を含める必要があります |
| 10019 | 1 つ以上のオプショナルコンテンツ設定辞書に、禁止された /AS キーが含まれています。ISO 14289-1 §7.10 では、使用情報に基づく自動状態調整を防止するため、すべての OCG 設定辞書で /AS を明示的に禁止しています |
| 10020 | 文書が参照する 1 つ以上の Standard-14 以外のフォントに、フォントプログラムが埋め込まれていません(FontDescriptor に FontFile、FontFile2 または FontFile3 エントリがありません)。ISO 14289-1 §7.21.4.1 では、レンダリングに使用するすべてのフォントにプログラムを埋め込むことが求められます。Type 3 フォントはグリフがインライン CharProcs であるため、この検査を省略します |
| 10021 | 1 つ以上の CIDFontType2 子孫に /CIDToGIDMap エントリがありません。ISO 14289-1 §7.21.3.2 では、埋め込まれたすべての Type 2 CIDFont に /CIDToGIDMap が必要です(CID をグリフインデックスに対応付けるストリーム、または名前 Identity) |
| 10022 | Standard 14 フォント(Helvetica、Times、Courier、Symbol、ZapfDingbats および太字/斜体の各種)が、埋め込みフォントプログラムなしで参照されています。ISO 14289-1 §7.21.4 NOTE 5 は、14 種の標準 Type 1 フォントについて埋め込み免除がないことを明確にしています |
| 10023 | 1 つ以上のフォントに /ToUnicode CMap がなく、§7.21.7 の除外リストにも一致しません。除外リストには、定義済みの MacRomanEncoding / MacExpertEncoding / WinAnsiEncoding、子孫 CIDFont が Adobe GB1 / CNS1 / Japan1 / Korea1 文字コレクションを使用する Type 0 フォント、および非シンボリック TrueType フォントが含まれます |
| 10024 | ドキュメント順で最初の見出し要素が H1(または強く構造化された H)ではない。ISO 14289-1 §7.4.2:「見出しタグを使用する場合、最初は H1 でなければならない」 |
| 10025 | 文書順で 1 つ以上の見出しレベルの飛び越しが検出されました。たとえば H1 の直後に H3 があり、H2 が飛ばされています。ISO 14289-1 §7.4.2 では、降順の見出しシーケンスは途中のレベルを飛ばさず、厳密な数値順序で進むことが求められます |
| 10026 | 1 つ以上の Widget 注釈に /StructParent エントリがありません。ISO 14289-1 §7.18.4 では Widget 注釈が Form 構造タグ内にネストされることを求めています。/StructParent がなければ Widget は構造ツリーから到達できません。詳細行には個数が報告されます |
| 10027 | 1 つ以上の Widget 注釈に /StructParent エントリがありますが、その値は StructTreeRoot/ParentTree を介して /S = Form を持つ構造要素へ解決されません。ISO 14289-1 §7.18.4 では、すべての Widget 注釈を Form 構造タグ内にネストする必要があります。考えられる原因は、/ParentTree エントリが完全に欠落している、非 StructElem(生の整数または MCR 辞書)を指している、あるいは Form 以外のタグを指定していることです |
| 10028 | 1 つ以上の非シンボリック TrueType フォントに、/Encoding(または Encoding 辞書's /BaseEncoding)として MacRomanEncoding または WinAnsiEncoding 以外がある。ISO 14289-1 §7.21.6 では、非シンボリック TrueType のエンコーディングをこれら 2 つの定義済み名に限定している |
| 10029 | 1 つ以上のシンボリック TrueType フォントのフォント辞書に /Encoding エントリがあります。ISO 14289-1 §7.21.6 第 4 段落ではこれを禁止しています — シンボリック TrueType のエンコーディングは、埋め込みフォントプログラム'の cmap テーブルだけで表現する必要があります |
| 10030 | 1 つ以上の L(リスト)構造要素に ListNumbering 属性がありません。ISO 14289-1 §7.6 は、すべての L タグがこの属性で番号付けスタイルを宣言するよう求めています。有効な値は None、Disc、Circle、Square、Decimal、UpperRoman、LowerRoman、UpperAlpha および LowerAlpha です(ISO 32000-1 Table 347) |
| 10031 | 1 つ以上の Link 注釈に、/IsMap エントリが true の URI アクション辞書があります。ISO 14289-1 §7.18.5 では、URI アクションの /IsMap = true を禁止しています。ただし、/IsMap キーを使用せずに同等の機能がコンテンツ内の別の場所で提供されている場合を除きます。正当な IsMap 用途がある作成者は、この診断を自身で抑制する必要があります |
| 10032 | 1 つ以上の Note 構造要素に /ID エントリがありません。ISO 14289-1 §7.9 は、相互参照が安定した対象へ到達できるよう、すべての Note タグが一意の /ID を宣言することを要求します |
| 10033 | 2 つ以上の Note 構造要素が同じ /ID 値を共有しています。詳細行は検出された重複ペア数を報告します。ISO 14289-1 §7.9 では文書内で Note ID が一意であることを要求しています |
| 10034 | 1 つ以上の非シンボリック TrueType プログラム(Symbolic フラグが解除された FontDescriptor があり、FontFile2 ストリームが存在するもの)に、シンボリックな Microsoft エントリ (3,0) だけをサブテーブルとして持つ cmap テーブルが埋め込まれています。ISO 14289-1 §7.21.6 の第 1 段落では、プログラムが /Encoding で宣言されたコードポイントをレンダリングできるよう、少なくとも 1 つの非シンボリック cmap サブテーブルが必要です |
| 10035 | 1 つ以上の非シンボリック TrueType フォントで /Encoding が宣言され、その /Differences 配列に Adobe Glyph List 2.0 に含まれないグリフ名があります。仕様で暗黙に許可されているため .notdef は許可リストに含まれます。ISO 14289-1 §7.21.6 第 3 段落では、すべての Differences エントリが AGL に属することを要求しています |
| 10042 | 1 つ以上の media clip data 辞書(/S /MCD で識別され、オプションで /Type /MediaClip を持つ)に必須の /CT content-type エントリがありません。ISO 14289-1 §7.18.6 は、ISO 32000-1 Table 274 でオプションのこのキーを必須に昇格しています |
| 10043 | 1 つ以上のメディアクリップデータ辞書に、必要な /Alt 配列(言語文字列と代替テキストの組)がありません。ISO 14289-1 §7.18.6 は、この ISO 32000-1 Table 274 の任意キーを必須に変更し、支援技術が埋め込みマルチメディアの説明を通知できるようにします |
| 10044 | 1 つ以上の構造ツリーノードに、直接の H(汎用見出し)子が複数あります。ISO 14289-1 §7.4.4 はこれを明示的に禁止しています。セクションを分割するか、H タグを番号付きの H1..H6 レベルに置き換えてください |
備考
PDF/A テストは配信前の高速な自己チェックを目的としています。ファイルを即座に不適格とする文書レベルの問題(誤った PDF バージョン、OutputIntent の欠落、A レベルでの構造ツリーの欠落、暗号化、PDF/A-1 でのレイヤー)を検出します。すべてのコンテンツストリーム演算子を走査したり、描画オブジェクトごとのフォント埋め込みや色空間参照を検証したりはしません。これらの検証には veraPDF などの専用 PDF/A 検証ツールが必要です。この関数は一次チェックおよびビルドパイプラインの回帰ゲートとして使用します。問題一覧を再利用可能なテキストレポートに整形する場合は CreatePreflightReport または SavePreflightReport を使用します。テキスト、JSON、HTML、または CSV のレポート出力には CreatePreflightReportEx または SavePreflightReportEx を使用するか、完全なレポートワークフローについて Preflight Reports を参照します
コンパニオン API GetPDFUADiagnostics は、外部ファイルではなく現在構築中のメモリ内文書に対して PDF/UA-1(ISO 14289-1)の同様のチェックを実行する
このライブラリで PDF/A 出力を生成する場合は、コンテンツを追加する前に SetPDFAMode を呼び出します。SetPDFAMode 内の生成側ガードが選択したパートで禁止されている処理をブロックするため、この方法で構築した文書は通常 CheckFileCompliance に自動的に合格します
例
// Validate a delivered PDF/A file and print all issues
var
Issues, Count, I: Integer;
begin
Issues := PDF.CheckFileCompliance('archive.pdf', '', 1, 0);
if Issues = 0 then
WriteLn('archive.pdf: PDF/A conformant')
else
begin
Count := PDF.GetStringListCount(Issues);
WriteLn('archive.pdf: ', Count, ' PDF/A issue(s) detected:');
for I := 1 to Count do
WriteLn(' ', PDF.GetStringListItem(Issues, I));
end;
end;
// Fast pass/fail gate in a CI pipeline — stop on the first issue
var
Failed: Boolean;
begin
Failed := PDF.CheckFileCompliance('build/output.pdf', '', 1, 1) <> 0;
if Failed then
Halt(1);
end;関連項目
Preflight Reports、CreatePreflightReport、CreatePreflightReportEx、SavePreflightReport、SavePreflightReportEx、ComparePreflightReports、SetPDFAMode、GetPDFUADiagnostics、GetStringListCount、GetStringListItem、SetPDFUAMode