预检插件与 XML MRR
pfXML 将内置检查、警告、提示、稳定规则 ID、规范引用以及对象、页面或字节位置序列化到版本化的 urn:hotpdf:preflight:mrr:1 词汇表
CreatePreflightMRR 为特征提取和自定义验证规则添加受信任的进程内插件,而 ValidatePDFWithPluginBundle 将这些规则与现有 THPDFValidationPolicy 组合
注册有界插件
function EvaluateVendorRules(
const Context: THPDFPreflightPluginContext;
out PluginResult: THPDFPreflightPluginResult;
out ErrorMessage: AnsiString): Boolean;
begin
SetLength(PluginResult.Findings, 1);
PluginResult.Findings[0] := THPDFPreflightPluginFinding.Create(
'vendor.metadata.required', 'Vendor metadata is present', True, ppsError);
PluginResult.Findings[0].Scope := 'metadata';
PluginResult.Findings[0].Path := '/Vendor';
ErrorMessage := '';
Result := True;
end;
Limits := THPDFPreflightPluginLimits.Default;
SetLength(Plugins, 1);
Plugins[0] := THPDFPreflightPluginDescriptor.Create(
'vendor-policy', '1.0', [ppcValidationRules], EvaluateVendorRules);
XML := PDF.CreatePreflightMRR('Input.pdf', '', Plugins, Limits);
确定性与信任边界
HotPDF 验证唯一 ASCII 插件 ID 和 ABI 版本 1,以稳定 ID 顺序执行插件,对返回的特征和发现排序,从报告中省略时序抖动,转义 XML 值,并拒绝未声明能力或无效规则 ID
限制约束插件数、特征数、发现数、聚合字符串字节、XML 输出字节、每插件运行时间和总运行时间;被拒绝的插件贡献确定性执行发现,并且不消费共享的特征、发现或字符串预算
插件在调用方进程内运行并接收源路径、密码、基础文本报告、策略名称、限制和取消令牌,因此只应注册受信任的插件代码
运行时间限制在求值器返回后检查,因为进程内回调无法安全抢占;长时间运行的求值器应轮询 Context.CancellationToken 并及时返回
请参阅 THotPDF.CreatePreflightMRR、THotPDF.ValidatePDFWithPluginBundle、THPDFPreflightPluginDescriptor 和 THPDFPreflightPluginLimits