Wtyczki preflight i XML MRR
pfXML serializuje wbudowane sprawdzenia, ostrzeżenia, podpowiedzi, stabilne ID reguł, referencje do specyfikacji i lokalizacje obiektów, stron lub bajtów do wersjonowanego słownika urn:hotpdf:preflight:mrr:1
CreatePreflightMRR dodaje zaufane wtyczki wewnątrzprocesowe do ekstrakcji cech i własnych reguł walidacji, a ValidatePDFWithPluginBundle łączy te reguły z istniejącą THPDFValidationPolicy
Rejestracja ograniczonej wtyczki
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);
Determinizm i granica zaufania
HotPDF waliduje unikalne ASCII ID wtyczek i wersję ABI 1, wykonuje wtyczki w stabilnej kolejności ID, sortuje zwrócone cechy i ustalenia, pomija jitter czasów w raporcie, escapuje wartości XML i odrzuca niezadeklarowane możliwości lub nieprawidłowe ID reguł
Limity ograniczają liczbę wtyczek, cech, ustaleń, łączne bajty ciągów, bajty wyjścia XML, czas każdej wtyczki i czas łączny; odrzucona wtyczka wnosi deterministyczne ustalenie wykonania i nie zużywa współdzielonych budżetów cech, ustaleń ani ciągów
Wtyczki działają wewnątrz procesu wywołującego i otrzymują ścieżkę źródła, hasło, podstawowy raport tekstowy, nazwę polityki, limity i token anulowania, więc rejestruj tylko zaufany kod wtyczek
Limity czasu są sprawdzane po powrocie evaluatora, bo wywołania zwrotnego wewnątrz procesu nie da się bezpiecznie wywłaszczyć; długotrwałe evaluatory powinny odpytywać Context.CancellationToken i szybko wracać
Zobacz THotPDF.CreatePreflightMRR, THotPDF.ValidatePDFWithPluginBundle, THPDFPreflightPluginDescriptor i THPDFPreflightPluginLimits