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
- Las líneas semánticas se agrupan usando límites de página, columna, lista o encabezado y separaciones de baseline configurables, con los espacios en blanco normalizados entre líneas
- Los párrafos exactos se emparejan primero, y las cláusulas de cuerpo idénticas repetidas conservan el orden de aparición y la multiplicidad
- Los párrafos modificados se emparejan mediante una puntuación configurable de similitud de palabras de multiconjunto, independiente de la granularidad de diferencias elegida
- Una subsecuencia creciente máxima de párrafos emparejados identifica reordenaciones sin informar como movimientos los desplazamientos ordinarios de índices causados por inserciones y borrados
- Los párrafos emparejados con cambios usan una alineación de tokens acotada para devolver registros de inserción, borrado o reemplazo con ambos contextos completos de párrafo
- El modo por palabras separa la puntuación de las palabras, y el modo por frase usa punto, signo de exclamación o signo de interrogación finales seguidos de un espacio en blanco o del final del párrafo
- Los límites de frase son léxicos y pueden partir abreviaturas o etiquetas numeradas de cláusulas, así que el modo por palabras es el valor por defecto para una revisión legal precisa de la redacción
JoinPageContinuationsune de forma conservadora un párrafo sin terminar cerca del final de una página con un párrafo plano cerca del principio de la página siguiente, y los llamadores pueden deshabilitar esta heurística de layout
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ón | Valor por defecto | Ámbito |
|---|---|---|
MaxPages | 500 | Cada documento |
MaxParagraphs | 4000 | Cada documento tras las exclusiones |
MaxSemanticLines | 50000 | Líneas semánticas combinadas antes de instantáneas y exclusiones |
MaxCharacters | 2000000 | Texto combinado de las líneas extraídas antes de exclusiones |
MaxTokens | 200000 | Tokens combinados de palabras y, en modo por frase, de frases |
MaxDifferences | 10000 | Registros devueltos, incluidos los movimientos |
MaxAlignmentCells | 2000000 | Matrices acumuladas de tokens de párrafos modificados |
MaxWorkUnits | 50000000 | Contabilidad 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