Document Comparison
THPDFDocComparison compara dos documentos THotPDF cargados y devuelve un reporte JSON determinista
Comparación estructural
cmStructural arranca en el catalog de cada documento, sigue las indirect references y asigna rutas a partir de claves de diccionario ordenadas e índices de arrays, como $Catalog/Pages/Kids[0]/Contents
Los valores escalares y los bytes de stream decodificados se hashean con SHA-256, así que los streams grandes se comparan incrementalmente sin materializar otra copia completa
Los objetos con la misma ruta pero distinta firma se reportan como objectChanged; las firmas iguales en rutas distintas 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 hacen fallback a una firma estructural cuando el texto está vacío o no está disponible
Un pase de longest-increasing-subsequence preserva el orden de las páginas a través de inserciones y eliminaciones, mientras reporta el reordenamiento genuino como pageMoved
Las páginas alineadas sin pareja 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 font subsets
Comparación renderizada
cmRenderedImage y cmFull renderizan las páginas comunes al DPI configurado y escanean cada bitmap una vez para calcular los píxeles cambiados, el ratio de píxeles cambiados, el error de color absoluto medio, el delta de color máximo y un puntaje de luminancia global tipo SSIM
THPDFRenderedCompareOptions selecciona diferencia RGB o de luminancia, tolerancia de color por píxel, similitud mínima, ratio máximo de píxeles cambiados, tamaño de tile, retención de regiones cambiadas, presupuestos de píxeles y overlays PNG opcionales
Una página es similar solo cuando pasan tanto la compuerta del ratio de píxeles cambiados como la de similitud; las métricas se evalúan a precisión completa y se redondean a seis decimales solo para el reporte JSON determinista
Los tiles cambiados se unen en regiones deterministas conexas por cuatro lados y se reportan con bounds en espacio de píxeles, conteos de píxeles cambiados y deltas de color máximos
Cuando los heatmaps 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 elegido por el caller
Límites y completitud
THPDFStructuralCompareLimits controla los límites de objetos, aristas, páginas, profundidad, diferencias, bytes de stream, bytes de valor y bytes de ruta
Si el recorrido alcanza un límite, el reporte incluye comparisonBudget, establece comparisonComplete en false y no puede reportar los documentos como idénticos
El trabajo renderizado se estima antes de la asignación y se acota por página y por comparación; los fallos de render, de asignación o de overlay añaden renderBudget o renderError, establecen renderComparisonComplete y comparisonComplete en false, y fallan de forma cerrada
Modos de comparación
cmPageCountcompara los conteos de páginascmPageTextalinea y compara el texto extraído de las páginascmObjectCountconserva su valor de selector existente y ahora realiza la comparación estructural de objetos y páginascmRenderedImagerealiza la comparación perceptual renderizada usando opciones por defecto o elegidas por el callercmFullcombina la comparación de conteo de páginas, estructural y renderizadacmStructuralrealiza la comparación de páginas y del grafo de objetos sin renderizar
Formato del resultado
El reporte incluye los conteos del source, la telemetría del recorrido, los límites estructurales y de render normalizados, differenceCount, reportedDifferenceCount, differencesTruncated, comparisonComplete, identical y un array differences
Los modos renderizados también devuelven un array renderedPages con estado de página, dimensiones, métricas, regiones cambiadas y rutas de overlay opcionales, más los conteos agregados de páginas y píxeles renderizados
Cada diferencia puede incluir valores pathA y pathB estables, índices de página, números de objeto, un tipo y una cadena de detalle
APIs relacionadas
THPDFDocComparison · CompareWithOptions · THPDFRenderedCompareOptions · THPDFComparisonMode · HPDFDocCompareDocuments