function ValidatePdfVT: TPdfVTValidationResult;
ValidatePdfVT 會走訪開啟中的文件,尋找 ISO 16612-2:2010 定義的檔案格式層級標記:
pdfvtid:GTS_PDFVTVersion(§6.3 Table 2)與 pdfvtid:GTS_PDFVTModDatepdfvtid:GTS_PDFVTModDate 與 xmp:ModifyDate 相等(§6.3 NOTE 1)pdfxid:GTS_PDFXVersion — PDF/VT-1 必須是 PDF/X-4(§6.2.1),而 PDF/VT-2 必須使用 PDF/X-4p、PDF/X-5g 或 PDF/X-5pg 其中一種檔案集基礎(§6.2.2)pdfaExtension:schemas 描述/DPartRoot 項目帶有可用的 §6.5 DPart 樹:/DPartRootNode、相容於 XML NMTOKEN 的 /NodeNameList、父連結、/DParts 陣列的陣列、葉節點的 /Start//End 範圍,以及逐頁的 /DPart 參照,必須以深度優先順序恰好涵蓋頁面樹一次GTS_XID、GTS_Scope 與 GTS_Env 的直接值型別與允許值、Record 範圍使用的間接 DPartRoot RecordLevel,以及 Stream 範圍僅限 PDF/VT-2s 的邊界FlateDecode 的頁面或 Form XObject 串流,透過有效的繼承資源解析每個 Do 運算元,以強制執行 SingleUse 計數、資源可見性,以及 Record 範圍的單一收件者擁有權Intent、帶有混合色彩空間的必要隔離透明 Group,以及直接或巢狀 Form 內容中的可選內容標記運算子/OutputIntents 陣列,其 OutputIntent 帶有適合該 PDF/X 基礎的內嵌 /DestOutputProfile 或外部 /DestOutputProfileRef/ID 陣列且不存在 /Encrypt(PDF/X 禁止加密)xmp:CreateDate 與 xmp:ModifyDate 項目,用於 Info / XMP 一致性結果是一筆 TPdfVTValidationResult 記錄:
pvc1(PDF/VT-1 標記)、pvc2(PDF/VT-2 標記)、pvcNone(沒有 PDF/VT 標記)或 pvcUnknown(標記存在但檔案層級版本無法辨識)TPdfVTValidationIssues 集合,內含零或多個標記、DPart、PDF/X 繼承、重複使用物件與封裝問題值pvviGtsScopeInvalidValue, pvviGtsScopeRecordWithoutRecordLevel, pvviGtsXidNotUuid, pvviGtsEnvMissing, pvviGtsXidInvalidType, pvviGtsEnvInvalidType, pvviGtsScopeStreamInVT1, pvviGtsScopeSingleUseRepeated, pvviGtsScopeRecordCrossesRecords 與 pvviGtsResourceNotVisiblepvviGtsEncapsulatedInvalidType, pvviGtsEncapsulatedMissingScope, pvviGtsEncapsulatedImageMissingIntent, pvviGtsEncapsulatedGroupInvalid 與 pvviGtsEncapsulatedOptionalContentConformance 是實際的 PDF/VT 等級且 Issues 為空時傳回 TrueValidatePdfVT 是唯讀的。它檢查檔案格式標記、選定的 DPart 樹語意、重複使用 XObject 的範圍與封裝、精確的 PDF/VT 對 PDF/X 基礎配對,以及以元素或 RDF 屬性形式寫入的 XMP 屬性。完整的內容層級驗證請搭配 PDF/X 預檢引擎;PDF/VT-2 則請搭配 InspectPdfVT2sStream 或其他完整的檔案集驗證器。PDF/VT-2s 是 MIME 串流符合等級,其版本由 ISO 16612-2 Annex A 的 MIME 串流檔頭標示,而不是由檔案層級的 pdfvtid:GTS_PDFVTVersion 值標示
/DPartRoot 階層,或樹違反 §6.5 要求時,會發出 pvviMissingDPartRoot;這些要求包括畸形的 /DParts 陣列、/Start 與 /DParts 混用、子節點擁有權重複、無效的 /NodeNameList 名稱或深度不符、未依頁面樹順序的頁面範圍、把 /Start 重複用作 /End 的單頁範圍,或未指向涵蓋葉節點 DPart 的頁面 /DPart 連結FlateDecode 的串流;具有其他或鏈結篩選器的內容串流仍交由專用的完整預檢引擎處理pdfvtid:GTS_PDFVTModDate 與 xmp:ModifyDate 同時存在且值不同時,才發出 pvviModDateMismatch;SaveAsPdfVT 一律以相同的值寫入兩者Conformance = pvcUnknown 且 Issues 集合為空的記錄
uses System.TypInfo;
var
Outcome: TPdfVTValidationResult;
Issue: TPdfVTValidationIssue;
begin
Pdf1.FileName := 'C:\Incoming\statements.pdf';
Pdf1.Active := True;
Outcome := Pdf1.ValidatePdfVT;
Memo1.Lines.Add('Level: ' + GetEnumName(TypeInfo(TPdfVTConformance),
Ord(Outcome.Conformance)));
for Issue in Outcome.Issues do
Memo1.Lines.Add('- ' + GetEnumName(TypeInfo(TPdfVTValidationIssue), Ord(Issue)));
end;