JSON- og C ABI-dokumentsammenligning
Sammenlign to indlæste dokumenter gennem THPDFJobProcessor.ExecuteLoadedOperationWithComparison, to C ABI-handles gennem hpdf_document_compare_json_v1 eller to filer gennem JSON-jobprocessoren
Generiske modes
type=compare accepterer mode-værdierne pageCount, pageText, objectCount, renderedImage, full og structural; standarden er structural
Modesne beholder den native THPDFDocComparison-adfærd, inklusive sidejustering og strukturelle objektsignaturer; objectCount sammenligner også side- og 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}
}
Resultatkonvolutten inkluderer comparison, comparisonComplete, identical, documentUpdated=false, forløbet tid og outputstørrelse; valgfrit binært output indeholder sammenlignings-JSON uden konvolut
Traversal-, stream-, værdi-, tilbageholdt-forskel- og renderingsgrænser giver status=incomplete, comparisonComplete=false og identical=false, selv når det inspicerede delsæt er ens
Kontraktgennemgang
type=compare.contract justerer afsnit, detekterer flytning og rapporterer ord- eller sætningsindsættelser, sletninger og erstatninger med både kontekster og lokationer
{
"schemaVersion": 1,
"type": "compare.contract",
"format": "pdf",
"side": "after",
"options": {"granularity": "word", "ignoreRepeatedHeadersFooters": true,
"excludedLineTexts": ["CONFIDENTIAL COPY"], "maxWorkUnits": 50000000}
}
format accepterer json, html eller pdf; JSON er standarden, og HTML eller PDF kræver en outputstream eller callback
Ændringskinds er insert, delete, replace og move; side- og afsnitsindeks er nul-baserede, tegnstarter er ét-baserede UTF-16-positioner, og rektangler dækker semantiske linjer i PDF user space snarere end eksakte glyph-firkanter
PDF vælger side=before eller side=after, verificerer det valgte dokument mod hvert semantisk side-snapshot, tilføjer highlights og Before/After-kommentarer, gemmer en review-kopi og ruller altid kildegraf-transaktionen tilbage
En review-PDF er en fuld omskrivning og kræver separat signaturverifikation; sammenligningen efterlader de lånte kildedokumenter og deres signaturer uændret
Options og grænser
Generiske options accepterer maxObjects, maxEdges, maxPages, maxDepth, maxDifferences, maxStreamBytes, maxTotalStreamBytes, maxValueBytes og maxPathBytes
Rendering accepterer dpi, colorSpace (rgb eller luminance), colorTolerance, minimumSimilarity, maxChangedPixelRatio, tileSize og maxChangedRegions; callback-operationer skriver ikke heatmaps til filsystemet
Kontrakt-options accepterer de booleske, margin-, ligheds-, boilerplate- og ressourcefelter fra THPDFContractCompareOptions med camelCase-navne; granularity er word eller sentence
Delte budgetter er memoryBytes, outputBytes, resultBytes, timeMilliseconds, pixels, objectCount og pageCount; options klemmes til disse budgetter
Hukommelsesbudgetter allokerer konservative rationer til begge dekodestier, renderingspixels, justeringslager og privat output; de er arbejdsbyrdegrænser snarere end et operativsystem-RSS-loft, og allerede indlæste objektgrafer forbliver kalder-ejet
JSON-allokering tjekkes med et konservativt escaped-størrelsesestimat, som kan afvise et resultat, hvis endelige UTF-8-repræsentation ville passe; HTML bruger en konservativ tegnration inden for output-byte-budgettet
Budgetfejl returnerer ABI-status 8, og cancellation returnerer status 4; cancellation er kooperativ ved side-, objekt-, streamblok-, renderingsobjekt-, pixelrække- og justeringsgrænser
C ABI-fejlkontrolkonvolutten har et uafhængigt maksimum på 8 KiB og afklipper detaljer til 1.024 UTF-16 code units, hvilket tillader, at en budgetfejl rapporteres, når det anmodede resultatbudget er for lille til en fejlrespons
Lånte C ABI-handles
Indlæs hvert handle med dets egen hpdf_io_v1-kilde og kald hpdf_document_compare_json_v1(handle_a, handle_b, operation); ABI v1 record-layouts og den originale execute-eksport forbliver uændret
operation.input_io skal være NULL, result_io skal levere write, og valgfri output_io leverer artefaktet; JSON filnøglerne input, otherInput og output afvises
Begge uafhængige kilder må returnere korte random access-læsninger, og begge cancellation-callbacks polles, selv når deres dekodede objekter er cachet; samme handle må sendes to gange til selvsammenligning
Hold input-callbacks og deres kontekster i live for handle-levetiden og aktive kald, og serialisér operationer på hvert handle; handle-referencer tilbageholdes, indtil sammenligningen returnerer
Artefakter bygges og valideres i private afgrænsede buffere inden callback-publicering; callbacks, der fejler under publicering, kan beholde allerede accepterede bytes, mens kildedokumenterne forbliver uændret
Filbaserede jobs
{"jobs":[
{"schemaVersion":1,"type":"compare.contract","input":"before.pdf",
"otherInput":"after.pdf","format":"html","output":"review.html"}]}
password og otherPassword låser de to filer uafhængigt op; JSON-output må udelade en outputsti og forblive i resultatkonvolutten
Outputstier må afvige fra begge kildefiler, inklusive eksisterende hard-link-aliasser; en midlertidig fil i destinationsmappen flushes og publiceres atomisk, efter alle tjek består, og bevarer en eksisterende output ved fejl
Relaterede emner
Dokumentsammenligning · Kontraktsammenligning · Annoteret stream-eksport