function ValidatePdfUa: TPdfUaValidationResult;
ValidatePdfUa 會在開啟中的文件裡尋找 ISO 14289-1:2014 定義的 PDF/UA-1 檔案格式標記
pdfuaid:part = 1 的 XMP 中繼資料串流,以及對應的 pdfaExtension:schemas 說明(§5)dc:title 項目(§7.1)StructTreeRoot(§7.1),這是文件能帶 tagging 的前提/MarkInfo << /Marked true /Suspects false >>(§7.1)/ViewerPreferences << /DisplayDocTitle true >>(§7.1)/Lang(§7.2)/ID 陣列,以及沒有加密xmp:CreateDate / xmp:ModifyDate(建議用來維持 Info/XMP 一致)回傳的結果會是 TPdfUaValidationResult record
puc1(找到 PDF/UA-1 identifier)、pucNone(沒有 PDF/UA marker),或 pucUnknown(parse 失敗)TPdfUaValidationIssues set,可能包含下列值中的一個或多個:pvuaiMissingXmpMetadata、pvuaiMissingPdfUaIdentifier、pvuaiMissingExtensionSchema、pvuaiMissingDcTitle、pvuaiMissingStructTreeRoot、pvuaiMissingMarkInfo、pvuaiSuspectsTrue、pvuaiMissingDisplayDocTitle、pvuaiMissingLang、pvuaiEncryptionPresent、pvuaiMissingTrailerId、pvuaiMissingXmpDates、pvuaiFontNotEmbedded、pvuaiFontMissingToUnicode、pvuaiMissingTabsOrder、pvuaiFigureMissingAlt、pvuaiFormulaMissingAlt、pvuaiNoteMissingIdValidatePdfUa 是唯讀檢查,不會修改文件,也可以重複呼叫,建議在把 PDF 交給封存系統或無障礙檢查器之前先跑一次,好把不相容的地方直接顯示給操作人員,若只是要確認「這是不是 PDF/UA-1」而不需要 issue list,請改用較輕量的 PdfUaConformance 屬性
Conformance = pucUnknown 且 Issues 是空集合的 record/Suspects true 時,驗證器才會標記 pvuaiSuspectsTrue,如果文件根本沒有 /Suspects key,則視為該點相容,因為規格只禁止 trueN 0 R),SaveAsPdfUa 仍會強制寫入 ISO 14289-1 7.1 要求的 /ViewerPreferences /DisplayDocTitle true 與 /MarkInfo /Marked true /Suspects false 項目,既有 keys 會保留,而重寫後的 catalog 會被正規化成 direct dictionaryuses System.TypInfo;
var
Outcome: TPdfUaValidationResult;
Issue: TPdfUaValidationIssue;
begin
Pdf1.FileName := 'C:\Incoming\report.pdf';
Pdf1.Active := True;
Outcome := Pdf1.ValidatePdfUa;
Memo1.Lines.Add('等級: ' + GetEnumName(TypeInfo(TPdfUaConformance),
Ord(Outcome.Conformance)));
for Issue in Outcome.Issues do
Memo1.Lines.Add('- ' + GetEnumName(TypeInfo(TPdfUaValidationIssue), Ord(Issue)));
end;