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