JSON / C ABI 文書比較
読み込み済み 2 ドキュメントの比較は THPDFJobProcessor.ExecuteLoadedOperationWithComparison、C ABI ハンドル 2 つの比較は hpdf_document_compare_json_v1、2 ファイルの比較は JSON ジョブプロセッサーで行います
汎用モード
type=compare は mode として pageCount、pageText、objectCount、renderedImage、full、structural を受け付けます。デフォルトは structural です
各モードはページ整列や構造オブジェクトシグネチャーを含むネイティブ THPDFDocComparison の挙動を維持します。objectCount はページ / オブジェクト構造も比較します
{
"schemaVersion": 1,
"type": "compare",
"mode": "full",
"render": {"dpi": 72, "colorSpace": "rgb", "colorTolerance": 8},
"options": {"maxDifferences": 1000, "maxStreamBytes": 1048576},
"budget": {"memoryBytes": 268435456, "resultBytes": 16777216,
"outputBytes": 67108864, "timeMilliseconds": 60000, "pixels": 10000000}
}
結果エンベロープには comparison、comparisonComplete、identical、documentUpdated=false、経過時間、出力サイズが含まれます。省略可能なバイナリー出力はエンベロープなしの比較 JSON を含みます
走査・ストリーム・値・保持差分・レンダリングの各上限は、検査したサブセットが等しくても status=incomplete、comparisonComplete=false、identical=false を返します
コントラクトレビュー
type=compare.contract は段落を整列し、移動を検出し、前後のコンテキストと位置つきで単語 / 文の挿入・削除・置換を報告します
{
"schemaVersion": 1,
"type": "compare.contract",
"format": "pdf",
"side": "after",
"options": {"granularity": "word", "ignoreRepeatedHeadersFooters": true,
"excludedLineTexts": ["CONFIDENTIAL COPY"], "maxWorkUnits": 50000000}
}
format は json、html、pdf を受け付けます。JSON がデフォルトで、HTML / PDF には出力ストリームまたはコールバックが必要です
変更種別は insert、delete、replace、move です。ページ / 段落インデックスは 0 始まり、文字開始位置は 1 始まり UTF-16 位置で、矩形は正確なグリフ四辺形ではなく PDF ユーザー空間のセマンティック行をカバーします
PDF は side=before または side=after を選び、選択されたドキュメントをすべてのセマンティックページスナップショットに対して検証し、ハイライトと Before / After コメントを追加し、レビューコピーを保存し、常にソースグラフトランザクションをロールバックします
レビュー PDF はフルリライトであり、別途署名検証が必要です。比較は借用ソースドキュメントとその署名を変更しません
オプションと境界
汎用の options は maxObjects、maxEdges、maxPages、maxDepth、maxDifferences、maxStreamBytes、maxTotalStreamBytes、maxValueBytes、maxPathBytes を受け付けます
レンダリングは dpi、colorSpace(rgb または luminance)、colorTolerance、minimumSimilarity、maxChangedPixelRatio、tileSize、maxChangedRegions を受け付けます。コールバック操作はヒートマップをファイルシステムに書きません
コントラクトの options は THPDFContractCompareOptions のブール・マージン・類似度・ボイラープレート・リソースフィールドを camelCase 名で受け付けます。granularity は word または sentence です
共有予算は memoryBytes、outputBytes、resultBytes、timeMilliseconds、pixels、objectCount、pageCount です。オプションはこれらの予算にクランプされます
メモリー予算は両デコードパス、レンダリングピクセル、整列ストレージ、プライベート出力に保守的な許容量を割り当てます。これらはワークロード上限であって OS の RSS 上限ではなく、すでにロード済みのオブジェクトグラフは呼び出し側の所有のままです
JSON 割り当ては保守的なエスケープサイズ推定でチェックされるため、最終的な UTF-8 表現が収まるはずの結果が拒否されえます。HTML は出力バイト予算内で保守的な文字許容量を使います
予算失敗は ABI ステータス 8 を、キャンセルはステータス 4 を返します。キャンセルはページ・オブジェクト・ストリームブロック・レンダリングオブジェクト・ピクセル行・整列境界で協調的に行われます
C ABI エラー制御エンベロープは独立した最大 8 KiB を持ち、詳細を 1,024 UTF-16 コード単位へ切り詰めます。要求された結果予算がエラー応答に足りないときでも予算エラーを報告できます
借用 C ABI ハンドル
各ハンドルをそれぞれの hpdf_io_v1 ソースでロードし、hpdf_document_compare_json_v1(handle_a, handle_b, operation) を呼びます。ABI v1 のレコードレイアウトと元の execute エクスポートは不変です
operation.input_io は NULL でなければならず、result_io は書き込みを提供し、省略可能な output_io が成果物を供給します。JSON のファイルキー input、otherInput、output は拒否されます
両独立ソースは短いランダムアクセス読み取りを返せます。両キャンセルコールバックは、デコード済みオブジェクトがキャッシュされていてもポーリングされます。自己比較には同じハンドルを 2 回渡せます
入力コールバックとそのコンテキストはハンドル寿命とアクティブな呼び出しのあいだ生存させ、各ハンドル上の操作は直列化してください。ハンドル参照は比較が戻るまで保持されます
成果物はコールバック公開前にプライベートな上限付きバッファーで構築・検証されます。公開中に失敗したコールバックはすでに受け入れられたバイトを保持しえますが、ソースドキュメントは不変です
ファイルジョブ
{"operations":[{"type":"compare.contract","input":"before.pdf",
"otherInput":"after.pdf","format":"html","output":"review.html"}]}
password と otherPassword が 2 ファイルを独立に解除します。JSON 出力は出力パスを省略して結果エンベロープに留まれます
出力パスは既存のハードリンクエイリアスを含め両ソースファイルと異ならなければなりません。宛先ディレクトリーの一時ファイルはフラッシュされ、全チェック通過後にアトミックに公開されます。失敗時は既存の出力を保存します