契約書比較

HPDFContractCompare は、ロード済み 2 つの PDF ドキュメントのセマンティックテキストと行ジオメトリを比較し、段落を整列させ、監査可能な挿入・削除・置換・移動の各レコードを返します

文言と条項のレビューにはこのヘルパーを使い、ページ、オブジェクト、レンダリング結果の差分には THPDFDocComparison を使います

ロード済み契約書の比較

uses HPDFDoc, HPDFTypes, HPDFContractCompare;

Options := HPDFDefaultContractCompareOptions;
Options.Granularity := ccgWord;
BeforePDF.LoadFromFile('contract-before.pdf');
AfterPDF.LoadFromFile('contract-after.pdf');
if HPDFCompareContracts(BeforePDF, AfterPDF, Options, Report, Token) then
begin
  HTML := HPDFContractReviewHTML(Report, 'Services agreement review',
    8388608, Token);
  HPDFSaveContractAnnotatedPDF('contract-before.pdf',
    'contract-before-review.pdf', Report, ccsBefore, Token);
  HPDFSaveContractAnnotatedPDF('contract-after.pdf',
    'contract-after-review.pdf', Report, ccsAfter, Token);
end;

返された HTML は UTF-8 で保存し、比較関数が false を返したときは Report.Status と Report.Note を確認します

段落の整列と変更

ページとジオメトリの参照

PageIndex と ParagraphIndex は 0 起点で、CharacterStart は空白正規化済み段落内の 1 起点の UTF-16 位置です

段落全体の挿入や削除で存在しない側のページと段落のインデックスは -1 になり、マッチした段落内のトークン挿入や削除は反対側に長さゼロの位置を保ちます

各矩形は自身のページインデックスを運び、PDF ユーザー空間で交差するセマンティック行 1 行を覆います。ページをまたぐ段落は複数のページに矩形を持てます

位置情報は正確な文字の四角形ではなく行の被覆を表すので、注釈付き PDF では独立した複数の単語変更に対して同じ行がハイライトされることがあります

繰り返し現れるページ装飾と定型文の除外

デフォルトでは、各入力の 2 つ以上の異なるページで上端または下端 54 ポイント内に現れる一致するセマンティック行を除外し、繰り返されるページ番号が一致できるようマージンの数字を正規化します

before と after の各ドキュメントは独立してフィルタリングされ、本文の繰り返しは何度現れても比較対象のままです

Options.IgnoreRepeatedHeadersFooters := False;
Options.NormalizeMarginDigits := False;
Options.HeaderMarginPoints := 40;
Options.FooterMarginPoints := 35;
SetLength(Options.ExcludedLineTexts, 1);
Options.ExcludedLineTexts[0] :=
  'The parties shall maintain an accurate register of approved subcontractors.';

ExcludedLineTexts は空白正規化後のリテラル一致でセマンティック行 1 行を丸ごと取り除き、IgnoreCase を尊重し、正規表現や部分文字列パターンは一切解釈しません

マージンと除外は意図的に選んでください。除外された繰り返しマージン行の中にある日付などの契約文は、文言レビューから漏れます

予算とキャンセル

オプションデフォルト対象
MaxPages500各ドキュメント
MaxParagraphs4000除外後の各ドキュメント
MaxSemanticLines50000スナップショットと除外の前の結合セマンティック行
MaxCharacters2000000除外前の抽出済み行テキストの合計
MaxTokens200000単語トークンの合計、文モードではさらに文トークンの合計
MaxDifferences10000返されるレコード数(移動を含む)
MaxAlignmentCells2000000変更段落トークン行列の累積
MaxWorkUnits50000000抽出の計上と整列の作業量

予算上限に達すると ccsBudgetExceeded、キャンセルされると ccsCancelled が返され、診断用に部分的な結果が保持され、HTML では未完了として印が付きます

キャンセルはページ抽出の合間と、ライブラリ所有の整列ループ全体でチェックされます。基盤の単一ページセマンティック抽出器は同期のままです

ccsInvalidInput はドキュメントの欠落、無効な列挙序数、無効なオプションを報告し、ccsExtractionFailed は抽出可能なテキストがないページやセマンティック抽出の失敗を報告します

抽出可能なテキストのないページを比較する前には OCR または明示的な空白ページ除去が必要で、ccsComplete が保証するのはこのテキスト比較の完了だけです

レビュー成果物

HPDFContractReviewHTML は、エスケープされたタイトル、メッセージ、テキスト、段落全体のコンテキスト、変更種別、両側のソース位置を含む自己完結ドキュメントを返し、既定の出力上限は 8388608 UTF-16 文字です

HTML エクスポーターは設定した上限を超えると EHPDFContractCompareBudget を送出し、そのキャンセルトークンは EHPDFOperationCancelled を送出します

HPDFSaveContractAnnotatedPDF は完了したレポートを要求し、別途ロードしたソースドキュメントを使い、番号付きレビューコメントのハイライトを追加する前に、正確な行ジオメトリを含むすべてのセマンティックページスナップショットを検査します

ソースと出力のパスは別々に指定し、ccsBefore か ccsAfter を選択します。段落全体の削除と挿入を併せてレビューするときは両方のバージョンをエクスポートします

Windows ではソースと出力ファイルの同一性が検査され、ハードリンクなどのソースファイルのエイリアスは拒否されます

PDF エクスポーターは AutoLaunch を無効化し、入力ドキュメントとソースファイルを変更せず、ロード前、ページ間と変更間、保存前にキャンセルをチェックします

このヘルパーは抽出された文言とレイアウト参照を比較するものであり、法的意味の推測、スキャンテキストの認識、改訂の法的効力の証明は行いません

関連 API

HPDFCompareContracts · THPDFContractCompareOptions · THPDFContractCompareReport · HPDFContractReviewHTML · HPDFSaveContractAnnotatedPDF