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