JSON- och C ABI-dokumentjämförelse

Jämför två laddade dokument via THPDFJobProcessor.ExecuteLoadedOperationWithComparison, två C ABI-handles via hpdf_document_compare_json_v1 eller två filer via JSON-jobbprocessorn

Allmänna lägen

type=compare accepterar mode-värdena pageCount, pageText, objectCount, renderedImage, full och structural; standard är structural

Lägena behåller native-beteendet i THPDFDocComparison, inklusive sidjustering och strukturella objektsignaturer; objectCount jämför också sid- och 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}
}

Resultatkuvertet innehåller comparison, comparisonComplete, identical, documentUpdated=false, förfluten tid och utdatastorlek; valfri binär utdata innehåller jämförelse-JSON:en utan kuvert

Gränser för genomlöpning, strömmar, värden, kvarhållna skillnader och rendering ger status=incomplete, comparisonComplete=false och identical=false, även när den granskade delmängden är lika

Kontraktgranskning

type=compare.contract justerar stycken, upptäcker förflyttningar och redogör för ord- eller meningsinsättningar, raderingar och ersättningar med både kontext och positioner

{
  "schemaVersion": 1,
  "type": "compare.contract",
  "format": "pdf",
  "side": "after",
  "options": {"granularity": "word", "ignoreRepeatedHeadersFooters": true,
              "excludedLineTexts": ["CONFIDENTIAL COPY"], "maxWorkUnits": 50000000}
}

format accepterar json, html eller pdf; JSON är standard, och HTML eller PDF kräver en utdataström eller callback

Ändringstyperna är insert, delete, replace och move; sid- och styckeindex är nollbaserade, teckenstarter är ettbaserade UTF-16-positioner, och rektanglar täcker semantiska rader i PDF-användarrymden snarare än exakta glyffyrsidingar

PDF väljer side=before eller side=after, verifierar det valda dokumentet mot varje semantisk sidögonblicksbild, lägger till överstrykningar och Before/After-kommentarer, sparar en granskningskopia och rullar alltid tillbaka källgrafens transaktion

En gransknings-PDF är en full omskrivning och kräver separat signaturverifiering; jämförelsen lämnar de lånade källdokumenten och deras signaturer orörda

Alternativ och gränser

Allmänna options accepterar maxObjects, maxEdges, maxPages, maxDepth, maxDifferences, maxStreamBytes, maxTotalStreamBytes, maxValueBytes och maxPathBytes

Rendering accepterar dpi, colorSpace (rgb eller luminance), colorTolerance, minimumSimilarity, maxChangedPixelRatio, tileSize och maxChangedRegions; callback-operationer skriver inga heatmaps till filsystemet

Kontrakt-options accepterar de booleska fält, marginaler, likhetsmått, boilerplate- och resursfält som finns i THPDFContractCompareOptions, med camelCase-namn; granularity är word eller sentence

Gemensamma budgeter är memoryBytes, outputBytes, resultBytes, timeMilliseconds, pixels, objectCount och pageCount; alternativen kläms till dessa budgeter

Minnesbudgeter avsätter konservativa utrymmen för båda avkodningsvägarna, renderingspixlar, justeringslagring och privat utdata; de är arbetsbelastningsgränser snarare än ett tak för operativsystemets RSS, och redan laddade objektgrafer förblir anroparens egendom

JSON-allokeringen kontrolleras med en konservativ uppskattning av den escapade storleken, vilket kan avvisa ett resultat vars slutliga UTF-8-representation skulle rymmas; HTML använder ett konservativt teckenutrymme inom utdata-byte-budgeten

Budgetfel returnerar ABI-status 8 och avbrott returnerar status 4; avbrott är kooperativa vid gränser för sidor, objekt, strömblock, renderingsobjekt, pixelrader och justering

C ABI:s felkontrollkuvert har ett oberoende max på 8 KiB och trunkerar detaljer till 1 024 UTF-16-kodenheter, vilket gör att ett budgetfel kan rapporteras när den begärda resultatbudgeten är för liten för ett felsvar

Lånade C ABI-handles

Ladda varje handle med sin egen hpdf_io_v1-källa och anropa hpdf_document_compare_json_v1(handle_a, handle_b, operation); ABI v1:s postlayouter och den ursprungliga execute-exporten förblir oförändrade

operation.input_io måste vara NULL, result_io måste tillhandahålla skrivning, och valfri output_io levererar artefakten; JSON-filnycklarna input, otherInput och output avvisas

Båda oberoende källorna får returnera korta slumpåtkomstläsningar, och båda avbrotts-callbacks pollas även när deras avkodade objekt är cachade; samma handle får ges två gånger för självjämförelse

Håll indata-callbacks och deras kontexter vid liv så länge handlen lever och anropen pågår, och serialisera operationer per handle; handlereferenser behålls tills jämförelsen returnerar

Artefakter byggs och valideras i privata avgränsade buffertar innan de publiceras via callbacks; callbacks som misslyckas under publiceringen kan behålla redan accepterade byte, medan källdokumenten förblir oförändrade

Filjobb

{"operations":[{"type":"compare.contract","input":"before.pdf",
  "otherInput":"after.pdf","format":"html","output":"review.html"}]}

password och otherPassword låser upp de två filerna oberoende av varandra; JSON-utdata får utelämna en utdatasökväg och stanna kvar i resultatkuvertet

Utdatasökvägar måste skilja sig från båda källfilerna, inklusive befintliga hårdlänkalias; en temporär fil i destinationskatalogen spolas och publiceras atomärt när alla kontroller godkänts, och en befintlig utdata bevaras vid fel

Relaterade ämnen

Dokumentjämförelse · Kontraktjämförelse · Annoterad strömexport