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

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çãoPredefiniçãoÂmbito
MaxPages500Cada documento
MaxParagraphs4000Cada documento após as exclusões
MaxSemanticLines50000Linhas semânticas combinadas antes de snapshots e exclusões
MaxCharacters2000000Texto de linhas extraído combinado antes das exclusões
MaxTokens200000Tokens de palavras combinados e, no modo frase, tokens de frases
MaxDifferences10000Registos devolvidos, incluindo movimentações
MaxAlignmentCells2000000Matrizes de tokens de parágrafos alterados acumuladas
MaxWorkUnits50000000Contabilidade 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