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

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