JSON- en C ABI-documentvergelijking
Vergelijk twee geladen documenten via THPDFJobProcessor.ExecuteLoadedOperationWithComparison, twee C ABI-handles via hpdf_document_compare_json_v1, of twee bestanden via de JSON job processor
Generieke modi
type=compare accepteert mode-waarden pageCount, pageText, objectCount, renderedImage, full en structural; de default is structural
De modi behouden het native THPDFDocComparison-gedrag, inclusief pagina-alignment en structurele object-signatures; objectCount vergelijkt ook pagina- en objectstructuur
{
"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}
}
De resultaat-envelop omvat comparison, comparisonComplete, identical, documentUpdated=false, verstreken tijd en uitvoergrootte; optionele binaire uitvoer bevat de comparison-JSON zonder diens envelop
Traversal-, stream-, waarde-, retained-difference- en rendering-limieten leveren status=incomplete, comparisonComplete=false en identical=false op, zelfs wanneer de geïnspecteerde subset gelijk is
Contract review
type=compare.contract aligneert paragrafen, detecteert verplaatsing en rapporteert woord- of zins-inserties, -deleties en -vervangingen met context en locatie
{
"schemaVersion": 1,
"type": "compare.contract",
"format": "pdf",
"side": "after",
"options": {"granularity": "word", "ignoreRepeatedHeadersFooters": true,
"excludedLineTexts": ["CONFIDENTIAL COPY"], "maxWorkUnits": 50000000}
}
format accepteert json, html of pdf; JSON is de default, en HTML of PDF vraagt een uitvoerstream of -callback
Change-kinds zijn insert, delete, replace en move; pagina- en paragraaf-indices zijn zero-based, character starts zijn one-based UTF-16-posities, en rechthoeken dekken semantic lines in PDF user space in plaats van exacte glyph-quadrilaterals
PDF kiest side=before of side=after, verifieert het gekozen document tegen elke semantic page-snapshot, voegt highlights en Before/After-comments toe, bewaart een review-kopie en rolt de brongraaf-transactie altijd terug
Een review-PDF is een volledige herschrijving en vraagt aparte signature-verificatie; vergelijking laat de geleende brondocumenten en diens signatures ongewijzigd
Options en grenzen
Generieke options accepteren maxObjects, maxEdges, maxPages, maxDepth, maxDifferences, maxStreamBytes, maxTotalStreamBytes, maxValueBytes en maxPathBytes
Rendering accepteert dpi, colorSpace (rgb of luminance), colorTolerance, minimumSimilarity, maxChangedPixelRatio, tileSize en maxChangedRegions; callback-operaties schrijven geen heatmaps naar het filesystem
Contract-options accepteren de boolean-, margin-, similarity-, boilerplate- en resource-velden uit THPDFContractCompareOptions, met camelCase-namen; granularity is word of sentence
Gedeelde budgetten zijn memoryBytes, outputBytes, resultBytes, timeMilliseconds, pixels, objectCount en pageCount; options worden afgeklemd op deze budgetten
Memory-budgetten alloceren conservatieve ruimtes voor beide decode-paden, rendering-pixels, alignment-opslag en private uitvoer; het zijn workload-limieten, geen RSS-cap van het besturingssysteem, en al geladen objectgrafen blijven in caller-eigendom
JSON-allocatie wordt gecheckt met een conservatieve escaped-size-schatting, die een resultaat kan weigeren waarvan de uiteindelijke UTF-8-representatie wel zou passen; HTML gebruikt een conservatieve character-ruimte binnen het output-byte-budget
Budgetfalen geeft ABI-status 8 terug en annulering status 4; annulering is coöperatief op pagina-, object-, stream-blok-, rendering-object-, pixel-rij- en alignemtegrenzen
De C ABI error control-envelop heeft een onafhankelijk maximum van 8 KiB en kapt details af op 1.024 UTF-16-code-units, zodat een budgetfout kan worden gerapporteerd wanneer het gevraagde resultaatbudget te klein is voor een error-response
Geleende C ABI-handles
Laad elke handle met diens eigen hpdf_io_v1-bron en roep hpdf_document_compare_json_v1(handle_a, handle_b, operation) aan; de ABI v1-record-layouts en de originele execute-export blijven ongewijzigd
operation.input_io moet NULL zijn, result_io moet write leveren, en optionele output_io levert het artefact; JSON file-keys input, otherInput en output worden geweigerd
Beide onafhankelijke bronnen mogen korte random-access-reads teruggeven, en beide annulerings-callbacks worden gepolled zelfs wanneer diens gedecodeerde objecten gecacht zijn; dezelfde handle mag twee keer worden meegegeven voor zelfvergelijking
Houd invoer-callbacks en diens contexten in leven voor de handle-levensduur en actieve aanroepen, en serialiseer operaties per handle; handle-referenties worden vastgehouden tot de vergelijking terugkeert
Artefacten worden gebouwd en gevalideerd in private begrensde buffers vóór callback-publicatie; callbacks die tijdens publicatie falen kunnen al geaccepteerde bytes achterlaten, terwijl de brondocumenten ongewijzigd blijven
File-jobs
{"operations":[{"type":"compare.contract","input":"before.pdf",
"otherInput":"after.pdf","format":"html","output":"review.html"}]}
password en otherPassword ontgrendelen de twee bestanden onafhankelijk; JSON-uitvoer mag een uitvoerpad weglaten en in de resultaat-envelop blijven
Uitvoerpaden moeten van beide bronbestanden verschillen, inclusief bestaande hard-link-aliases; een tijdelijk bestand in de destination-directory wordt geflushed en atomair gepubliceerd nadat alle checks slagen, met behoud van bestaande uitvoer bij falen
Verwante topics
Document comparison · Contract comparison · Annotated stream export