function ValidatePdfA: TPdfAValidationResult;
ValidatePdfA 會走訪已開啟文件,尋找 ISO 19005-1(含 Cor.1:2007)所定義的每一個 PDF/A 符合性標記
pdfaid:part 與 pdfaid:conformance 項目的 XMP metadata stream,用來告訴驗證器文件是以哪個 PDF/A 等級製作(1a、1b、2b、3b 等)/ID 陣列,這是 ISO 19005-1 6.1.3 規定的必需項目xmp:CreateDate 與 xmp:ModifyDate,當 Info 字典依 6.7.3 Example 2 持有 CreationDate / ModDate 值時需要pdfaExtension:schemas 容器,這是 6.7.8 / Cor.1 的要求結果會是一個 TPdfAValidationResult 記錄
pac1a、pac1b、pac2a、pac2b、pac2u、pac3a、pac3b、pac3u、pacNone,或在有 PDF/A 標記但等級無法識別時使用的 pacUnknown)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 屬性
/NeedAppearances 與 /XFA,以及其描述符不含嵌入字型程式的字型。透明度、可選內容與嵌入檔案檢查會依據所聲明的 PDF/A 部分套用,在 PDF/A-1 中被禁止,在 PDF/A-2 與 PDF/A-3 中被允許。它仍然只是快速的位元組級檢查,而不是詳盡驗證器,例如它不會解析色彩空間或逐字形的字型涵蓋情況,因此需要完整認證時,請搭配 veraPDF 之類的完整驗證器使用Conformance = pacNone 且 Issues 陣列為空的記錄uses System.TypInfo;
var
Outcome: TPdfAValidationResult;
Issue: TPdfAValidationIssue;
begin
Pdf1.FileName := 'C:\Incoming\report.pdf';
Pdf1.Active := True;
Outcome := Pdf1.ValidatePdfA;
Memo1.Lines.Add('等級: ' + GetEnumName(TypeInfo(TPdfAConformance),
Ord(Outcome.Conformance)));
for Issue in Outcome.Issues do
Memo1.Lines.Add('- ' + GetEnumName(TypeInfo(TPdfAValidationIssue), Ord(Issue)));
end;