Preflight-plugin och XML-MRR

pfXML serialiserar inbyggda kontroller, varningar, hints, stabila regel-ID:n, specifikationsreferenser samt objekt-, sida- eller byteplatser till det versionsbundna vokabuläret urn:hotpdf:preflight:mrr:1

CreatePreflightMRR lägger till betrodda in-process-pluginar för funktionsextraktion och anpassade valideringsregler, medan ValidatePDFWithPluginBundle kombinerar dessa regler med en befintlig THPDFValidationPolicy

Registrera en begränsad plugin

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);

Determinism och förtroendegräns

HotPDF validerar unika ASCII-plugin-ID:n och ABI-version 1, kör pluginarna i stabil ID-ordning, sorterar returnerade funktioner och fynd, utelämnar timing-jitter från rapporten, flyr XML-värden och avvisar odeklarerade förmågor eller ogiltiga regel-ID:n

Gränser begränsar pluginantal, funktionsantal, fyndantal, sammanlagda strängbyte, XML-utdatabyte, förfluten tid per plugin och total förfluten tid; en avvisad plugin bidrar med ett deterministiskt exekveringsfynd och förbrukar inga delade funktions-, fynd- eller strängbudgetar

Pluginarna körs i anropsprocessen och får källsökvägen, lösenordet, basernas textrapport, policynamnet, gränserna och avbrottstoken, så endast betrodd pluginkod bör registreras

Tidsgränserna kontrolleras efter att en utvärderare returnerar, eftersom en in-process-återanropsfunktion inte kan avbrytas säkert; långkörande utvärderare bör polla Context.CancellationToken och returnera snabbt

Se THotPDF.CreatePreflightMRR, THotPDF.ValidatePDFWithPluginBundle, THPDFPreflightPluginDescriptor och THPDFPreflightPluginLimits