계약서 비교

HPDFContractCompare는 로드된 두 PDF 문서의 시맨틱 텍스트와 라인 지오메트리를 비교하고, 문단을 맞추고, 감사 가능한 insert·delete·replace·move 레코드를 반환합니다

문구·조항 검토에는 이 헬퍼를 쓰고, 페이지·객체·렌더링 차이에는 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 위치입니다

문단 전체 insert·delete에서 없는 쪽은 페이지·문단 인덱스가 -1이고, 짝 문단 안의 token insert·delete는 반대쪽에 길이 0 위치를 유지합니다

각 사각형은 자신의 페이지 인덱스를 가지며 PDF user space에서 교차하는 시맨틱 라인을 덮습니다. 페이지에 걸친 문단은 여러 페이지에 사각형을 가질 수 있습니다

위치는 정확한 문자 사변형이 아니라 라인 커버리지로 기술되므로, 주석 PDF는 서로 다른 단어 변경 여럿에 같은 라인을 하이라이트할 수 있습니다

반복되는 페이지 머리글·바닥글과 상용구 제외

기본값은 각 입력의 서로 다른 최소 두 페이지에서 위·아래 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는 공백 정규화 뒤 리터럴 일치로 시맨틱 라인 전체를 제거하고, IgnoreCase를 존중하며, 정규식이나 부분 문자열 패턴은 절대 해석하지 않습니다

여백과 제외 항목은 신중히 고르세요. 제외된 반복 여백 라인 안의 날짜나 다른 계약 텍스트는 문구 검토에서 빠집니다

한도와 취소

옵션기본값범위
MaxPages500문서마다
MaxParagraphs4000제외를 적용한 뒤 문서마다
MaxSemanticLines50000스냅샷·제외 이전의 결합 시맨틱 라인
MaxCharacters2000000제외 이전의 결합 추출 라인 텍스트
MaxTokens200000결합 단어 token, 문장 모드에서는 문장 token까지
MaxDifferences10000반환 레코드, move 포함
MaxAlignmentCells2000000누적 changed-paragraph token 행렬
MaxWorkUnits50000000추출 정산과 alignment 작업

한도 초과는 ccsBudgetExceeded, 취소는 ccsCancelled를 반환하고, 부분 결과는 진단용으로 남고 HTML에서는 미완성으로 표시됩니다

취소는 페이지 추출 사이와 라이브러리 소유 alignment 루프 전체에서 검사하고, 바탕에 있는 단일 페이지 시맨틱 extractor는 동기 방식 그대로입니다

ccsInvalidInput은 없는 문서, 잘못된 enum ordinal, 잘못된 옵션을 보고하고, ccsExtractionFailed는 추출 가능한 텍스트가 없는 페이지나 실패한 시맨틱 추출을 보고합니다

추출 가능한 텍스트가 없는 페이지를 비교하려면 먼저 OCR이나 명시적인 빈 페이지 제거가 필요합니다. ccsComplete는 이 텍스트 비교의 완료만 보증합니다

검토 산출물

HPDFContractReviewHTML은 이스케이프된 제목, 메시지, 텍스트, 문단 전체 context, 변경 종류, 양쪽 소스 위치를 담은 독립 문서를 반환하고, 출력 한도는 기본 8388608 UTF-16 문자입니다

HTML exporter는 출력이 설정 한도를 넘으면 EHPDFContractCompareBudget을 던지고, cancellation token은 EHPDFOperationCancelled를 던집니다

HPDFSaveContractAnnotatedPDF는 완료된 보고서를 요구하고, 별도의 소스 문서를 로드하며, 번호 붙은 검토 코멘트와 하이라이트를 넣기 전에 정확한 라인 지오메트리까지 모든 시맨틱 페이지 스냅샷을 검사합니다

소스와 출력 경로는 서로 다르게 지정하고 ccsBefore나 ccsAfter를 고르세요. 문단 전체 delete와 insert를 함께 검토하려면 두 버전을 모두 내보내면 됩니다

Windows에서는 소스·출력 파일 identity를 검사해 소스 파일의 하드 링크나 다른 별칭을 거부합니다

PDF exporter는 AutoLaunch를 끄고 입력 문서와 소스 파일을 그대로 두며, 로드 전, 페이지·변경 사이, 저장 전에 취소를 검사합니다

이 헬퍼는 추출된 문구와 레이아웃 참조를 비교할 뿐, 법적 의미를 추론하거나 스캔 텍스트를 인식하거나 개정의 법적 효력을 보증하지 않습니다

관련 API

HPDFCompareContracts · THPDFContractCompareOptions · THPDFContractCompareReport · HPDFContractReviewHTML · HPDFSaveContractAnnotatedPDF