Native Headless-Dokumentvergleiche
HPDFHeadlessCompare vergleicht zwei geladene native Dokumente über HPDFCompareHeadlessDocuments; die Linux-Callback-ABI legt dieselbe Implementierung über hpdf_document_compare_json_v1 mit type:compare offen
| Pascal-Modus | JSON-Modus | Verglichener Inhalt |
|---|---|---|
| hcmPageCount | pagecount | Anzahl der Blätter im Page Tree |
| hcmPageText | pagetext | Seitenzahlen und extrahierter Unicode-Text |
| hcmObjectCount | objectcount | Seitenzahlen und physisch genutzte Cross-Reference-Objektzahlen |
| hcmRenderedImage | renderedimage | Seitenzahlen, gerenderte Abmessungen und native Cairo-Pixel |
| hcmStructural | structural | Seitenzahlen sowie normalisierte Catalog-, Information- und nicht erreichbare Objektgraphen |
| hcmFull | full | Seiten- und Objektzahlen, normalisierte Graphen, Unicode-Text und gerenderte Pixel |
Strukturelle Äquivalenz
Der strukturelle Vergleich löst indirekte Referenzen auf und sortiert Dictionary-Einträge, normalisiert PDF-Namen sowie literale oder hexadezimale String-Darstellungen und dekodiert gewöhnliche Stream-Filter, bevor der Inhalt mit SHA-256 gehasht wird
Objektnummern, Serialisierungsreihenfolge und gewöhnliche Stream-Kompression ändern nichts an der strukturellen Äquivalenz; terminale Bildkodierungen behalten ihre Filter- und Decode-Policy, während nicht erreichbare Objekte als Multiset verglichen werden
Verschlüsselungs-Dictionaries und Cross-Reference- oder Object-Stream-Speichercontainer bleiben von der semantischen Struktur ausgenommen; authentifizierter AES-R5/R6-Inhalt wird nach der Entschlüsselung verglichen, mit erzwungener Extraktionsberechtigung
Eine strukturelle Differenz meldet den dokumentweiten Pfad $Document; physische Objektzahlen bleiben ein eigener Modus und können abweichen, wenn äquivalenter Inhalt unterschiedliche Speicherlayouts nutzt
Gerenderte Vergleiche
Jede Seite wird tatsächlich mit dem nativen Cairo-Gerät bei der gewählten DPI gerendert; dekodierte Bildpixel werden auf Weiß komponiert und in RGB oder Luminanz verglichen
Reports enthalten Abmessungen, Anzahl geänderter Pixel, maximale Kanaldelta, mittleren absoluten Fehler, Anteil geänderter Pixel und Ähnlichkeit; die Ähnlichkeit ist 1 - meanAbsoluteError / 255
Ein Pixel gilt als geändert, wenn seine maximale Kanaldelta ColorTolerance überschreitet; eine Seite besteht nur, wenn die Abmessungen übereinstimmen und sowohl Ähnlichkeit als auch Anteil geänderter Pixel die konfigurierten Schwellen einhalten
Rendering braucht dieselben unterstützten Schriften, Bild-Codecs und Grafiksemantiken wie natives Seiten-Rendering; eine nicht unterstützte Seite lässt den Vergleich fehlschlagen, statt einen identischen Report zu erzeugen
Begrenzte Ausführung
Vergleichsoptionen begrenzen Traversierung, Tiefe, Objekte, dekodierte Streams, Textaufbereitung, Ergebnisablage und gerenderte Pixel; Abbruch erreicht Traversierung, Textextraktion und Rendering
Halten Sie beide Dokumentinstanzen während eines Pascal-Vergleichs am Leben und exklusiv im Besitz; ihr ursprünglicher Inhalt und ihre Ressourcenoptionen bleiben bei Erfolg, Fehlschlag und Abbruch erhalten
Die Linux-ABI akzeptiert die sechs kleingeschriebenen Modusnamen oben und strikte options-Member passend zu den Pascal-Limits, dazu dpi, colorTolerance, minimumSimilarity, maxChangedPixelRatio und colorSpace:rgb oder luminance
ABI-Ergebnisse sind vollständig aufbereitet und begrenzt, bevor sie synchron per Callback veröffentlicht werden; Aufrufe am selben Handle und gleichzeitige Aufrufe in umgekehrter Reihenfolge nutzen die bestehende stabile Lock-Reihenfolge
Report-Felder · Semantische Vertragvergleiche · Native Linux C ABI