function ValidatePdfA: TPdfAValidationResult;
ValidatePdfA は開いている文書を走査し、ISO 19005-1 (Cor.1:2007 を含む) で定義されたすべての PDF/A 準拠マーカーを探します:
pdfaid:part および pdfaid:conformance エントリを持つ XMP メタデータストリーム。これは、ドキュメントがどの PDF/A レベル(1a、1b、2b、3b、...)に対して作成されたかをバリデーターに伝えます。/ID 配列(ISO 19005-1 6.1.3 に従い必須)。xmp:CreateDate and xmp:ModifyDateXMP パケット内にあるか確認します (Info dictionary が 6.7.3 Example 2 に従って CreationDate / ModDate 値を保持する場合に必要)pdfaExtension:schemas コンテナー(6.7.8 / Cor.1 で必要)。結果は TPdfAValidationResult レコードです:
pac1a, pac1b, pac2a, pac2b, pac2u, pac3a, pac3b, pac3u, pacNone, or pacUnknown for a PDF/A marker without a recognised level).TPdfAValidationIssue 値の TPdfAValidationIssues 集合。構造マーカーは pvaiMissingXmpMetadata、pvaiMissingPdfAIdentifier、pvaiMissingOutputIntent、pvaiMissingIccProfile、pvaiEncryptionPresent、pvaiMissingTrailerId、pvaiMissingXmpDates、pvaiMissingExtensionSchema である。また、マーカー注入では修正できないコンテンツレベルの違反も報告する:pvaiLevelAStructureMissing(タグ付き構造のない Level A の主張)、pvaiJavaScriptPresent、pvaiForbiddenAction、pvaiAdditionalActions、pvaiEmbeddedFilesNonConforming、pvaiLzwUsed、pvaiTransparencyForbidden、pvaiOptionalContentForbidden、pvaiForbiddenAnnotation、pvaiNeedAppearancesTrue、pvaiXfaPresent、pvaiFontNotEmbedded、pvaiUnicodeMappingMissing(フォントが /ToUnicode を欠く PDF/A-2u / PDF/A-3u の主張)。ValidatePdfA は読み取り専用の検査であり、文書を変更せず、繰り返し呼び出しても安全です。PDF をアーカイブシステムへ渡す前に使用し、非準拠をオペレーターへ提示します。問題リストが不要な一般的な「これはどのレベルか」の確認には、より軽量なPdfAConformance property.
/NeedAppearances と /XFA、記述子に埋め込みフォントプログラムを持たないフォント——を報告するようになった。透明度、オプショナルコンテンツ、埋め込みファイルの検査は、主張された PDF/A パートに応じて適用される(PDF/A-1 では禁止、PDF/A-2 および PDF/A-3 では許可)。これは依然として網羅的なバリデーターではなく高速なバイトレベルの検査であり(たとえば、色空間やグリフ単位のフォントカバレッジは解析しない)、網羅的な認証が必要な場合は veraPDF のような完全なバリデーターと併用すること。Conformance = pacNone and an empty Issues array.
uses System.TypInfo;
var
Outcome: TPdfAValidationResult;
Issue: TPdfAValidationIssue;
begin
Pdf1.FileName := 'C:\Incoming\report.pdf';
Pdf1.Active := True;
Outcome := Pdf1.ValidatePdfA;
Memo1.Lines.Add('Level: ' + GetEnumName(TypeInfo(TPdfAConformance),
Ord(Outcome.Conformance)));
for Issue in Outcome.Issues do
Memo1.Lines.Add('- ' + GetEnumName(TypeInfo(TPdfAValidationIssue), Ord(Issue)));
end;