Confronto di contratti

HPDFContractCompare confronta il testo semantico e la geometria delle righe di due documenti PDF caricati, allinea i paragrafi e restituisce record verificabili di inserimenti, eliminazioni, sostituzioni e spostamenti

Usa questo helper per la revisione di formulazioni e clausole, e usa THPDFDocComparison per le differenze di pagina, oggetti e rendering

Confronto di contratti caricati

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;

Salvare l'HTML restituito usando UTF-8, e ispezionare Report.Status e Report.Note quando la funzione di confronto restituisce false

Allineamento dei paragrafi e modifiche

Riferimenti di pagina e geometria

PageIndex e ParagraphIndex sono a base zero, mentre CharacterStart è una posizione UTF-16 a base uno all'interno del paragrafo con whitespace normalizzato

Il lato assente di un inserimento o eliminazione di un intero paragrafo ha indici di pagina e paragrafo -1, e un inserimento o eliminazione di token dentro un paragrafo abbinato conserva una posizione a lunghezza zero sul lato opposto

Ogni rettangolo porta il proprio indice di pagina e copre una riga semantica intersecante nello spazio utente PDF, e un paragrafo che attraversa le pagine può avere rettangoli su più pagine

Le posizioni descrivono la copertura della riga invece dei quadrilateri esatti dei caratteri, quindi un PDF annotato può evidenziare la stessa riga per diverse modifiche di parole indipendenti

Escludere gli elementi di pagina ricorrenti e il boilerplate

I predefiniti escludono le righe semantiche corrispondenti che compaiono nei 54 punti superiori o inferiori su almeno due pagine distinte di ogni input, e normalizzano le cifre dei margini così che i numeri di pagina ripetuti possano corrispondere

I documenti before e after vengono filtrati indipendentemente, e le ripetizioni nel corpo restano idonee al confronto indipendentemente da quante volte compaiono

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 rimuove una riga semantica completa per uguaglianza letterale dopo la normalizzazione del whitespace, rispetta IgnoreCase e non interpreta mai espressioni regolari o pattern di sottostringa

Scegliere margini ed esclusioni con attenzione, perché date o altro testo contrattuale dentro una riga di margine ricorrente esclusa vengono omessi dalla revisione del testo

Budget e cancellation

OpzionePredefinitoAmbito
MaxPages500Ogni documento
MaxParagraphs4000Ogni documento dopo le esclusioni
MaxSemanticLines50000Righe semantiche combinate prima di snapshot ed esclusioni
MaxCharacters2000000Testo di riga estratto combinato prima delle esclusioni
MaxTokens200000Token di parole combinati e, in modalità sentence, token di frase
MaxDifferences10000Record restituiti, spostamenti inclusi
MaxAlignmentCells2000000Matrici di token cumulative dei paragrafi modificati
MaxWorkUnits50000000Contabilità dell'estrazione e lavoro di allineamento

Un limite di budget restituisce ccsBudgetExceeded, e la cancellation restituisce ccsCancelled, con segnalazioni parziali conservate per la diagnosi e marcate incomplete nell'HTML

La cancellation viene verificata tra le estrazioni di pagina e lungo tutti i loop di allineamento della libreria, mentre l'estrattore semantico a pagina singola sottostante resta sincrono

ccsInvalidInput segnala documenti mancanti, ordinali di enum non validi o opzioni non valide, e ccsExtractionFailed segnala pagine senza testo estraibile o estrazione semantica fallita

OCR o rimozione esplicita delle pagine vuote è richiesta prima di confrontare pagine senza testo estraibile, e ccsComplete certifica solo il completamento di questo confronto testuale

Artefatti di revisione

HPDFContractReviewHTML restituisce un documento standalone con titolo escaped, messaggi, testo, contesti completi di paragrafo, tipi di modifica ed entrambe le posizioni sorgente, con un limite di output predefinito di 8388608 caratteri UTF-16

L'exporter HTML solleva EHPDFContractCompareBudget quando il proprio output supera il limite configurato, e il suo cancellation token solleva EHPDFOperationCancelled

HPDFSaveContractAnnotatedPDF richiede un report completato, carica un documento sorgente separato e verifica ogni snapshot semantico di pagina inclusa la sua geometria esatta delle righe prima di aggiungere evidenziazioni con commenti di revisione numerati

Specificare percorsi sorgente e output distinti, selezionare ccsBefore o ccsAfter, ed esportare entrambe le versioni quando serve revisionare insieme eliminazioni e inserimenti di interi paragrafi

Su Windows, le identità dei file sorgente e output vengono verificate per respingere hard link o altri alias del file sorgente

L'exporter PDF disattiva AutoLaunch, lascia invariati i documenti di input e il file sorgente, e verifica la cancellation prima del caricamento, tra pagine e modifiche e prima del salvataggio

Questo helper confronta il testo estratto e i riferimenti di layout senza dedurre significato legale, riconoscere testo scansionato o certificare l'effetto legale di una revisione

API correlate

HPDFCompareContracts · THPDFContractCompareOptions · THPDFContractCompareReport · HPDFContractReviewHTML · HPDFSaveContractAnnotatedPDF