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