Porovnání dokumentů

HotPDF porovnává dvě verze PDF podle struktury, vykresleného vzhledu a významu obsahu a vrací nalezené rozdíly ve stabilním pořadíTHPDFDocComparison porovnává dva načtené dokumenty THotPDF a vrací deterministickou JSON zprávu

Strukturální porovnání

cmStructural startuje u katalogu každého dokumentu, následuje nepřímé reference a přiřazuje cesty podle setříděných klíčů slovníků a indexů polí, jako je $Catalog/Pages/Kids[0]/Contents

Skalární hodnoty a dekódované bajty streamů se hašují SHA-256, takže velké streamy se porovnávají inkrementálně bez materializace další kompletní kopie

Objekty se stejnou cestou a různou signaturou se hlásí jako objectChanged; stejné signatury na různých cestách jsou objectMoved; zbývající nespárované objekty jsou objectInserted nebo objectDeleted

Režimy

Volající může vybrat strukturální, vizuální nebo kombinované porovnání a nastavit rozlišení, rozsahy stránek, tolerance a rozpočty

Report odlišuje vložené, odstraněné a změněné položky a obsahuje umístění i diagnostiku pro regresní zpracovánípageMoved

Nespárované zarovnané stránky se stanou pageChanged, pageInserted nebo pageDeleted; metadata stránky se podepisují nezávisle na /Parent, /Contents a /Resources, aby se do porovnání nedostal šum z kódování font subsetů

Vykreslené porovnání

cmRenderedImage a cmFull vykreslí běžné stránky v nastaveném DPI a každou bitmapu projdou jen jednou, aby spočítaly počet změněných pixelů, jejich poměr, průměrnou absolutní barevnou chybu, maximální barevný rozdíl a globální skóre jasu podobné SSIM

THPDFRenderedCompareOptions vybírá rozdíl RGB nebo luminance, toleranci barvy na pixel, minimální podobnost, maximální poměr změněných pixelů, velikost dlaždice, uchovávání změněných regionů, rozpočty pixelů a volitelné PNG overlaye

Stránka je podobná jen tehdy, když projdou brány poměru změněných pixelů i podobnosti; metriky se vyhodnocují v plné přesnosti a na šest desetinných míst se zaokrouhlí jen pro deterministické JSON hlášení

Změněné dlaždice se spojí do deterministických čtyřsměrně souvislých regionů a hlásí se s mezemi v pixelovém prostoru, počty změněných pixelů a maximálními barevnými deltami

Když jsou zapnuté heatmapy, změněné pixely se nad dokumentem A blendují od žluté k červené a ukládají jako soubory ve stylu page-000001-diff.png ve volajícím zvoleném adresáři

Meze a kompletnost

THPDFStructuralCompareLimits řídí limity objektů, hran, stránek, hloubky, rozdílů, bajtů streamů, bajtů hodnot a bajtů cest

Pokud průchod narazí na limit, report obsahuje comparisonBudget, nastaví comparisonComplete na false a dokumenty už nelze označit za shodné

Náročnost vykreslení se odhaduje ještě před alokací a je omezena na stránku i na celé porovnání; selhání vykreslení, alokace nebo overlaye přidá renderBudget nebo renderError, nastaví renderComparisonComplete a comparisonComplete na false a skončí jako fail closed

Režimy porovnání

Formát výsledku

Zpráva obsahuje zdrojové počty, telemetrii traversal, normalizované strukturální a renderovací limity, differenceCount, reportedDifferenceCount, differencesTruncated, comparisonComplete, identical a pole differences

Vykreslené režimy také vracejí pole renderedPages se statusem stránky, rozměry, metrikami, změněnými regiony a volitelnými cestami overlayů, plus agregované počty vykreslených stránek a pixelů

Každý rozdíl může obsahovat stabilní hodnoty pathA a pathB, indexy stránek, čísla objektů, typ a detailní řetězec

Související API

THPDFDocComparison · CompareWithOptions · THPDFRenderedCompareOptions · THPDFComparisonMode · HPDFDocCompareDocuments