Comparação de documentos

THPDFDocComparison compara dois documentos THotPDF carregados e devolve um relatório JSON determinístico

Structural comparison

cmStructural parte do catálogo de cada documento, segue as referências indiretas e atribui caminhos a partir das chaves de dicionário ordenadas e dos índices de array, como $Catalog/Pages/Kids[0]/Contents

Os valores escalares e os bytes de streams descodificados passam por hash SHA-256, pelo que os streams grandes são comparados de forma incremental, sem materializar outra cópia completa

Os objetos com o mesmo caminho mas assinaturas diferentes são reportados como objectChanged; as assinaturas iguais em caminhos diferentes são objectMoved; os objetos restantes sem correspondência são objectInserted ou objectDeleted

Page alignment

As páginas com texto extraível usam uma assinatura semântica de texto para o alinhamento e recorrem a uma assinatura estrutural quando o texto está vazio ou indisponível

Uma passagem de longest-increasing-subsequence preserva a ordem das páginas perante inserções e remoções, e reporta como pageMoved a reordenação genuína

As páginas alinhadas sem correspondência tornam-se pageChanged, pageInserted ou pageDeleted; os metadados da página são assinados independentemente de /Parent, /Contents e /Resources, para evitar ruído de codificação dos subsets de tipos de letra

Rendered comparison

cmRenderedImage e cmFull desenham as páginas comuns ao DPI configurado e percorrem cada bitmap uma só vez para calcular os píxeis alterados, o rácio de píxeis alterados, o erro médio absoluto de cor, o delta máximo de cor e uma pontuação global de luminância do tipo SSIM

THPDFRenderedCompareOptions seleciona a diferença RGB ou de luminância, a tolerância de cor por píxel, a similaridade mínima, o rácio máximo de píxeis alterados, o tamanho dos tiles, a retenção de regiões alteradas, os orçamentos de píxeis e overlays PNG opcionais

Uma página só é semelhante quando passam tanto o gate do rácio de píxeis alterados como o de similaridade; as métricas são avaliadas com precisão total e só arredondadas a seis casas decimais para o relatório JSON determinístico

Os tiles alterados são unidos em regiões determinísticas de conectividade 4 e reportados com limites no espaço de píxeis, contagens de píxeis alterados e deltas máximos de cor

Quando os heatmaps estão ativados, os píxeis alterados são misturados de amarelo a vermelho sobre o documento A e guardados como ficheiros do tipo page-000001-diff.png na pasta escolhida por quem chama

Bounds and completeness

THPDFStructuralCompareLimits controls object, edge, page, depth, difference, stream byte, value byte, and path byte limits

Se a travessia atingir um limite, o relatório inclui comparisonBudget, define comparisonComplete como false e não pode reportar os documentos como idênticos

O trabalho de rendering é estimado antes da alocação e limitado por página e por comparação; falhas de rendering, de alocação ou de overlay acrescentam renderBudget ou renderError, definem renderComparisonComplete e comparisonComplete como false e falham em modo fechado

Comparison modes

Result format

The report includes source counts, traversal telemetry, normalized structural and rendering limits, differenceCount, reportedDifferenceCount, differencesTruncated, comparisonComplete, identical, and a differences array

Os modos com rendering devolvem também um array renderedPages com o estado da página, as dimensões, as métricas, as regiões alteradas e os caminhos de overlay opcionais, bem como as contagens agregadas de páginas e píxeis desenhados

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