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