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