Preflight Plugin'leri ve XML MRR

pfXML, yerleşik kontrolleri, uyarıları, ipuçlarını, kararlı rule ID'leri, şartname referanslarını ve object, sayfa veya byte konumlarını sürümlü urn:hotpdf:preflight:mrr:1 vocabulary'süne serileştirir

CreatePreflightMRR, feature extraction ve custom doğrulama kuralları için güvenilen in-process plugin'leri ekler; ValidatePDFWithPluginBundle ise bu kuralları mevcut bir THPDFValidationPolicy ile birleştirir

Sınırlı bir plugin kaydetme

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 ve güven sınırı

HotPDF, benzersiz ASCII plugin ID'lerini ve ABI version 1'i doğrular, plugin'leri kararlı ID sırasıyla yürütür, döndürülen feature ve bulguları sıralar, rapordan zamanlama titremesini çıkarır, XML değerlerini escape eder ve beyan edilmemiş yetenekleri veya geçersiz rule ID'leri reddeder

Limitler; plugin sayısını, feature sayısını, bulgu sayısını, toplu string baytlarını, XML çıktı baytlarını, plugin başına geçen süreyi ve toplam geçen süreyi sınırlar. Reddedilen bir plugin deterministik bir yürütme bulgusu katkılar ve paylaşılan feature, bulgu veya string bütçelerini tüketmez

Plugin'ler çağıranın process'i içinde çalışır ve kaynak yolunu, parolayı, temel metin raporunu, policy adını, limitleri ve iptal token'ını alır; bu yüzden yalnızca güvenilen plugin kodu kaydedilmelidir

Geçen süre limitleri, evaluator döndükten sonra denetlenir; çünkü in-process bir callback güvenle öncelendirilemez. Uzun süren evaluator'lar Context.CancellationToken'ı yoklamalı ve hemen dönmelidir

THotPDF.CreatePreflightMRR, THotPDF.ValidatePDFWithPluginBundle, THPDFPreflightPluginDescriptor ve THPDFPreflightPluginLimits sayfalarına bakın