CheckFileCompliance

コンプライアンス、ドキュメント検査

PDF/UA リーダープロファイルの選択

PDF/UA チェックは、XMP が pdfuaid:part=2 を示していれば part 2 を選択し、そうでなければ part 1 のチェックを維持します。ここで説明する従来の PDF/UA-1 チェックは、part 2 にもそのまま当てはまるとは限りません

PDF/UA-2 プロファイルは、識別情報・名前空間・ロール・構造のコアチェックを実装します。構造化レポートでは PDF/UA-2 と ISO 14289-2 を使用し、fullCertification=false と未検証の範囲を明示します

ターゲット part を強制するには CheckFilePDFUACompliance または RunPDFUAValidationPipelineTask を、対応範囲の上限を確認するには GetPDFUAReadValidationCoverageJSON を使用してください

説明

外部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 TPDFlib.CheckFileCompliance(Const InputFileName, Password: WideString; ComplianceTest, Options: Integer): Integer;

ActiveX

Function PDFlib::CheckFileCompliance(InputFileName As String, Password As String, ComplianceTest As Long, Options As Long) As Long

DLL

int DLCheckFileCompliance(int InstanceID, const wchar_t * InputFileName, const wchar_t * 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)。
3 — PDF/X(ISO 15930、PDF/X-6ファミリを含む)。
4 — PDF/VT-3(PDF/X-6ファミリベースの上に構築されたISO 16612-3:2020)。
5 — PDF/R-1制限付きラスター交換。
6 — PDF/VCR-1可変コンテンツ置換テンプレート。
7 — PDF/E-1エンジニアリングドキュメント交換。
Optionsテストを修飾するビットフラグです。

0 — デフォルト:ドキュメント内で見つかったすべての問題を報告します。
1 — 最初の問題の後に停止して即座に返します。呼び出し元が合否のシグナルだけを必要とする場合に便利です

戻り値

0ファイルは選択された規格に適合しています
Non-zero検出された各不適合を記述するエントリを持つStringListIDハンドルです。ハンドルは、ドキュメントが閉じられるかReleaseStringListが呼び出されるまで有効です

PDF/Aの問題コード(ComplianceTest = 1)

00002PDFバージョンが適合レベルで許可された最大値を超えています(PDF/A-1は1.4が上限、PDF/A-2とPDF/A-3は1.7が上限)。詳細行には問題のバージョンと許可された最大値が示されます
00003カタログに/OCProperties(オプションコンテンツ/レイヤー)が含まれています。これはPDF/A-1で禁止されています。PDF/A-2とPDF/A-3はレイヤーを許可するため、このチェックは発動しません
00005XMPのpdfaid:part+pdfaid:conformanceペアが欠落しているか、不正な形式であるか、正規のセット1A、1B、2A、2B、3A、3B以外の値を含んでいます。ライブラリはどのルールセットを適用すべきか判断できないため、Optionsに関係なく致命的な問題として報告されます
00006ドキュメントが暗号化されています。PDF/Aはすべてのパートで暗号化を禁じています
00007カタログに/OutputIntentsエントリがありません。すべてのPDF/Aパートは、レンダリングカラースペースが曖昧さなく定義されるために出力インテントを要求します
00011カタログに/MarkInfoエントリがありません。aレベル適合(PDF/A-1a、2a、3a)でのみ要求されます。タグ付きPDFは自らを宣言しなければなりません
00012カタログに/StructTreeRootエントリがありません。aレベル適合でのみ要求されます。タグ付きPDFドキュメントは論理構造ツリーを持たなければなりません

PDF/UA-1の問題コード(ComplianceTest = 2)

