Plugins de preflight y MRR XML
pfXML serializa comprobaciones integradas, advertencias, pistas, IDs de regla estables, referencias de especificación y ubicaciones de objeto, página o byte en el vocabulario versionado urn:hotpdf:preflight:mrr:1
CreatePreflightMRR añade plugins de confianza en proceso para la extracción de características y las reglas de validación personalizadas, mientras que ValidatePDFWithPluginBundle combina esas reglas con una THPDFValidationPolicy existente
Registrar un plugin acotado
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);
Determinismo y límite de confianza
HotPDF valida IDs de plugin ASCII únicos y la versión de ABI 1, ejecuta los plugins en orden de ID estable, ordena las características y los hallazgos devueltos, omite la fluctuación de tiempo del informe, escapa los valores XML y rechaza las capacidades no declaradas o los IDs de regla no válidos
Los límites acotan el recuento de plugins, el recuento de características, el recuento de hallazgos, los bytes de cadena agregados, los bytes de salida XML, el tiempo transcurrido por plugin y el tiempo transcurrido total; un plugin rechazado contribuye con un hallazgo de ejecución determinista y no consume los presupuestos compartidos de características, hallazgos o cadenas
Los plugins se ejecutan dentro del proceso del llamador y reciben la ruta de origen, la contraseña, el informe de texto base, el nombre de la política, los límites y el token de cancelación, por lo que solo debe registrarse código de plugin de confianza
Los límites de tiempo transcurrido se comprueban después de que un evaluador devuelva porque una devolución de llamada en proceso no puede interrumpirse de forma segura; los evaluadores de larga duración deben sondear Context.CancellationToken y devolver con prontitud
Véase THotPDF.CreatePreflightMRR, THotPDF.ValidatePDFWithPluginBundle, THPDFPreflightPluginDescriptor y THPDFPreflightPluginLimits