Comparação de contratos
HPDFContractCompare compara o texto semântico e a geometria de linhas de dois documentos PDF carregados, alinha parágrafos e devolve registos auditáveis de inserção, eliminação, substituição e movimentação
Use este auxiliar para revisão de redação e de cláusulas, e use THPDFDocComparison para diferenças de páginas, objetos e renderização
Comparar 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;
Guarde o HTML devolvido usando UTF-8 e inspecione Report.Status e Report.Note quando a função de comparação devolver false
Alinhamento de parágrafos e alterações
- As linhas semânticas são agrupadas usando página, coluna, limites de listas ou de títulos e intervalos de base configuráveis, com espaços em branco normalizados entre linhas
- Parágrafos exatos são emparelhados primeiro, e cláusulas de corpo idênticas repetidas mantêm a ordem de ocorrência e a multiplicidade
- Parágrafos alterados são emparelhados por uma pontuação configurável de similaridade de palavras em multiconjunto, independente da granularidade de diferenças escolhida
- Uma sequência crescente mais longa de parágrafos emparelhados identifica reordenações sem reportar movimentações para deslocações de índice ordinárias causadas por inserções e eliminações
- Parágrafos emparelhados alterados usam um alinhamento de tokens limitado para devolver registos de inserção, eliminaçã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, ponto de exclamação ou ponto de interrogação seguido de espaço em branco ou do fim do parágrafo
- Os limites de frase são lexicais e podem dividir abreviaturas ou etiquetas numeradas de cláusulas, por isso o modo palavra é a predefinição para revisão precisa de redação legal
JoinPageContinuationsjunta de forma conservadora um parágrafo inacabado perto do fundo de uma página a um parágrafo simples perto do topo da página seguinte, e quem chama pode desativar esta heurística de layout
Referências de página e de geometria
PageIndex e ParagraphIndex têm base zero, enquanto CharacterStart é uma posição UTF-16 com base um dentro do parágrafo com espaços em branco normalizados
O lado ausente de uma inserção ou eliminação de parágrafo completo tem índices de página e de parágrafo de -1, e uma inserção ou eliminação de token dentro de um parágrafo emparelhado mantém uma posição de comprimento zero no lado oposto
Cada retângulo transporta o seu próprio índice de página e cobre uma linha semântica interseccionada no espaço de utilizador do PDF, e um parágrafo que atravesse páginas pode ter retângulos em várias delas
As localizações descrevem a cobertura de linhas e não quadriláteros exatos de caracteres, por isso um PDF anotado pode destacar a mesma linha para várias alterações de palavras independentes
Excluir elementos de página recorrentes e texto repetitivo
As predefinições excluem linhas semânticas coincidentes que ocorram nos 54 pontos superiores ou inferiores de pelo menos duas páginas distintas de cada entrada, e normalizam os dígitos de margens para que números de página repetidos possam coincidir
Os documentos antes e depois são filtrados de forma independente, e repetições do corpo continuam 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.';
ExcludedLineTexts remove uma linha semântica completa por igualdade literal após normalização de espaços em branco, respeita 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 de margem recorrente excluída ficam de fora da revisão de redação
Orçamentos e cancelamento
| Opção | Predefinição | Âmbito |
|---|---|---|
MaxPages | 500 | Cada documento |
MaxParagraphs | 4000 | Cada documento após as exclusões |
MaxSemanticLines | 50000 | Linhas semânticas combinadas antes de snapshots e exclusões |
MaxCharacters | 2000000 | Texto de linhas extraído combinado antes das exclusões |
MaxTokens | 200000 | Tokens de palavras combinados e, no modo frase, tokens de frases |
MaxDifferences | 10000 | Registos devolvidos, incluindo movimentações |
MaxAlignmentCells | 2000000 | Matrizes de tokens de parágrafos alterados acumuladas |
MaxWorkUnits | 50000000 | Contabilidade de extração e trabalho de alinhamento |
Um limite de orçamento devolve ccsBudgetExceeded, e o cancelamento devolve ccsCancelled, com conclusões parciais mantidas para diagnóstico e marcadas como incompletas no HTML
O cancelamento é verificado entre extrações de páginas e ao longo dos ciclos de alinhamento da biblioteca, enquanto o extrator semântico de página única subjacente permanece síncrono
ccsInvalidInput reporta documentos em falta, ordinais de enum inválidos ou opções inválidas, e ccsExtractionFailed reporta páginas sem texto extraível ou com extração semântica falhada
OCR ou remoção explícita de páginas em branco é necessário antes de comparar páginas sem texto extraível, e ccsComplete certifica apenas a conclusão desta comparação de texto
Artefactos de revisão
HPDFContractReviewHTML devolve um documento autónomo com título, mensagens, texto, contextos completos de parágrafos, tipos de alteração e ambas as localizações de origem com escape, com um limite de saída de 8388608 caracteres UTF-16 por predefinição
O exportador HTML lança EHPDFContractCompareBudget quando a saída excede o limite configurado, e o seu token de cancelamento lança EHPDFOperationCancelled
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 das linhas, antes de adicionar destaques com comentários de revisão numerados
Indique caminhos de origem e de saída distintos, escolha ccsBefore ou ccsAfter, e exporte ambas as versões quando precisar de rever eliminações e inserções de parágrafos completos em conjunto
No Windows, as identidades dos ficheiros de origem e de saída são verificadas para rejeitar hard links ou outros aliases do ficheiro de origem
O exportador PDF desativa o AutoLaunch, deixa os documentos de entrada e o ficheiro de origem inalterados e verifica o cancelamento antes do carregamento, entre páginas e alterações e antes de guardar
Este auxiliar compara a redação extraída e as referências de layout sem inferir significado legal, sem reconhecer texto digitalizado e sem certificar o efeito legal de uma revisão
APIs relacionadas
HPDFCompareContracts · THPDFContractCompareOptions · THPDFContractCompareReport · HPDFContractReviewHTML · HPDFSaveContractAnnotatedPDF