Preflight-plug-ins en XML-MRR
pfXML serialiseert ingebouwde controles, waarschuwingen, hints, stabiele regel-id's, specificatiereferenties en object-, pagina- of bytelocaties in het versioned urn:hotpdf:preflight:mrr:1-vocabulaire
CreatePreflightMRR voegt vertrouwde in-process-plug-ins toe voor functie-extractie en aangepaste validatieregels, terwijl ValidatePDFWithPluginBundle die regels combineert met een bestaand THPDFValidationPolicy
Een begrensde plug-in registreren
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);
Determinisme en vertrouwensgrens
HotPDF valideert unieke ASCII-plug-in-id's en ABI-versie 1, voert plug-ins in stabiele id-volgorde uit, sorteert geretourneerde functies en bevindingen, laat timing-jitter uit het rapport weg, escapet XML-waarden en verwerpt niet-gedeclareerde capaciteiten of ongeldige regel-id's
Limieten begrenzen plug-in-aantal, functie-aantal, bevinding-aantal, geaggregeerde stringbytes, XML-uitvoerbytes, per-plug-in-verstreken tijd en totale verstreken tijd; een geweigerde plug-in draagt bij aan een deterministische uitvoeringsbevinding en verbruikt geen gedeelde functie-, bevinding- of stringbudgetten
Plug-ins draaien in het aanroepproces en ontvangen het bronpad, het wachtwoord, het basistekstrapport, de beleidsnaam, de limieten en het annulerings-token, zodat alleen vertrouwde plug-in-code moet worden geregistreerd
Elapsed-limieten worden gecontroleerd nadat een evaluator retourneert, omdat een in-process-callback niet veilig kan worden vooruitgelopen; langlopende evaluators moeten Context.CancellationToken pollen en snel retourneren
Zie THotPDF.CreatePreflightMRR, THotPDF.ValidatePDFWithPluginBundle, THPDFPreflightPluginDescriptor en THPDFPreflightPluginLimits