Comparación de contratos

HPDFContractCompare compara el texto semántico y la geometría de líneas de dos documentos PDF cargados, alinea párrafos y devuelve records auditables de inserción, eliminación, reemplazo y movimiento

Usen este helper para revisar redacción y cláusulas, y usen THPDFDocComparison para diferencias de página, de objetos y de render

Comparar contratos cargados

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;

Guarden el HTML devuelto usando UTF-8, e inspeccionen Report.Status y Report.Note cuando la función de comparación devuelva false

Alineación de párrafos y cambios

Referencias de página y de geometría

PageIndex y ParagraphIndex son de base cero, mientras que CharacterStart es una posición UTF-16 de base uno dentro del párrafo con espacios en blanco normalizados

El lado ausente de una inserción o eliminación de un párrafo completo tiene índices de página y de párrafo en -1, y una inserción o eliminación de token dentro de un párrafo emparejado conserva una posición de longitud cero en el lado opuesto

Cada rectángulo lleva su propio índice de página y cubre una línea semántica que se interseca en el espacio de usuario del PDF, y un párrafo que abarca varias páginas puede tener rectángulos en varias páginas

Las ubicaciones describen la cobertura de la línea en lugar de cuadriláteros exactos de caracteres, así que un PDF anotado puede resaltar la misma línea para varios cambios de palabras independientes

Excluir elementos recurrentes de página y boilerplate

Los valores predeterminados excluyen las líneas semánticas coincidentes que aparecen en los 54 puntos superiores o inferiores de al menos dos páginas distintas de cada entrada, y normalizan los dígitos de los márgenes para que los números de página repetidos puedan coincidir

Los documentos de antes y de después se filtran de forma independiente, y las repeticiones del cuerpo siguen siendo elegibles para comparación sin importar cuántas veces aparezcan

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 elimina una línea semántica completa por igualdad literal después de la normalización de espacios en blanco, respeta IgnoreCase y nunca interpreta expresiones regulares ni patrones de subcadenas

Elijan márgenes y exclusiones con criterio, porque las fechas u otro texto contractual dentro de una línea de margen recurrente excluida se omiten de la revisión de redacción

Presupuestos y cancelación

OpciónPredeterminadoAlcance
MaxPages500Cada documento
MaxParagraphs4000Cada documento después de las exclusiones
MaxSemanticLines50000Líneas semánticas combinadas antes de snapshots y exclusiones
MaxCharacters2000000Texto de líneas extraído combinado antes de las exclusiones
MaxTokens200000Tokens de palabras combinados y, en modo por oraciones, tokens de oraciones
MaxDifferences10000Records devueltos, incluidos los moves
MaxAlignmentCells2000000Matrices de tokens acumuladas de párrafos modificados
MaxWorkUnits50000000Contabilidad de extracción y trabajo de alineación

Un límite de presupuesto devuelve ccsBudgetExceeded y la cancelación devuelve ccsCancelled, con findings parciales retenidos para diagnóstico y marcados como incompletos en el HTML

La cancelación se verifica entre extracciones de páginas y a lo largo de los loops de alineación propios de la librería, mientras que el extractor semántico de una sola página subyacente permanece sincrónico

ccsInvalidInput reporta documentos ausentes, ordinales de enum inválidos u opciones inválidas, y ccsExtractionFailed reporta páginas sin texto extraíble o con extracción semántica fallida

Se requiere OCR o eliminación explícita de páginas en blanco antes de comparar páginas sin texto extraíble, y ccsComplete certifica únicamente la finalización de esta comparación de texto

Artefactos de revisión

HPDFContractReviewHTML devuelve un documento standalone con título escapado, mensajes, texto, contextos completos de párrafo, tipos de cambio y ambas ubicaciones de origen, con un límite de salida de 8388608 caracteres UTF-16 por defecto

El exportador HTML lanza EHPDFContractCompareBudget cuando su salida excede el límite configurado, y su token de cancelación lanza EHPDFOperationCancelled

HPDFSaveContractAnnotatedPDF exige un reporte completado, carga un documento de origen separado y verifica cada snapshot de página semántica, incluida su geometría exacta de líneas, antes de agregar resaltados con comentarios de revisión numerados

Especifiquen rutas de origen y de salida distintas, seleccionen ccsBefore o ccsAfter y exporten ambas versiones cuando necesiten revisar eliminaciones e inserciones de párrafos completas juntas

En Windows, se verifican las identidades de los archivos de origen y de salida para rechazar hard links u otros alias del archivo de origen

El exportador PDF deshabilita AutoLaunch, deja los documentos de entrada y el archivo de origen sin cambios, y verifica la cancelación antes de cargar, entre páginas y cambios, y antes de guardar

Este helper compara la redacción extraída y las referencias de layout sin inferir el significado legal, sin reconocer texto escaneado y sin certificar el efecto legal de una revisión

APIs relacionadas

HPDFCompareContracts · THPDFContractCompareOptions · THPDFContractCompareReport · HPDFContractReviewHTML · HPDFSaveContractAnnotatedPDF