Comparação de contratos
HPDFContractCompare compara o texto semântico e a geometria de linhas de dois documentos PDF carregados, alinha parágrafos e retorna registros auditáveis de inserção, exclusão, substituição e movimentação
Use este helper para revisão de redação e cláusulas, e use THPDFDocComparison para diferenças de página, objeto e renderização
Compare contratos carregados
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;
Salve o HTML retornado usando UTF-8 e inspecione Report.Status e Report.Note quando a função de comparação retornar false
Alinhamento de parágrafos e alterações
- Linhas semânticas são agrupadas usando fronteiras de página, coluna, lista ou título, além de lacunas de baseline configuráveis, com espaços em branco normalizados entre as linhas
- Parágrafos exatos são pareados primeiro, e cláusulas de corpo idênticas repetidas mantêm a ordem de ocorrência e a multiplicidade
- Parágrafos alterados são pareados por uma pontuação configurável de similaridade de palavras em multiset, independente da granularidade de diferença escolhida
- Uma maior subsequência crescente de parágrafos pareados identifica reordenação sem reportar deslocamentos comuns de índice causados por inserções e exclusões como movimentações
- Parágrafos pareados com alterações usam um alinhamento de tokens limitado para retornar registros de inserção, exclusão ou substituição com ambos os contextos completos de parágrafo
- O modo palavra separa a pontuação das palavras, e o modo frase usa ponto final, exclamação ou interrogação seguidos de espaço em branco ou do fim do parágrafo
- As fronteiras de frase são lexicais e podem dividir abreviações ou rótulos numerados de cláusulas, então o modo palavra é o padrão para revisão precisa de redação jurídica
- O
JoinPageContinuationsjunta de forma conservadora um parágrafo inacabado perto do fim de uma página a um parágrafo simples perto do topo da página seguinte, e o chamador pode desativar essa heurística de layout
Referências de página e geometria
O PageIndex e o ParagraphIndex são baseados em zero, enquanto o CharacterStart é uma posição UTF-16 baseada em um dentro do parágrafo com espaços em branco normalizados
Um lado ausente de uma inserção ou exclusão de parágrafo inteiro tem índices de página e parágrafo -1, e uma inserção ou exclusão de token dentro de um parágrafo pareado mantém uma posição de comprimento zero no lado oposto
Cada retângulo carrega seu próprio índice de página e cobre uma linha semântica que intersecta no espaço de usuário do PDF, e um parágrafo que atravessa páginas pode ter retângulos em várias páginas
As localizações descrevem cobertura de linha em vez de quadriláteros exatos de caracteres, então um PDF anotado pode destacar a mesma linha para várias alterações independentes de palavras
Excluir elementos recorrentes de página e boilerplate
Os padrões excluem linhas semânticas correspondentes que aparecem nos 54 pontos superiores ou inferiores em pelo menos duas páginas distintas de cada entrada, e normalizam os dígitos de margem para que números de página repetidos possam coincidir
Os documentos de antes e depois são filtrados de forma independente, e repetições no corpo permanecem elegíveis para comparação independentemente de quantas vezes ocorram
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.';
O ExcludedLineTexts remove uma linha semântica completa por igualdade literal depois da normalização de espaços em branco, respeita o IgnoreCase e nunca interpreta expressões regulares ou padrões de substring
Escolha margens e exclusões com critério, porque datas ou outro texto contratual dentro de uma linha recorrente de margem excluída ficam de fora da revisão de redação
Orçamentos e cancelamento
| Opção | Padrão | Escopo |
|---|---|---|
MaxPages | 500 | Cada documento |
MaxParagraphs | 4000 | Cada documento depois das exclusões |
MaxSemanticLines | 50000 | Linhas semânticas combinadas antes de snapshots e exclusões |
MaxCharacters | 2000000 | Texto de linha extraído combinado antes das exclusões |
MaxTokens | 200000 | Tokens combinados de palavras e, no modo frase, de frases |
MaxDifferences | 10000 | Registros retornados, incluindo movimentações |
MaxAlignmentCells | 2000000 | Matrizes de tokens cumulativas de parágrafos alterados |
MaxWorkUnits | 50000000 | Contabilidade de extração e trabalho de alinhamento |
Um limite de orçamento retorna ccsBudgetExceeded, e o cancelamento retorna ccsCancelled, com achados parciais retidos para diagnóstico e marcados como incompletos no HTML
O cancelamento é verificado entre extrações de página e ao longo de todos os loops de alinhamento da biblioteca, enquanto o extrator semântico de página única subjacente permanece síncrono
O ccsInvalidInput reporta documentos ausentes, ordinais de enum inválidos ou opções inválidas, e o ccsExtractionFailed reporta páginas sem texto extraível ou com falha de extração semântica
OCR ou remoção explícita de páginas em branco é necessário antes de comparar páginas sem texto extraível, e o ccsComplete certifica apenas a conclusão desta comparação de texto
Artefatos de revisão
O HPDFContractReviewHTML retorna um documento standalone com título, mensagens, texto, contextos completos de parágrafo, tipos de alteração e ambas as localizações de origem devidamente escapados, com limite de saída de 8388608 caracteres UTF-16 por padrão
O exportador HTML lança EHPDFContractCompareBudget quando a saída excede o limite configurado, e o token de cancelamento dele lança EHPDFOperationCancelled
O HPDFSaveContractAnnotatedPDF exige um relatório concluído, carrega um documento de origem separado e verifica cada snapshot de página semântica, incluindo a geometria exata de linhas, antes de adicionar destaques com comentários de revisão numerados
Especifique caminhos distintos de origem e saída, selecione ccsBefore ou ccsAfter e exporte as duas versões quando precisar revisar exclusões e inserções de parágrafo inteiro juntas
No Windows, as identidades dos arquivos de origem e saída são verificadas para rejeitar hard links ou outros apelidos do arquivo de origem
O exportador PDF desativa o AutoLaunch, deixa os documentos de entrada e o arquivo de origem inalterados e verifica o cancelamento antes do carregamento, entre páginas e alterações e antes de salvar
Este helper compara a redação extraída e as referências de layout sem inferir significado jurídico, reconhecer texto digitalizado ou certificar o efeito legal de uma revisão
APIs relacionadas
HPDFCompareContracts · THPDFContractCompareOptions · THPDFContractCompareReport · HPDFContractReviewHTML · HPDFSaveContractAnnotatedPDF