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