function ValidatePdfVT: TPdfVTValidationResult;
ValidatePdfVT 会遍历已打开的文档,查找 ISO 16612-2:2010 定义的文件格式级标记
pdfvtid:GTS_PDFVTVersion(§6.3 表 2)和 pdfvtid:GTS_PDFVTModDatepdfvtid:GTS_PDFVTModDate 与 xmp:ModifyDate 之间的一致性(§6.3 注 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 引用都必须以深度优先顺序恰好覆盖一次页面树/DestOutputProfile 的 OutputIntent 的目录 /OutputIntents 数组(继承自 PDF/X-4 的要求)/ID 数组以及缺少 /Encrypt(PDF/X 禁止加密)xmp:CreateDate 和 xmp:ModifyDate 条目结果是一个 TPdfVTValidationResult 记录
pvc1(PDF/VT-1 标记)、pvc2(PDF/VT-2 标记)、pvcNone(没有 PDF/VT 标记)或 pvcUnknown(存在标记但文件级版本无法识别)TPdfVTValidationIssues 集合,包含零个或多个值:pvviMissingXmpMetadata、pvviMissingPdfVTIdentifier、pvviMissingExtensionSchema、pvviMissingPdfVTModDate、pvviModDateMismatch、pvviMissingDPartRoot、pvviMissingPdfXIdentifier、pvviMissingOutputIntent、pvviMissingIccProfile、pvviMissingTrailerId、pvviEncryptionPresent、pvviMissingXmpDatesValidatePdfVT 是只读检查。它会检查文件格式标记、选定的 DPart 结构、精确的 PDF/VT 与 PDF/X 基础配对,以及以元素或 RDF 属性形式写入的 XMP 属性。完整的内容级验证仍应配合 PDF/X 预检引擎;对于 PDF/VT-2,还需要完整的文件集验证器。
/DPartRoot 层次结构,或者该树违反 §6.5 要求时,就会发出 pvviMissingDPartRoot,例如 /DParts 数组格式错误、/Start 和 /DParts 混用、子项所有权重复、/NodeNameList 名称无效或深度不匹配、页面范围没有遵循页面树顺序、单页范围把 /Start 重复为 /End,或者页面 /DPart 链接没有指向覆盖它的叶子 DPartpdfvtid: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;