Belge Karşılaştırma
THPDFDocComparison, iki yüklü THotPDF belgesini karşılaştırır ve deterministik bir JSON raporu döndürür
Yapısal karşılaştırma
cmStructural her belge kataloğundan başlar, indirect referansları izler ve $Catalog/Pages/Kids[0]/Contents gibi sıralanmış dictionary anahtarlarından ve dizi indekslerinden yollar atar
Skaler değerler ve çözülmüş stream baytları SHA-256 ile hash'lenir; böylece büyük stream'ler başka bir eksiksiz kopya somutlaştırmadan artımlı olarak karşılaştırılır
Aynı yolda ama farklı imzalı nesneler objectChanged olarak raporlanır; farklı yollarda eş imzalılar objectMoved olur; kalan eşleşmemiş nesneler objectInserted veya objectDeleted sayılır
Sayfa hizalama
Çıkarılabilir metni olan sayfalar hizalama için semantic bir metin imzası kullanır; metin boş veya erişilemezken yapısal imzaya döner
Bir longest-increasing-subsequence geçişi; ekleme ve silmeler arasında sayfa sırasını korur, gerçek yeniden sıralanmayı ise pageMoved olarak raporlar
Eşleşmeyen hizalanmış sayfalar pageChanged, pageInserted veya pageDeleted olur; sayfa meta verisi, font-subset kodlama gürültüsünü önlemek için /Parent, /Contents ve /Resources'tan bağımsız imzalanır
Render edilmiş karşılaştırma
cmRenderedImage ve cmFull ortak sayfaları yapılandırılmış DPI'da render eder ve her bitmap'i bir kez tarayarak değişen pikselleri, değişen-piksel oranını, ortalama mutlak renk hatasını, maksimum renk deltasını ve global bir SSIM benzeri luminance skoru hesaplar
THPDFRenderedCompareOptions; RGB veya luminance farkını, piksel başına renk toleransını, minimum benzerliği, maksimum değişen-piksel oranını, tile boyutunu, değişen-bölge saklamayı, piksel bütçelerini ve isteğe bağlı PNG overlay'lerini seçer
Bir sayfa, yalnızca değişen-piksel oranı ve benzerlik kapılarının ikisi de geçtiğinde benzer sayılır; metric'ler tam hassasiyetle değerlendirilir ve yalnızca deterministik JSON raporlaması için altı ondalık basamağa yuvarlanır
Değişen tile'lar deterministik dört-yönlü bağlantılı bölgelerde birleştirilir ve piksel-uzayı sınırlarıyla, değişen-piksel sayılarıyla ve maksimum renk deltalarıyla raporlanır
Heatmap'ler etkinleştirildiğinde, değişen pikseller belge A üzerinde sarıdan kırmızıya karıştırılır ve çağıranın seçtiği dizine page-000001-diff.png biçiminde dosyalar olarak kaydedilir
Sınırlar ve eksiksizlik
THPDFStructuralCompareLimits; nesne, kenar, sayfa, derinlik, fark, stream baytı, değer baytı ve yol baytı sınırlarını denetler
Dolaşım bir sınıra ulaşırsa rapor comparisonBudget içerir, comparisonComplete değerini false yapar ve belgeleri özdeş olarak raporlayamaz
Render işi, tahsis edilmeden önce tahmin edilir ve sayfa ile karşılaştırma başına sınırlanır; rendering, tahsis veya overlay hataları renderBudget veya renderError ekler, renderComparisonComplete ve comparisonComplete değerlerini false yapar ve fail closed davranır
Karşılaştırma modları
cmPageCountsayfa sayılarını karşılaştırırcmPageTextçıkarılan sayfa metnini hizalar ve karşılaştırırcmObjectCountmevcut selector değerini korur ve artık yapısal nesne ile sayfa karşılaştırması yaparcmRenderedImagevarsayılan veya çağıranın seçtiği seçeneklerle algısal render edilmiş karşılaştırma yaparcmFullsayfa sayısı, yapısal ve render edilmiş karşılaştırmayı birleştirircmStructuralrendering yapmadan sayfa ve nesne-grağı karşılaştırması yapar
Sonuç biçimi
Rapor; kaynak sayaçlarını, dolaşım telemetry'sini, normalize edilmiş yapısal ve rendering sınırlarını, differenceCount, reportedDifferenceCount, differencesTruncated, comparisonComplete, identical ve bir differences dizisi içerir
Render edilmiş modlar ayrıca; sayfa durumu, boyutlar, metric'ler, değişen bölgeler ve isteğe bağlı overlay yolları içeren bir renderedPages dizisiyle birlikte toplu render edilmiş sayfa ve piksel sayılarını döndürür
Her fark; kararlı pathA ve pathB değerlerini, sayfa indekslerini, nesne numaralarını, bir tür ve ayrıntı string'i içerebilir
İlgili API'ler
THPDFDocComparison · CompareWithOptions · THPDFRenderedCompareOptions · THPDFComparisonMode · HPDFDocCompareDocuments