Comparação nativa de documentos headless
HPDFHeadlessCompare compara dois documentos nativos carregados através de HPDFCompareHeadlessDocuments; a ABI de callbacks do Linux expõe a mesma implementação através de hpdf_document_compare_json_v1 com type:compare
| Modo Pascal | Modo JSON | Conteúdo comparado |
|---|---|---|
| hcmPageCount | pagecount | Contagens de folhas da page tree |
| hcmPageText | pagetext | Contagens de páginas e texto Unicode extraído |
| hcmObjectCount | objectcount | Contagens de páginas e de objetos físicos em uso da cross-reference |
| hcmRenderedImage | renderedimage | Contagens de páginas, dimensões renderizadas e pixels nativos Cairo |
| hcmStructural | structural | Contagens de páginas e grafos normalizados de catalog, information e objetos inalcançáveis |
| hcmFull | full | Contagens de páginas e objetos, grafos normalizados, texto Unicode e pixels renderizados |
Equivalência estrutural
A comparação estrutural resolve referências indiretas e ordena entradas de dicionários, normaliza PDF names e representações de strings literais ou hexadecimais, e decodifica filters comuns de streams antes de fazer o hash do conteúdo com SHA-256
Números de objetos, ordem de serialização e compressão comum de streams não mudam a equivalência estrutural; encodings terminais de imagens retêm seu filter e política de decode, enquanto objetos inalcançáveis são comparados como multiset
Dicionários de criptografia e containers de armazenamento de cross-references ou object-streams são excluídos da estrutura semântica; conteúdo autenticado AES R5/R6 é comparado após a descriptografia, com permissão de extração aplicada
Uma diferença estrutural reporta o path de nível de documento $Document; as contagens físicas de objetos permanecem um modo separado e podem diferir quando conteúdo equivalente usa layouts de armazenamento diferentes
Comparação renderizada
Cada página é realmente renderizada usando o device Cairo nativo no DPI selecionado; pixels de imagens decodificadas são compostos sobre branco e comparados em RGB ou luminância
Os relatórios contêm dimensões, contagens de pixels alterados, delta máximo de canal, erro absoluto médio, razão de pixels alterados e similaridade; similaridade é 1 - meanAbsoluteError / 255
Um pixel muda quando seu delta máximo de canal excede ColorTolerance; uma página passa apenas quando as dimensões correspondem e tanto a similaridade quanto a razão de pixels alterados atendem aos thresholds configurados
O rendering exige as mesmas fontes, codecs de imagens e semântica de gráficos do rendering nativo de páginas; uma página não suportada faz a comparação falhar, em vez de produzir um relatório idêntico
Execução delimitada
As opções de comparação delimitam traversal, profundidade, objetos, streams decodificados, preparação de texto, armazenamento de resultados e pixels renderizados; o cancelamento alcança traversal, extração de texto e rendering
Mantenha ambas as instâncias de documentos vivas e sob posse exclusiva durante uma comparação Pascal; seu conteúdo original e opções de recursos são preservados em sucesso, falha e cancelamento
A ABI do Linux aceita os seis nomes de modos em minúsculas acima e membros estritos de options correspondendo aos limites Pascal, além de dpi, colorTolerance, minimumSimilarity, maxChangedPixelRatio e colorSpace:rgb ou luminance
Resultados da ABI são totalmente preparados e delimitados antes da publicação síncrona por callbacks; chamadas de mesmo handle e chamadas concorrentes em ordem oposta usam a ordenação estável de locks existente
Campos do relatório · Comparação semântica de contratos · C ABI nativa do Linux