Porównywanie dokumentów

THPDFDocComparison porównuje dwa załadowane dokumenty THotPDF i zwraca deterministyczny raport JSON

Porównanie strukturalne

cmStructural zaczyna od katalogu każdego dokumentu, podąża za referencjami pośrednimi i przypisuje ścieżki z posortowanych kluczy słownika i indeksów tablic, takich jak $Catalog/Pages/Kids[0]/Contents

Wartości skalarne i zdekodowane bajty strumienia są hasowane SHA-256, więc duże strumienie są porównywane przyrostowo bez materializowania kolejnej kompletnej kopii

Obiekty o tej samej ścieżce, ale różnych sygnaturach są raportowane jako objectChanged; równe sygnatury przy różnych ścieżkach to objectMoved; pozostałe nieprzyporządkowane obiekty to objectInserted lub objectDeleted

Wyrównanie stron

Strony z tekstem do wyodrębnienia używają semantycznej sygnatury tekstu do wyrównania i przechodzą do sygnatury strukturalnej, gdy tekst jest pusty lub niedostępny

Przebieg najdłuższego rosnącego podciągu zachowuje kolejność stron przez wstawienia i usunięcia, jednocześnie raportując rzeczywiste przestawienie jako pageMoved

Nieprzyporządkowane wyrównane strony stają się pageChanged, pageInserted lub pageDeleted; metadane stron są podpisywane niezależnie od /Parent, /Contents i /Resources, aby uniknąć szumu kodowania podzbiorów czcionek

Porównanie wyrenderowane

cmRenderedImage i cmFull renderują wspólne strony przy skonfigurowanym DPI i skanują każdą bitmapę raz, aby obliczyć zmienione piksele, stosunek zmienionych pikseli, średni bezwzględny błąd koloru, maksymalną deltę koloru i globalny wyniki luminancji podobny do SSIM

THPDFRenderedCompareOptions wybiera różnicę RGB lub luminancji, tolerancję koloru per piksel, minimalne podobieństwo, maksymalny stosunek zmienionych pikseli, rozmiar kafla, zachowanie zmienionych regionów, budżety pikseli i opcjonalne nakładki PNG

Strona jest podobna tylko wtedy, gdy przechodzą obie bramki stosunku zmienionych pikseli i podobieństwa; metryki są oceniane przy pełnej precyzji i zaokrąglane do sześciu miejsc dziesiętnych tylko dla deterministycznego raportowania JSON

Zmienione kafli są łączone w deterministyczne regiony czterosąsiednie i raportowane z granicami w przestrzeni pikseli, liczbami zmienionych pikseli i maksymalnymi deltami koloru

Gdy heatmapy są włączone, zmienione piksele są mieszane od żółtego do czerwonego nad dokumentem A i zapisywane jako pliki w stylu page-000001-diff.png w wybranym przez wywołującego katalogu

Granice i kompletność

THPDFStructuralCompareLimits kontroluje limity obiektów, krawędzi, stron, głębokości, różnic, bajtów strumieni, bajtów wartości i bajtów ścieżek

Jeśli przechodzenie osiągnie limit, raport zawiera comparisonBudget, ustawia comparisonComplete na false i nie może raportować dokumentów jako identycznych

Praca wyrenderowana jest szacowana przed alokacją i ograniczana per strona oraz per porównanie; awarie renderowania, alokacji lub nakładek dodają renderBudget lub renderError, ustawiają renderComparisonComplete i comparisonComplete na false oraz zamykają się bezpiecznie

Tryby porównania

Format wyniku

Raport zawiera liczby źródłowe, telemetrię przechodzenia, znormalizowane limity strukturalne i renderowania, differenceCount, reportedDifferenceCount, differencesTruncated, comparisonComplete, identical oraz tablicę differences

Tryby wyrenderowane zwracają również tablicę renderedPages ze statusem strony, wymiarami, metrykami, zmienionymi regionami i opcjonalnymi ścieżkami nakładek, plus zagregowane liczby wyrenderowanych stron i pikseli

Każda różnica może zawierać stabilne wartości pathA i pathB, indeksy stron, numery obiektów, typ i łańcuch szczegółów

Powiązane API

THPDFDocComparison · CompareWithOptions · THPDFRenderedCompareOptions · THPDFComparisonMode · HPDFDocCompareDocuments