function ValidatePdfR: TPdfRValidationResult;
ValidatePdfR 会遍历当前打开的文档,查找 ISO 23504-1:2020 定义的文件格式标记:
%PDF-raster-x.y 版本标识注释(§5)。%PDF-raster-x.y 版本标识注释(§5)%PDF-1.4、%PDF-1.5、%PDF-1.6 或 %PDF-1.7(§6.2.2),对加密文件而言应为 %PDF-2.0(§6.2.3)/Type /ObjStm —— §6.2.4)pvriProhibitedCatalogEntry)pvriProhibitedInfoEntry)/ID 数组结果是一个 TPdfRValidationResult 记录:
prc1(找到 PDF/R-1 标记)、prcNone(没有标记)或 prcUnknown(解析失败或文档未激活)TPdfRValidationIssues 集合,可能包含零个或多个值:pvriMissingVersionMarker、pvriBadHeader、pvriObjStmPresent、pvriProhibitedCatalogEntry、pvriProhibitedInfoEntry、pvriInfoXmpMismatch、pvriMissingXmpMetadata、pvriMissingTrailerIdValidatePdfR 是只读的文件格式检查。PDF/R-1 合规还有严格的结构性要求,而此方法不会检查——例如逐页 Contents 结构、MediaBox 形式、允许的过滤器、generation-zero 间接引用、strip 布局。若要做这些内容级检查,请配合 TWAIN Working Group 的 PDF/R 验证器
%PDF-raster- 子串。ISO 23504-1 §5 规定该标记应位于 trailer dictionary 和 startxref 之间,但验证器也接受其他位置,以便对略微不标准的生成器保持宽容Conformance = prcUnknown 且 Issues 为空的记录%PDF-2.0 头),因此验证器不会把 trailer /Encrypt 键标记为不合规。若源 PDF 以 PDF 1.x 加密,则仍会因为头部检查而失败
uses System.TypInfo;
var
Outcome: TPdfRValidationResult;
Issue: TPdfRValidationIssue;
begin
Pdf1.FileName := 'C:\Incoming\scan.pdf';
Pdf1.Active := True;
Outcome := Pdf1.ValidatePdfR;
Memo1.Lines.Add('Level: ' + GetEnumName(TypeInfo(TPdfRConformance),
Ord(Outcome.Conformance)));
for Issue in Outcome.Issues do
Memo1.Lines.Add('- ' + GetEnumName(TypeInfo(TPdfRValidationIssue), Ord(Issue)));
end;