プリフライトプラグインと XML MRR
pfXML は、組み込みチェック、警告、ヒント、安定したルール ID、仕様参照、オブジェクト、ページ、またはバイト位置を、バージョン付き urn:hotpdf:preflight:mrr:1 語彙にシリアライズします
CreatePreflightMRR は、機能抽出とカスタム検証ルールのための信頼されたインプロセスプラグインを追加し、ValidatePDFWithPluginBundle はそれらのルールを既存の THPDFValidationPolicy と組み合わせます
境界付きプラグインの登録
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);
決定性と信頼境界
HotPDF は一意の ASCII プラグイン ID と ABI バージョン 1 を検証し、安定した ID 順でプラグインを実行し、返された機能と所見をソートし、レポートからタイミングジッタを省略し、XML 値をエスケープし、未宣言の機能または無効なルール ID を拒否します
上限は、プラグイン数、機能数、所見数、集約文字列バイト、XML 出力バイト、プラグインごとの経過時間、合計経過時間を制限します。拒否されたプラグインは決定的な実行所見に寄与し、共有の機能、所見、文字列予算を消費しません
プラグインは呼び出し側プロセス内で実行され、ソースパス、パスワード、ベーステキストレポート、ポリシー名、上限、キャンセルトークンを受け取るため、信頼されたプラグインコードのみを登録する必要があります
インプロセスコールバックは安全にプリエンプトできないため、経過時間上限はイバリューエーターが戻った後にチェックされます。長時間実行されるイバリューエーターは Context.CancellationToken をポーリングし、迅速に戻る必要があります
THotPDF.CreatePreflightMRR、THotPDF.ValidatePDFWithPluginBundle、THPDFPreflightPluginDescriptor、THPDFPreflightPluginLimits を参照してください