預檢外掛與 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