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 registros auditables de inserción, borrado, reemplazo y movimiento

Use este helper para revisar la redacción y las cláusulas, y use THPDFDocComparison para las diferencias de páginas, objetos y renderizado

Compare 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;

Guarde el HTML devuelto como UTF-8 y consulte 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 geometría

PageIndex y ParagraphIndex son índices basados en cero, mientras que CharacterStart es una posición UTF-16 basada en uno dentro del párrafo normalizado de espacios en blanco

El lado ausente de una inserción o borrado de un párrafo completo tiene índices de página y de párrafo de -1, y una inserción o borrado 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 PDF, y un párrafo que abarque varias páginas puede tener rectángulos en varias de ellas

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

Excluir elementos recurrentes de página y boilerplate

Los valores por defecto 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 anterior y posterior 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 tras la normalización de espacios en blanco, respeta IgnoreCase y nunca interpreta expresiones regulares ni patrones de subcadenas

Elija márgenes y exclusiones con deliberación, 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ónValor por defectoÁmbito
MaxPages500Cada documento
MaxParagraphs4000Cada documento tras las exclusiones
MaxSemanticLines50000Líneas semánticas combinadas antes de instantáneas y exclusiones
MaxCharacters2000000Texto combinado de las líneas extraídas antes de exclusiones
MaxTokens200000Tokens combinados de palabras y, en modo por frase, de frases
MaxDifferences10000Registros devueltos, incluidos los movimientos
MaxAlignmentCells2000000Matrices acumuladas de tokens 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 hallazgos parciales retenidos para diagnóstico y marcados como incompletos en el HTML

La cancelación se comprueba entre extracciones de página y a lo largo de los bucles de alineación de la biblioteca, mientras que el extractor semántico subyacente de una sola página permanece síncrono

ccsInvalidInput informa de documentos ausentes, ordinales de enum no válidos u opciones no válidas, y ccsExtractionFailed informa de 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 solo la finalización de esta comparación de texto

Artefactos de revisión

HPDFContractReviewHTML devuelve un documento independiente con título, mensajes, texto, contextos completos de párrafo, tipos de cambio y ambas ubicaciones de origen escapados, 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 informe completado, carga un documento de origen separado y comprueba cada instantánea semántica de página, incluida su geometría exacta de líneas, antes de añadir resaltados con comentarios de revisión numerados

Especifique rutas de origen y de salida distintas, seleccione ccsBefore o ccsAfter, y exporte ambas versiones cuando necesite revisar juntos los borrados y las inserciones de párrafos completos

En Windows se comprueba la identidad 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 comprueba 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 significado legal, reconocer texto escaneado ni certificar el efecto legal de una revisión

APIs relacionadas

HPDFCompareContracts · THPDFContractCompareOptions · THPDFContractCompareReport · HPDFContractReviewHTML · HPDFSaveContractAnnotatedPDF