JSON- und C-ABI-Dokumentvergleich
Vergleichen Sie zwei geladene Dokumente über THPDFJobProcessor.ExecuteLoadedOperationWithComparison, zwei C-ABI-Handles über hpdf_document_compare_json_v1 oder zwei Dateien über den JSON-Jobprozessor
Generische Modi
type=compare akzeptiert mode-Werte pageCount, pageText, objectCount, renderedImage, full und structural; der Default ist structural
Die Modi behalten das native THPDFDocComparison-Verhalten bei, einschließlich Seitenausrichtung und struktureller Objektsignaturen; objectCount vergleicht zudem Seiten- und Objektstruktur
{
"schemaVersion": 1,
"type": "compare",
"mode": "full",
"render": {"dpi": 72, "colorSpace": "rgb", "colorTolerance": 8},
"options": {"maxDifferences": 1000, "maxStreamBytes": 1048576},
"budget": {"memoryBytes": 268435456, "resultBytes": 16777216,
"outputBytes": 67108864, "timeMilliseconds": 60000, "pixels": 10000000}
}
Der Ergebnisumschlag enthält comparison, comparisonComplete, identical, documentUpdated=false, verstrichene Zeit und Ausgabegröße; optionale Binärausgabe enthält das Vergleichs-JSON ohne seinen Umschlag
Traversierungs-, Stream-, Wert-, behaltene-Differenzen- und Rendering-Limits erzeugen status=incomplete, comparisonComplete=false und identical=false, selbst wenn der untersuchte Ausschnitt gleich ist
Vertragsprüfung
type=compare.contract richtet Absätze aus, erkennt Verschiebungen und meldet Wort- oder Satzeinfügungen, Löschungen und Ersetzungen mit beiden Kontexten und Positionen
{
"schemaVersion": 1,
"type": "compare.contract",
"format": "pdf",
"side": "after",
"options": {"granularity": "word", "ignoreRepeatedHeadersFooters": true,
"excludedLineTexts": ["CONFIDENTIAL COPY"], "maxWorkUnits": 50000000}
}
format akzeptiert json, html oder pdf; JSON ist der Default, und HTML oder PDF braucht einen Ausgabestream oder Callback
Änderungsarten sind insert, delete, replace und move; Seiten- und Absatzindizes sind nullbasiert, Zeichenanfänge sind 1-basierte UTF-16-Positionen, und Rechtecke decken semantische Zeilen im PDF-User-Space ab statt exakter Glyphen-Quadrate
PDF wählt side=before oder side=after, verifiziert das gewählte Dokument gegen jeden semantischen Seiten-Snapshot, ergänzt Highlights und Vorher/Nachher-Kommentare, speichert eine Prüfkopie und rollt die Quellgraph-Transaktion stets zurück
Eine Prüf-PDF ist eine vollständige Neuschreibung und braucht eine separate Signaturverifikation; der Vergleich lässt die geliehenen Quelldokumente und ihre Signaturen unverändert
Optionen und Grenzen
Generische options akzeptieren maxObjects, maxEdges, maxPages, maxDepth, maxDifferences, maxStreamBytes, maxTotalStreamBytes, maxValueBytes und maxPathBytes
Rendering akzeptiert dpi, colorSpace (rgb oder luminance), colorTolerance, minimumSimilarity, maxChangedPixelRatio, tileSize und maxChangedRegions; Callback-Operationen schreiben keine Heatmaps ins Dateisystem
Vertrags-options akzeptieren die Boolean-, Margen-, Similarity-, Boilerplate- und Ressourcenfelder aus THPDFContractCompareOptions, mit camelCase-Namen; granularity ist word oder sentence
Gemeinsame Budgets sind memoryBytes, outputBytes, resultBytes, timeMilliseconds, pixels, objectCount und pageCount; Optionen werden auf diese Budgets geklemmt
Speicherbudgets reservieren konservative Zuschläge für beide Dekodierpfade, Rendering-Pixel, Ausrichtungspeicher und private Ausgaben; sie sind Arbeitslastgrenzen statt einer Betriebssystem-RSS-Obergrenze, und bereits geladene Objektgraphen bleiben im Besitz des Aufrufers
Die JSON-Allokation wird mit einer konservativen Escaped-Größen-Schätzung geprüft, die ein Ergebnis verwerfen kann, dessen spätere UTF-8-Darstellung passen würde; HTML nutzt eine konservative Zeichen-Zulage innerhalb des Ausgabebyte-Budgets
Budgetüberschreitungen liefern ABI-Status 8, Abbruch liefert Status 4; Abbruch ist kooperativ an Seiten-, Objekt-, Streamblock-, Rendering-Objekt-, Pixelzeilen- und Ausrichtungsgrenzen
Der C-ABI-Fehlerkontrollumschlag hat ein unabhängiges Maximum von 8 KiB und kürzt Details auf 1024 UTF-16-Codeeinheiten, sodass ein Budgetfehler gemeldet werden kann, wenn das angeforderte Ergebnisbudget für eine Fehlerantwort zu klein ist
Geliehene C-ABI-Handles
Laden Sie jedes Handle mit seiner eigenen hpdf_io_v1-Quelle und rufen Sie hpdf_document_compare_json_v1(handle_a, handle_b, operation); die ABI-v1-Record-Layouts und der ursprüngliche Execute-Export bleiben unverändert
operation.input_io muss NULL sein, result_io muss Schreiben bereitstellen, und ein optionales output_io liefert das Artefakt; JSON-Dateischlüssel input, otherInput und output werden abgelehnt
Beide unabhängigen Quellen dürfen kurze Random-Access-Lesevorgänge liefern, und beide Abbruch-Callbacks werden abgefragt, selbst wenn ihre dekodierten Objekte gecacht sind; dasselbe Handle darf zweimal für einen Selbstvergleich übergeben werden
Halten Sie Eingabe-Callbacks und ihre Kontexte über die Handle-Lebensdauer und aktive Aufrufe am Leben und serialisieren Sie Operationen je Handle; Handle-Referenzen bleiben gehalten, bis der Vergleich zurückkehrt
Artefakte werden in privaten begrenzten Puffern aufgebaut und validiert, bevor sie über Callbacks veröffentlicht werden; Callbacks, die bei der Veröffentlichung fehlschlagen, können bereits akzeptierte Bytes behalten, während die Quelldokumente unverändert bleiben
Dateijobs
{"operations":[{"type":"compare.contract","input":"before.pdf",
"otherInput":"after.pdf","format":"html","output":"review.html"}]}
password und otherPassword entsperren die beiden Dateien unabhängig; JSON-Ausgabe darf einen Ausgabepfad weglassen und im Ergebnisumschlag bleiben
Ausgabepfade müssen sich von beiden Quelldateien unterscheiden, einschließlich vorhandener Hard-Link-Aliase; eine temporäre Datei im Zielverzeichnis wird geflusht und atomar veröffentlicht, nachdem alle Prüfungen bestanden sind, und bewahrt eine vorhandene Ausgabe bei Fehlern
Verwandte Themen
Dokumentvergleich · Vertragsvergleich · Annotierter Stream-Export