Comparación nativa headless de documentos
HPDFHeadlessCompare compara dos documentos nativos cargados mediante HPDFCompareHeadlessDocuments; el ABI de callback de Linux expone la misma implementación a través de hpdf_document_compare_json_v1 con type:compare
| Modo Pascal | Modo JSON | Contenido comparado |
|---|---|---|
| hcmPageCount | pagecount | Recuentos de hojas del árbol de páginas |
| hcmPageText | pagetext | Recuentos de páginas y texto Unicode extraído |
| hcmObjectCount | objectcount | Recuentos de páginas y de objetos en uso de la tabla de referencias cruzadas |
| hcmRenderedImage | renderedimage | Recuentos de páginas, dimensiones renderizadas y píxeles nativos de Cairo |
| hcmStructural | structural | Recuentos de páginas y grafos normalizados de catálogo, información y objetos inalcanzables |
| hcmFull | full | Recuentos de páginas y objetos, grafos normalizados, texto Unicode y píxeles renderizados |
Equivalencia estructural
La comparación estructural resuelve referencias indirectas y ordena las entradas de diccionario, normaliza nombres PDF y representaciones de cadenas literales o hexadecimales, y decodifica los filtros ordinarios de streams antes de calcular el hash del contenido con SHA-256
Los números de objeto, el orden de serialización y la compresión ordinaria de streams no alteran la equivalencia estructural; las codificaciones finales de imágenes conservan su filtro y su política de decodificación, mientras que los objetos inalcanzables se comparan como multiconjunto
Los diccionarios de cifrado y los contenedores de almacenamiento de tablas de referencias cruzadas u object streams quedan fuera de la estructura semántica; el contenido AES R5/R6 autenticado se compara después de descifrarlo, aplicando el permiso de extracción
Una diferencia estructural reporta la ruta a nivel de documento $Document; los recuentos físicos de objetos siguen siendo un modo aparte y pueden diferir cuando contenido equivalente usa disposiciones de almacenamiento distintas
Comparación renderizada
Cada página se renderiza de verdad con el dispositivo nativo Cairo al DPI seleccionado; los píxeles de las imágenes decodificadas se componen sobre blanco y se comparan en RGB o luminancia
Los reportes contienen dimensiones, recuentos de píxeles modificados, delta máximo de canal, error absoluto medio, proporción de píxeles modificados y similitud; la similitud es 1 - meanAbsoluteError / 255
Un píxel cambia cuando su delta máximo de canal supera ColorTolerance; una página pasa solo si las dimensiones coinciden y tanto la similitud como la proporción de píxeles modificados alcanzan los umbrales configurados
El rendering exige las mismas fuentes soportadas, codecs de imagen y semántica gráfica que el rendering nativo de páginas; una página no soportada hace fallar la comparación en lugar de producir un reporte idéntico
Ejecución acotada
Las opciones de comparación acotan el recorrido, la profundidad, los objetos, los streams decodificados, la preparación de texto, el almacenamiento de resultados y los píxeles renderizados; la cancelación llega al recorrido, a la extracción de texto y al rendering
Mantén ambas instancias del documento vivas y con propiedad exclusiva durante una comparación Pascal; su contenido original y sus opciones de recursos se preservan en éxito, fallo y cancelación
El ABI de Linux acepta los seis nombres de modo en minúsculas de arriba y miembros estrictos de options que corresponden a los límites Pascal, además de dpi, colorTolerance, minimumSimilarity, maxChangedPixelRatio y colorSpace:rgb o luminance
Los resultados del ABI quedan totalmente preparados y acotados antes de la publicación síncrona por callback; las llamadas con el mismo handle y las llamadas concurrentes en orden inverso usan el orden de bloqueo estable existente
Campos del reporte · Comparación del contrato semántico · C ABI nativo de Linux