10001XMPメタデータストリームにpdfuaid:partが含まれていない、または値が1ではありません。ISO 14289-1 §5は、適合ファイルがこのプロパティ経由で自らを識別することを要求し、ISO 14289-1 §6.2は、これなしでの適合の報告を禁じています
10002ドキュメントカタログに/Metadataストリームがありません。PDF/UA-1の適合宣言はこのストリーム内に記録されるため、これがないとファイルはアクセシブルであることを宣言できません
10003カタログの/MarkInfo辞書が欠落しているか、/Markedがtrueではありません。ISO 14289-1 §7.1は、支援技術が構造ツリーに依存できるよう、すべての適合ファイルがタグ付きとして自らを宣言することを要求します
10004カタログに/StructTreeRootエントリがありません。PDF/UA-1ファイルは、ドキュメントの読み上げ順とセマンティクスを記述する論理構造ツリーを含まなければなりません
10005/ViewerPreferences辞書が欠落しているか、その/DisplayDocTitleエントリがtrueではありません。ISO 14289-1 §7.1は、準拠リーダーがファイル名の代わりにドキュメントタイトルをウィンドウに表示することを要求します
10006カタログの/Langエントリが欠落しているか空です。ISO 14289-1 §7.2(ISO 32000-1 §14.9.2を参照)は、スクリーンリーダーが正しい音声と発音ルールを選択できるよう、すべての適合ファイルが自然言語を宣言することを要求します
10007XMPメタデータストリームが空でないDublin Coreのdc:titleを持っていません。ISO 14289-1 §7.1は"a dc:title entry which clearly identifies the document"(ドキュメントを明確に識別する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は許可されます
10012Reference XObject(/Refエントリを持つフォームXObject)が検出されました。ISO 14289-1 §7.20は参照XObjectを禁じています。参照によりあるPDFが別のPDFを埋め込み、参照されたコンテンツを支援技術へ公開しないことが可能になるためです
100131つ以上のTrapNet注釈が検出されました。ISO 14289-1 §7.18.2は、適合ファイル内のTrapNetを明示的に禁じています。詳細行には、見つかった注釈の数が報告されます
100141つ以上のページが注釈を持つにもかかわらず、ページ辞書に/Tabs /Sを設定していません。ISO 14289-1 §7.18.3は、そのようなページのタブ順序が構造ツリーに従うことを要求します。それは/Tabs /Sによって示されます。詳細行には、問題のページ数が報告されます
100151つ以上のLink注釈に、空でない/Contents代替説明がありません。ISO 14289-1 §7.18.5は、スクリーンリーダーがリンク先を告知できるよう、各Link注釈がアクセシブルな説明を持つことを要求します。詳細行には、問題のLink注釈の数が報告されます
100161つ以上の埋め込みファイルのFileSpec辞書に、/Fファイル名キーがありません。ISO 14289-1 §7.11は、すべての埋め込みファイルFileSpecが/Fと/UFの両方を持つことを要求します
100171つ以上の埋め込みファイルのFileSpec辞書に、/UF Unicodeファイル名キーがありません。ISO 14289-1 §7.11は、すべての埋め込みファイルFileSpecが/Fと/UFの両方を持つことを要求します
100181つ以上のオプションコンテンツ構成辞書に、空でない/Nameテキスト文字列がありません。ISO 14289-1 §7.10は、すべてのOCG構成辞書(デフォルトのDエントリとOCProperties/Configs内のすべての辞書)が空でない/Nameを持つことを要求します
100191つ以上のオプションコンテンツ構成辞書に、禁止された/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であるため、このチェックはスキップされます
100211つ以上のCIDFontType2の子孫に、/CIDToGIDMapエントリがありません。ISO 14289-1 §7.21.3.2は、すべての埋め込みType 2 CIDFontが/CIDToGIDMap(CIDをグリフインデックスへマッピングするストリーム、または名前Identityのいずれか)を持つことを要求します
100221つ以上のStandard 14フォント(Helvetica、Times、Courier、Symbol、ZapfDingbatsおよびそのボールド/オブリック変種)が、埋め込みフォントプログラムなしで参照されています。ISO 14289-1 §7.21.4 NOTE 5は、14の標準Type 1フォントには埋め込みの免除がないことを明確にしています
100231つ以上のフォントに/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:"If any heading tags are used, H1 shall be the first."(見出しタグを使用する場合、H1が最初でなければなりません)
10025ドキュメント順で1つ以上の見出しレベルのスキップが検出されました。たとえばH1の直後にH3が続く、H2をスキップするケースです。ISO 14289-1 §7.4.2は、見出しの降順シーケンスが途中のレベルをスキップせず厳密な数値順に進むことを要求します
100261つ以上のWidget注釈に/StructParentエントリがありません。ISO 14289-1 §7.18.4は、Widget注釈がForm構造タグ内にネストされることを要求します。/StructParentがなければ、Widgetは構造ツリーから到達できません。詳細行には件数が報告されます
100271つ以上のWidget注釈が/StructParentエントリを持っていますが、その値がStructTreeRoot/ParentTreeを通して/S = Formの構造要素へ解決されません。ISO 14289-1 §7.18.4は、すべてのWidget注釈がForm構造タグ内にネストされることを要求します。考えられる原因:/ParentTreeエントリが完全に欠落している、非StructElem(生の整数/MCR辞書)を指している、または非Formタグを名指している
100281つ以上の非シンボリックTrueTypeフォントが、/Encodingでも/BaseEncodingでもないMacRomanEncoding(またはEncoding辞書のWinAnsiEncoding)を持っています。ISO 14289-1 §7.21.6は、非シンボリックTrueTypeのエンコーディングをこの2つの事前定義名へ制限しています
100291つ以上のシンボリックTrueTypeフォントが、フォント辞書に/Encodingエントリを持っています。ISO 14289-1 §7.21.6第4段落はこれを禁じています—シンボリックTrueTypeのエンコーディングは、埋め込みフォントプログラムのcmapテーブルを通してのみ表現されなければなりません
100301つ以上のL(リスト)構造要素にListNumbering属性がありません。ISO 14289-1 §7.6は、すべてのLタグがこの属性経由で番号付けスタイルを宣言することを要求します。有効な値はNone、Disc、Circle、Square、Decimal、UpperRoman、LowerRoman、UpperAlpha、LowerAlphaです(ISO 32000-1 Table 347)
100311つ以上のLink注釈が、/IsMapエントリがtrueのURIアクション辞書を持っています。ISO 14289-1 §7.18.5は、/IsMap = trueキーなしでコンテンツ内の他の場所に同等の機能が提供されない限り、URIアクション上の/IsMapを禁じています。正当なIsMapのユースケースを持つ作成者は、自らの判断でこの診断を抑制すべきです
100321つ以上のNote構造要素に/IDエントリがありません。ISO 14289-1 §7.9は、クロスリファレンスが安定したターゲットへ着地できるよう、すべてのNoteタグが一意の/IDを宣言することを要求します
100332つ以上のNote構造要素が同じ/ID値を共有しています。詳細行には、検出された重複ペアの数が報告されます。ISO 14289-1 §7.9は、Note IDがドキュメント内で一意であることを要求します
100341つ以上の非シンボリックTrueTypeプログラム(SymbolicフラグがクリアされFontFile2ストリームが存在するFontDescriptor)が、唯一のサブテーブルがシンボリックな(3,0) Microsoftエントリであるcmapテーブルを埋め込んでいます。ISO 14289-1 §7.21.6第1段落は、プログラムが/Encodingで宣言されたコードポイントをレンダリングできるよう、少なくとも1つの非シンボリックcmapサブテーブルを要求します
100351つ以上の非シンボリックTrueTypeフォントが、Adobe Glyph List 2.0のメンバーでないグリフ名を含む/Encoding配列を持つ/Differencesを宣言しています。.notdefは仕様が暗黙的に許可するためホワイトリストに載っています。ISO 14289-1 §7.21.6第3段落は、すべてのDifferencesエントリがAGLに収まることを要求します
100361つ以上の単純TrueTypeフォントの幅が、埋め込みフォントプログラム内の対応するメトリクスと1/1000 emを超えて異なっています。ISO 14289-1 §7.21.5は、/Widths配列が埋め込みグリフメトリクスと一致することを要求します
100371つ以上のCIDFontType2の幅が、埋め込みTrueTypeプログラム内の対応するメトリクスと1/1000 emを超えて異なっています。ISO 14289-1 §7.21.5は、/W配列が埋め込みグリフメトリクスと一致することを要求します
10038Type 1フォント記述子の/CharSetが、埋め込みフォントプログラムに存在する1つ以上のグリフ名を省略しています。ISO 14289-1 §7.21.4.2は、このエントリがすべての埋め込みグリフを列挙することを要求します
10039CIDフォント記述子の/CIDSetが、埋め込みフォントプログラム内のグリフへマッピングされる1つ以上のCIDを省略しています。ISO 14289-1 §7.21.4.2は、このビットセットがすべての埋め込みCIDを識別することを要求します
10040テキストを含むフォームXObjectが、マーク付きコンテンツの外側のページコンテンツから呼び出されています。ISO 14289-1 §7.20は、フォームXObjectのコンテンツが構造要素へ組み込まれることを要求します
100411つ以上のテキスト表示オペランドが.notdefグリフへ解決されています。ISO 14289-1 §7.21.8は、テキストレンダリングモードに関係なく.notdefへの参照を禁じています
100421つ以上のメディアクリップデータ辞書(/S /MCD、オプションで/Type /MediaClipで識別される)に、必須の/CTコンテンツタイプエントリがありません。ISO 14289-1 §7.18.6は、このISO 32000-1 Table 274のオプションキーを必須へ引き上げています
100431つ以上のメディアクリップデータ辞書に、必須の/Alt配列(言語文字列+代替テキストのペア)がありません。ISO 14289-1 §7.18.6は、支援技術が埋め込みマルチメディアの説明を告知できるよう、このISO 32000-1 Table 274のオプションキーを必須へ引き上げています
100441つ以上の構造ツリーノードが、複数の直接のH(汎用見出し)子を持っています。ISO 14289-1 §7.4.4はこれを明示的に禁じています。セクションを分割するか、Hタグを番号付きのH1..H6レベルへ置き換えてください

備考

PDF/Aテストは、納品前の高速なセルフチェックを意図しています。ファイルをそのまま失格させるドキュメントレベルの問題(誤ったPDFバージョン、欠落したOutputIntent、Aレベルでの構造ツリーの欠落、暗号化、PDF/A-1でのレイヤー)を検出します。この関数はすべてのコンテンツストリームオペレーターをたどるわけでも、描画された各オブジェクトのフォント埋め込みやカラースペース参照を検証するわけでもありません。それらの検証には専用のPDF/Aバリデーター(veraPDFなど)が必要です。この関数を第一線のチェックとして、またビルドパイプラインのリグレッションゲートとして使用してください。ライブラリに問題リストを再利用可能なテキストレポートへ整形させたい場合はCreatePreflightReportまたはSavePreflightReportを使用し、テキスト、JSON、HTML、CSVのレポート出力にはCreatePreflightReportExまたはSavePreflightReportExを使用してください。完全なレポートワークフローについてはPreflight Reportsを参照してください姉妹APIの

GetPDFUADiagnosticsは、外部ファイルではなく、現在構築中のメモリ内ドキュメントに対してPDF/UA(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

コンプライアンステスト3はPDF/X(ISO 15930)を監査します。エディション識別、出力インテント、ページジオメトリ、埋め込みフォント、禁止機能セット。PDF/X-6ではさらに、注釈フラグと固定外観、AcroFormと署名外観、XFAとビューアー生成外観の除外、アクション配置、アクションチェーン、許可された名前付きアクションセット、すべてのUseBlackPtComp値を検証します

コンプライアンステスト4はPDF/VT-3識別メタデータ、そのPDF/X-6ファミリーベース、DPartRootとDPartグラフ、DPM名と値、レコードレベル、ページ順、正確なリーフカバレッジを監査します。合成チェックは1回のパーサーパスを共有します

コンプライアンステスト5はPDF/R-1マーカー配置、バージョンと暗号化、ジェネレーションゼロの間接オブジェクト、制限付き辞書とフィルター、シングルストリームページプログラム、順序付きラスタストリップ、画像エンコーディング、ページカバレッジ、実効解像度を監査します。共有検証パイプラインのパースを再利用できます

コンプライアンステスト6はPDF/X基盤とPDF/VCR-1 XMP識別、単一の直接テンプレートルート、宣言されたフィールド、オプションのページ選択フィールド、すべてのリーフPassThrough置換プレースホルダー、ページバインディング、MCIDと外接ボックスを監査します。共有検証パイプラインのパースを再利用できます

コンプライアンステスト7はPDF/E-1識別とライフサイクルメタデータ、トレーラー識別子、許可された暗号化、出力インテントとデバイスカラースペース、コンテンツオペレーター、フォント、注釈、フォーム、オプショナルコンテンツ、アクション、外部ファイル参照、グラフィックス状態、3Dストリーム制限を監査します。共有検証パイプラインのパースを再利用できます