Native headless document comparison
HPDFHeadlessCompare porovnává dva načtené nativní dokumenty přes HPDFCompareHeadlessDocuments; Linux callback ABI vystavuje tutéž implementaci přes hpdf_document_compare_json_v1 s type:compare
| Pascal režim | JSON režim | Porovnávaný obsah |
|---|---|---|
| hcmPageCount | pagecount | Počty listů stromu stránek |
| hcmPageText | pagetext | Počty stránek a extrahovaný Unicode text |
| hcmObjectCount | objectcount | Počty stránek a fyzické počty používaných objektů cross-reference |
| hcmRenderedImage | renderedimage | Počty stránek, renderované rozměry i nativní Cairo pixely |
| hcmStructural | structural | Počty stránek a normalizované grafy katalogu, informací i nedosažitelných objektů |
| hcmFull | full | Počty stránek a objektů, normalizované grafy, Unicode text i renderované pixely |
Strukturální ekvivalence
Strukturální porovnání rozřeší nepřímé reference a setřídí položky slovníků, normalizuje PDF názvy i literální či hexadecimální reprezentace řetězců a dekóduje běžné stream filtry, dřív než hashuje obsah přes SHA-256
Objektová čísla, pořadí serializace i běžná komprese streamů strukturální ekvivalenci nemění; terminální kódování obrázků si ponechávají politiku filtrů i dekódování, zatímco nedosažitelné objekty se porovnávají jako multiset
Šifrovací slovníky i úložné kontejnery cross-reference či objektových streamů jsou ze sémantické struktury vyloučené; autentizovaný obsah AES R5/R6 se porovnává po dešifrování, s vynuceným oprávněním pro extrakci
Strukturální rozdíl reportuje dokumentovou cestu $Document; fyzické počty objektů zůstávají samostatným režimem a můžou se lišit, když ekvivalentní obsah používá různá úložná rozložení
Renderované porovnání
Každá stránka se skutečně renderuje nativním Cairo zařízením při vybraném DPI; dekódované pixely obrázků se skládají na bílé pozadí a porovnávají v RGB či luminanci
Reporty obsahují rozměry, počty změněných pixelů, maximální rozdíl kanálu, střední absolutní chybu, podíl změněných pixelů i podobnost; podobnost je 1 - meanAbsoluteError / 255
Pixel se změní, když jeho maximální rozdíl kanálu přesáhne ColorTolerance; stránka projde jen tehdy, když se rozměry shodují a jak podobnost, tak podíl změněných pixelů splní nakonfigurované prahy
Renderování vyžaduje týž podporovaná písma, image kodeky i grafickou sémantiku jako nativní render stránek; nepodporovaná stránka porovnání zhatí, místo aby vytvořila identický report
Ohraničené provedení
Porovnávací volby ohraničují traversal, hloubku, objekty, dekódované streamy, přípravu textu, úložiště výsledků i renderované pixely; zrušení zasahuje traversal, extrakci textu i renderování
Během Pascal porovnání držte obě instance dokumentů naživu a výhradně vlastněné; jejich původní obsah i volby resource se zachovají při úspěchu, selhání i zrušení
Linux ABI přijímá šest výše uvedených lowercase názvů režimů a přísné členy options odpovídající Pascal limitům, plus dpi, colorTolerance, minimumSimilarity, maxChangedPixelRatio a colorSpace:rgb či luminance
ABI výsledky jsou úplně připravené a ohraničené dřív než synchronní publikace callbackem; volání se stejným handle i souběžná volání v opačném pořadí používají stávající stabilní pořadí zámků
Pole reportu · Sémantické porovnání kontraktů · Nativní Linux C ABI