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