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í
cmPageCountporovnává počty stránekcmPageTextzarovná a porovná extrahovaný text stránekcmObjectCountzachovává svou stávající hodnotu selektoru a nyní provádí strukturální porovnání objektů a stránekcmRenderedImageprovádí percepční vykreslené porovnání s defaultními nebo volajícím zvolenými volbamicmFullkombinuje porovnání počtu stránek, strukturální i vykreslenécmStructuralprovádí porovnání stránek a objektového grafu bez renderová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