Dokumentvergleich
THPDFDocComparison vergleicht zwei geladene THotPDF-Dokumente und gibt einen deterministischen JSON-Bericht zurück
Strukturvergleich
cmStructural beginnt an jedem Dokumentkatalog, folgt indirekten Referenzen und weist Pfade aus sortierten Wörterbuchschlüsseln und Arrayindizes zu, etwa $Catalog/Pages/Kids[0]/Contents
Skalarwerte und dekodierte Stream-Bytes werden mit SHA-256 gehasht, sodass große Streams inkrementell verglichen werden, ohne eine weitere vollständige Kopie zu materialisieren
Objekte mit gleichem Pfad und unterschiedlichen Signaturen werden als objectChanged gemeldet; gleiche Signaturen an anderen Pfaden als objectMoved; übrige nicht zugeordnete Objekte als objectInserted oder objectDeleted
Seitenzuordnung
Seiten mit extrahierbarem Text verwenden zur Ausrichtung eine semantische Textsignatur und greifen bei leerem oder nicht verfügbarem Text auf eine strukturelle Signatur zurück
Ein Durchlauf über die längste steigende Teilfolge bewahrt die Seitenreihenfolge bei Einfügungen und Löschungen und meldet echte Umordnungen als pageMoved
Nicht abgeglichene zugeordnete Seiten werden zu pageChanged, pageInserted oder pageDeleted; Seitenmetadaten werden unabhängig von /Parent, /Contents und /Resources signiert, um Encoding-Rauschen aus Schrift-Subsets zu vermeiden
Gerenderter Vergleich
cmRenderedImage und cmFull rendern gemeinsame Seiten mit der konfigurierten DPI und berechnen geänderte Pixel, Verhältnis geänderter Pixel, mittleren absoluten Farbfehler, maximale Farbdifferenz und einen globalen SSIM-ähnlichen Luminanzwert
THPDFRenderedCompareOptions wählt RGB- oder Luminanzdifferenz, Pixeltoleranz, Mindestähnlichkeit, maximale Änderungsrate, Kachelgröße, Regionserhalt, Pixelbudgets und optionale PNG-Überlagerungen
Eine Seite gilt nur als ähnlich, wenn beide Schwellen — geänderte-Pixel-Ratio und Ähnlichkeit — passieren; die Metriken werden in voller Präzision bewertet und nur für den deterministischen JSON-Bericht auf sechs Dezimalstellen gerundet
Geänderte Kacheln werden zu deterministischen vierfach-zusammenhängenden Regionen zusammengefasst und mit Grenzen im Pixelraum, Anzahl geänderter Pixel und maximalen Farbdeltas gemeldet
Mit aktivierten Heatmaps werden geänderte Pixel über Dokument A von Gelb nach Rot überblendet und als Dateien im Stil page-000001-diff.png im vom Aufrufer gewählten Verzeichnis gespeichert
Grenzen und Vollständigkeit
THPDFStructuralCompareLimits steuert Grenzen für Objekte, Kanten, Seiten, Tiefe, Unterschiede, Stream-Bytes, Wert-Bytes und Pfad-Bytes
Bei Erreichen einer Grenze enthält der Bericht comparisonBudget, setzt comparisonComplete auf false und kann Dokumente nicht als identisch melden
Die gerenderte Arbeit wird vor der Allozierung geschätzt und pro Seite und Vergleich begrenzt; Render-, Allozierungs- oder Overlay-Fehler ergänzen renderBudget oder renderError, setzen renderComparisonComplete und comparisonComplete auf false und scheitern im Zweifel geschlossen
Vergleichsmodi
cmPageCountvergleicht SeitenzahlencmPageTextrichtet extrahierten Seitentext aus und vergleicht ihncmObjectCountführt strukturellen Objekt- und Seitenvergleich auscmRenderedImageführt einen wahrnehmungsbasierten gerenderten Vergleich auscmFullkombiniert Seitenanzahl, Struktur und RenderingcmStructuralvergleicht Seiten und Objektgraphen ohne Rendering
Ergebnisformat
Der Bericht enthält Quellzahlen, Traversierungstelemetrie, normalisierte Grenzen, differenceCount, reportedDifferenceCount, differencesTruncated, comparisonComplete, identical und ein Array differences
Gerenderte Modi liefern zusätzlich ein renderedPages-Array mit Seitenstatus, Abmessungen, Metriken, geänderten Regionen und optionalen Overlay-Pfaden plus aggregierte Seiten- und Pixelzähler
Jede Differenz kann stabile pathA- und pathB-Werte, Seitenindizes, Objektnummern, einen Typ und eine Detailzeichenkette enthalten
Verwandte APIs
THPDFDocComparison · CompareWithOptions · THPDFRenderedCompareOptions · THPDFComparisonMode · HPDFDocCompareDocuments