合約比較

HPDFContractCompare 比較兩份已載入 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 使用者空間中一條相交的語意行;跨頁段落可能在多個頁面上都有矩形

位置描述的是行涵蓋範圍,而非精確的字元四邊形,因此帶註解的 PDF 可能為幾個獨立的字詞變更高亮同一行

排除反覆出現的頁面固定元素與樣板文字

預設會排除在每份輸入至少兩個不同頁面的頂部或底部 54 點內出現的相符語意行,並將邊界數字正規化,讓重複的頁碼可以互相匹配

前後兩份文件各自獨立過濾,本文中的重複內容無論出現幾次都仍會參與比較

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 在空白正規化後以字面相等移除整條語意行,遵守 IgnoreCase,絕不會解讀正規表示式或子字串模式

邊界與排除條件請審慎設定,因為被排除的反覆邊界行裡若夾帶日期或其他合約文字,就不會進入用詞審閱

預算與取消

選項預設範圍
MaxPages500每份文件
MaxParagraphs4000每份文件排除後
MaxSemanticLines50000快照與排除之前的合計語意行
MaxCharacters2000000排除之前的合計擷取行文字
MaxTokens200000合計字詞符記,句子模式下另含句子符記
MaxDifferences10000傳回的記錄數,含移動
MaxAlignmentCells2000000變更段落符記矩陣的累計值
MaxWorkUnits50000000擷取計量與對齊工作

觸及預算上限時傳回 ccsBudgetExceeded,取消時傳回 ccsCancelled;部分發現會保留供診斷,並在 HTML 中標記為不完整

取消權杖會在每次頁面擷取之間以及程式庫自有的對齊迴圈全程檢查,底層的單頁語意擷取器則維持同步

ccsInvalidInput 回報文件遺漏、非法的 enum 序數或無效選項;ccsExtractionFailed 回報沒有可擷取文字或語意擷取失敗的頁面

要比較沒有可擷取文字的頁面,必須先做 OCR 或明確移除空白頁;ccsComplete 只證明這次文字比較本身已完成

審閱產出物

HPDFContractReviewHTML 傳回獨立的 HTML 文件,含跳脫後的標題、訊息、文字、完整段落上下文、變更類型與兩側來源位置,輸出上限預設為 8388608 個 UTF-16 字元

HTML 匯出器在輸出超過設定上限時拋出 EHPDFContractCompareBudget,其取消權杖被觸發時拋出 EHPDFOperationCancelled

HPDFSaveContractAnnotatedPDF 要求報告已完成,會另外載入來源文件,並在加入帶編號審閱意見的高亮之前,逐頁核對語意頁面快照與精確的行幾何

來源與輸出路徑必須不同,並選擇 ccsBefore 或 ccsAfter;需要同時審閱整段刪除與整段插入時,兩個版本都請匯出

在 Windows 上會檢查來源與輸出檔案身分,拒絕硬連結或其他來源檔案別名

PDF 匯出器會停用 AutoLaunch、不更動輸入文件與來源檔案,並在載入前、頁面與變更之間以及儲存前檢查取消

這個輔助函式只比較擷取出的用詞與版面參照,不推論法律意義、不辨識掃描文字,也不為任何修訂的法律效力背書

相關 API

HPDFCompareContracts · THPDFContractCompareOptions · THPDFContractCompareReport · HPDFContractReviewHTML · HPDFSaveContractAnnotatedPDF