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