Confronto documenti JSON e C ABI

Confrontate due documenti caricati tramite THPDFJobProcessor.ExecuteLoadedOperationWithComparison, due handle C ABI tramite hpdf_document_compare_json_v1, o due file tramite il processore di job JSON

Modalità generiche

type=compare accetta valori mode pageCount, pageText, objectCount, renderedImage, full e structural; il default è structural

Le modalità conservano il comportamento nativo di THPDFDocComparison, incluso l'allineamento delle pagine e le firme strutturali degli oggetti; objectCount confronta anche la struttura di pagine e oggetti

{
  "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}
}

L'envelope del risultato include comparison, comparisonComplete, identical, documentUpdated=false, tempo trascorso e dimensione output; l'output binario opzionale contiene il JSON di confronto senza il proprio envelope

I limiti di traversal, stream, valori, differenze trattenute e rendering producono status=incomplete, comparisonComplete=false e identical=false, anche quando il sottoinsieme ispezionato è uguale

Revisione contrattuale

type=compare.contract allinea i paragrafi, rileva gli spostamenti e riporta inserzioni, cancellazioni e sostituzioni di parole o frasi con contesti e posizioni di entrambi i lati

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

format accetta json, html o pdf; JSON è il default, e HTML o PDF richiede uno stream o callback di output

I tipi di modifica sono insert, delete, replace e move; gli indici di pagina e paragrafo sono zero-based, gli inizi dei caratteri sono posizioni UTF-16 one-based, e i rettangoli coprono righe semantiche in user space PDF anziché quadrilateri esatti dei glifi

PDF seleziona side=before o side=after, verifica il documento selezionato contro ogni snapshot semantico di pagina, aggiunge highlight e commenti Before/After, salva una copia di revisione e riporta sempre indietro la transazione del grafo sorgente

Un PDF di revisione è una riscrittura completa e richiede una verifica delle firme separata; il confronto lascia invariati i documenti sorgente borrowed e le loro firme

Opzioni e limiti

Le options generiche accettano maxObjects, maxEdges, maxPages, maxDepth, maxDifferences, maxStreamBytes, maxTotalStreamBytes, maxValueBytes e maxPathBytes

Il rendering accetta dpi, colorSpace (rgb o luminance), colorTolerance, minimumSimilarity, maxChangedPixelRatio, tileSize e maxChangedRegions; le operazioni via callback non scrivono heatmap sul filesystem

Le options contrattuali accettano i campi booleani, di margine, similarità, boilerplate e risorse di THPDFContractCompareOptions, usando nomi camelCase; granularity è word o sentence

I budget condivisi sono memoryBytes, outputBytes, resultBytes, timeMilliseconds, pixels, objectCount e pageCount; le opzioni vengono clampate a questi budget

I budget di memoria allocano tolleranze conservative per entrambi i percorsi di decodifica, i pixel di rendering, lo storage di allineamento e l'output privato; sono limiti di workload anziché un tetto RSS del sistema operativo, e i grafi di oggetti già caricati restano di proprietà del chiamante

L'allocazione JSON viene controllata con una stima conservativa della dimensione escapata, che può rifiutare un risultato la cui rappresentazione UTF-8 finale ci starebbe; HTML usa una tolleranza conservativa di caratteri entro il budget di byte output

I fallimenti di budget restituiscono status ABI 8 e la cancellazione restituisce status 4; la cancellazione è cooperativa ai confini di pagina, oggetto, blocco stream, oggetto rendering, riga pixel e allineamento

L'envelope di controllo errori della C ABI ha un massimo indipendente di 8 KiB e tronca il dettaglio a 1.024 code unit UTF-16, permettendo di riportare un errore di budget quando il budget risultato richiesto è troppo piccolo per una risposta di errore

Handle C ABI borrowed

Caricate ogni handle con la propria sorgente hpdf_io_v1 e chiamate hpdf_document_compare_json_v1(handle_a, handle_b, operation); i layout dei record ABI v1 e l'export execute originale restano invariati

operation.input_io deve essere NULL, result_io deve fornire write, e l'opzionale output_io fornisce l'artefatto; le chiavi JSON file input, otherInput e output vengono rifiutate

Entrambe le sorgenti indipendenti possono restituire letture random-access brevi, e entrambi i callback di cancellazione vengono interrogati anche quando i propri oggetti decodificati sono in cache; lo stesso handle può essere fornito due volte per l'autoconfronto

Tenete i callback input e i loro contesti vivi per la vita dell'handle e le chiamate attive, e serializzate le operazioni su ogni handle; i riferimenti handle vengono trattenuti finché il confronto non restituisce

Gli artefatti vengono costruiti e validati in buffer privati limitati prima della pubblicazione via callback; i callback che falliscono durante la pubblicazione possono trattenere byte già accettati, mentre i documenti sorgente restano invariati

File job

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

password e otherPassword sbloccano indipendentemente i due file; l'output JSON può omettere un percorso output e restare nell'envelope del risultato

I percorsi output devono differire da entrambi i file sorgente, inclusi gli alias hard-link esistenti; un file temporaneo nella directory di destinazione viene flushato e pubblicato atomicamente dopo che tutti i controlli sono passati, preservando un output esistente in caso di fallimento

Argomenti correlati

Confronto documenti · Confronto contrattuale · Export annotato su stream