Plugins de pré-vol et MRR XML

pfXML sérialise les vérifications intégrées, les avertissements, les indices, les identifiants de règle stables, les références de spécification et les emplacements d'objets, de pages ou d'octets dans le vocabulaire versionné urn:hotpdf:preflight:mrr:1

CreatePreflightMRR ajoute des plugins intra-processus de confiance pour l'extraction de caractéristiques et les règles de validation personnalisées, tandis que ValidatePDFWithPluginBundle combine ces règles avec une THPDFValidationPolicy existante

Enregistrer un plugin borné

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

Déterminisme et frontière de confiance

HotPDF valide les identifiants ASCII uniques des plugins et l'ABI version 1, exécute les plugins dans un ordre d'identifiants stable, trie les caractéristiques et résultats retournés, omet la gigue de synchronisation du rapport, échappe les valeurs XML et rejette les capacités non déclarées ou les identifiants de règle invalides

Les limites bornent le nombre de plugins, de caractéristiques, de résultats, les octets agrégés de chaînes, les octets de sortie XML, le temps écoulé par plugin et le temps écoulé total ; un plugin rejeté contribue un résultat d'exécution déterministe et ne consomme pas les budgets partagés de caractéristiques, de résultats ou de chaînes

Les plugins s'exécutent dans le processus appelant et reçoivent le chemin source, le mot de passe, le rapport texte de base, le nom de politique, les limites et le jeton d'annulation, de sorte que seul un code de plugin de confiance doit être enregistré

Les limites de temps écoulé sont vérifiées après que l'évaluateur retourne, car un rappel intra-processus ne peut pas être préempté en toute sécurité ; les évaluateurs de longue durée devraient sonder Context.CancellationToken et retourner rapidement

Voir THotPDF.CreatePreflightMRR, THotPDF.ValidatePDFWithPluginBundle, THPDFPreflightPluginDescriptor et THPDFPreflightPluginLimits