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 引用,必须按深度优先顺序恰好覆盖页面树一次GTS_XID、GTS_Scope 和 GTS_Env 的直接值类型和允许值、Record 作用域使用的间接 DPartRoot RecordLevel,以及 Stream 作用域仅限 PDF/VT-2s 的边界FlateDecode 页面或 Form XObject 流,通过有效继承资源解析每个 Do 操作数,以强制 Record 作用域的 SingleUse 计数、资源可见性和单一接收者所有权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 附录 A 中的 MIME 流头标识,
而不是由文件级 pdfvtid:GTS_PDFVTVersion
值标识
/DPartRoot 层次结构,或树违反 §6.5 要求(例如畸形的 /DParts 数组、/Start 与 /DParts 混用、重复的子节点归属、无效的 /NodeNameList 名称或深度不匹配、不遵循页面树顺序的页面范围、把 /Start 重复用作 /End 的单页范围,或未指向覆盖叶 DPart 的页面 /DPart 链接)时,会发出 pvviMissingDPartRootFlateDecode 流;带其他或链式过滤器的内容流仍可交给专用的完整预检引擎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;