Comparação de documentos
THPDFDocComparison compara dois documentos THotPDF carregados e retorna um relatório JSON determinístico
Comparação estrutural
cmStructural começa em cada catalog de documento, segue referências indiretas e atribui caminhos a partir de chaves de dicionário ordenadas e índices de array como $Catalog/Pages/Kids[0]/Contents
Valores escalares e bytes de stream decodificados são transformados em hash com SHA-256, de modo que streams grandes são comparados incrementalmente sem materializar outra cópia completa
Objetos com o mesmo caminho, mas assinaturas diferentes são relatados como objectChanged; assinaturas iguais em caminhos diferentes são objectMoved; objetos restantes sem correspondência são objectInserted ou objectDeleted
Alinhamento de páginas
Páginas com texto extraível usam uma assinatura de texto semântica para alinhamento e fazem fallback para uma assinatura estrutural quando o texto está vazio ou indisponível
Uma passagem de subsequência crescente mais longa preserva a ordem das páginas entre inserções e exclusões enquanto relata reordenação genuína como pageMoved
Páginas alinhadas sem correspondência tornam-se pageChanged, pageInserted ou pageDeleted; metadados de página são assinados independentemente de /Parent, /Contents e /Resources para evitar ruído de codificação de subconjunto de fonte
Comparação renderizada
cmRenderedImage e cmFull renderizam páginas comuns no DPI configurado e varrem cada bitmap uma vez para calcular pixels alterados, proporção de pixels alterados, erro médio absoluto de cor, delta máximo de cor e uma pontuação global de luminância semelhante a SSIM
THPDFRenderedCompareOptions seleciona diferença RGB ou de luminância, tolerância de cor por pixel, similaridade mínima, proporção máxima de pixels alterados, tamanho de bloco, retenção de região alterada, orçamentos de pixels e sobreposições PNG opcionais
Uma página é semelhante apenas quando tanto a proporção de pixels alterados quanto os portões de similaridade passam; métricas são avaliadas em precisão total e arredondadas para seis casas decimais apenas para relatório JSON determinístico
Blocos alterados são unidos em regiões determinísticas de quatro conexões e relatados com limites de espaço de pixel, contagens de pixels alterados e deltas máximos de cor
Quando mapas de calor estão habilitados, pixels alterados são mesclados de amarelo a vermelho sobre o documento A e salvos como arquivos no estilo page-000001-diff.png no diretório selecionado pelo chamador
Limites e completude
THPDFStructuralCompareLimits controla limites de objeto, aresta, página, profundidade, diferença, byte de stream, byte de valor e byte de caminho
Se a travessia atingir um limite, o relatório inclui comparisonBudget, define comparisonComplete como false e não pode relatar os documentos como idênticos
O trabalho renderizado é estimado antes da alocação e limitado por página e por comparação; falhas de renderização, alocação ou sobreposição adicionam renderBudget ou renderError, definem renderComparisonComplete e comparisonComplete como false e falham de forma segura
Modos de comparação
cmPageCountcompara contagens de páginascmPageTextalinha e compara texto de página extraídocmObjectCountretém seu valor de seletor existente e agora realiza comparação estrutural de objeto e páginacmRenderedImagerealiza comparação renderizada perceptual usando opções padrão ou selecionadas pelo chamadorcmFullcombina contagem de páginas, comparação estrutural e renderizadacmStructuralrealiza comparação de página e grafo de objetos sem renderização
Formato de resultado
O relatório inclui contagens de origem, telemetria de travessia, limites estruturais e de renderização normalizados, differenceCount, reportedDifferenceCount, differencesTruncated, comparisonComplete, identical e um array differences
Modos renderizados também retornam um array renderedPages com status de página, dimensões, métricas, regiões alteradas e caminhos de sobreposição opcionais, mais contagens agregadas de páginas e pixels renderizados
Cada diferença pode incluir valores estáveis de pathA e pathB, índices de página, números de objeto, um tipo e uma string de detalhe
APIs relacionadas
THPDFDocComparison · CompareWithOptions · THPDFRenderedCompareOptions · THPDFComparisonMode · HPDFDocCompareDocuments