Comparación de documentos

THPDFDocComparison compara dos documentos THotPDF cargados y devuelve un informe JSON determinista

Comparación estructural

cmStructural comienza en el catálogo de cada documento, sigue las referencias indirectas y asigna rutas a partir de claves de diccionario ordenadas e índices de matriz como $Catalog/Pages/Kids[0]/Contents

Los valores escalares y los bytes de flujo decodificados se resumen con SHA-256, de modo que los flujos grandes se comparan de forma incremental sin materializar otra copia completa

Los objetos con la misma ruta pero firmas diferentes se informan como objectChanged; las firmas iguales en rutas diferentes son objectMoved; los objetos restantes sin emparejar son objectInserted u objectDeleted

Alineación de páginas

Las páginas con texto extraíble usan una firma de texto semántica para la alineación y recurren a una firma estructural cuando el texto está vacío o no está disponible

Una pasada de subsecuencia creciente más larga conserva el orden de página entre inserciones y eliminaciones mientras informa del reordenamiento genuino como pageMoved

Las páginas alineadas sin emparejar se convierten en pageChanged, pageInserted o pageDeleted; los metadatos de página se firman independientemente de /Parent, /Contents y /Resources para evitar el ruido de codificación de subconjuntos de fuentes

Comparación renderizada

cmRenderedImage y cmFull renderizan las páginas comunes al DPI configurado y escanean cada mapa de bits una vez para calcular los píxeles cambiados, la proporción de píxeles cambiados, el error de color absoluto medio, el delta de color máximo y una puntuación de luminancia global similar a SSIM

THPDFRenderedCompareOptions selecciona la diferencia RGB o de luminancia, la tolerancia de color por píxel, la similitud mínima, la proporción máxima de píxeles cambiados, el tamaño de tesela, la retención de regiones cambiadas, los presupuestos de píxeles y las superposiciones PNG opcionales

Una página es similar solo cuando pasan tanto la proporción de píxeles cambiados como las puertas de similitud; las métricas se evalúan con precisión completa y se redondean a seis decimales solo para el informe JSON determinista

Las teselas cambiadas se unen en regiones deterministas de cuatro conexiones y se informan con límites en espacio de píxeles, recuentos de píxeles cambiados y deltas de color máximos

Cuando los mapas de calor están habilitados, los píxeles cambiados se mezclan de amarillo a rojo sobre el documento A y se guardan como archivos de estilo page-000001-diff.png en el directorio seleccionado por el llamador

Límites y completitud

THPDFStructuralCompareLimits controla los límites de objeto, borde, página, profundidad, diferencia, byte de flujo, byte de valor y byte de ruta

Si el recorrido alcanza un límite, el informe incluye comparisonBudget, establece comparisonComplete en false y no puede informar de que los documentos son idénticos

El trabajo renderizado se estima antes de la asignación y se limita por página y por comparación; los fallos de renderizado, asignación o superposición añaden renderBudget o renderError, establecen renderComparisonComplete y comparisonComplete en false y fallan de forma cerrada

Modos de comparación

Formato de resultado

El informe incluye recuentos de origen, telemetría de recorrido, límites estructurales y de renderizado normalizados, differenceCount, reportedDifferenceCount, differencesTruncated, comparisonComplete, identical y una matriz differences

Los modos renderizados también devuelven una matriz renderedPages con estado de página, dimensiones, métricas, regiones cambiadas y rutas de superposición opcionales, además de recuentos agregados de páginas y píxeles renderizados

Cada diferencia puede incluir valores estables de pathA y pathB, índices de página, números de objeto, un tipo y una cadena de detalle

APIs relacionadas

THPDFDocComparison · CompareWithOptions · THPDFRenderedCompareOptions · THPDFComparisonMode · HPDFDocCompareDocuments