Plugins de preflight e MRR XML
pfXML serializa verificações integradas, avisos, dicas, IDs de regra estáveis, referências de especificação e locais de objeto, página ou byte no vocabulário versionado urn:hotpdf:preflight:mrr:1
CreatePreflightMRR adiciona plugins confiáveis em processo para extração de recursos e regras de validação personalizadas, enquanto ValidatePDFWithPluginBundle combina essas regras com uma THPDFValidationPolicy existente
Registrar um plugin limitado
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 e limite de confiança
O HotPDF valida IDs de plugin ASCII exclusivos e versão de ABI 1, executa plugins em ordem estável de ID, classifica recursos e conclusões retornados, omite jitter de tempo do relatório, escapa valores XML e rejeita capacidades não declaradas ou IDs de regra inválidos
Os limites restringem a contagem de plugins, a contagem de recursos, a contagem de conclusões, os bytes agregados de strings, os bytes de saída XML, o tempo decorrido por plugin e o tempo decorrido total; um plugin rejeitado contribui com uma conclusão de execução determinística e não consome orçamentos compartilhados de recursos, conclusões ou strings
Os plugins são executados dentro do processo do chamador e recebem o caminho de origem, a senha, o relatório de texto base, o nome da política, os limites e o token de cancelamento, portanto apenas código de plugin confiável deve ser registrado
Os limites de tempo decorrido são verificados depois que um avaliador retorna, pois um callback em processo não pode ser interrompido com segurança; avaliadores de longa duração devem consultar Context.CancellationToken e retornar prontamente
Veja THotPDF.CreatePreflightMRR, THotPDF.ValidatePDFWithPluginBundle, THPDFPreflightPluginDescriptor e THPDFPreflightPluginLimits