プリフライトプラグインと 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 を参照してください