Comparaison de documents JSON et C ABI
Comparez deux documents chargés via THPDFJobProcessor.ExecuteLoadedOperationWithComparison, deux handles C ABI via hpdf_document_compare_json_v1, ou deux fichiers via le processeur de jobs JSON
Modes génériques
type=compare accepte les valeurs de mode pageCount, pageText, objectCount, renderedImage, full et structural ; le défaut est structural
Les modes conservent le comportement natif de THPDFDocComparison, y compris l’alignement de pages et les signatures structurelles d’objets ; objectCount compare aussi la structure de pages et d’objets
{
"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’enveloppe de résultat inclut comparison, comparisonComplete, identical, documentUpdated=false, le temps écoulé et la taille de sortie ; la sortie binaire optionnelle contient le JSON de comparaison sans son enveloppe
Les limites de parcours, de flux, de valeurs, de différences retenues et de rendu produisent status=incomplete, comparisonComplete=false et identical=false, même quand le sous-ensemble inspecté est égal
Revue de contrats
type=compare.contract aligne les paragraphes, détecte les déplacements et rapporte les insertions, suppressions et remplacements de mots ou de phrases avec leurs contextes et emplacements
{
"schemaVersion": 1,
"type": "compare.contract",
"format": "pdf",
"side": "after",
"options": {"granularity": "word", "ignoreRepeatedHeadersFooters": true,
"excludedLineTexts": ["CONFIDENTIAL COPY"], "maxWorkUnits": 50000000}
}
format accepte json, html ou pdf ; JSON est le défaut, et HTML ou PDF exige un flux de sortie ou un callback
Les types de changements sont insert, delete, replace et move ; les indices de pages et de paragraphes sont à base zéro, les débuts de caractères sont des positions UTF-16 à base un, et les rectangles couvrent les lignes sémantiques en espace utilisateur PDF plutôt que les quadrilatères exacts de glyphes
PDF sélectionne side=before ou side=after, vérifie le document sélectionné contre chaque instantané sémantique de page, ajoute surlignages et commentaires Before/After, sauvegarde une copie de revue et restaure toujours la transaction du graphe source
Un PDF de revue est une réécriture complète et exige une vérification de signatures séparée ; la comparaison laisse les documents sources empruntés et leurs signatures inchangés
Options et bornes
Les options génériques acceptent maxObjects, maxEdges, maxPages, maxDepth, maxDifferences, maxStreamBytes, maxTotalStreamBytes, maxValueBytes et maxPathBytes
Le rendu accepte dpi, colorSpace (rgb ou luminance), colorTolerance, minimumSimilarity, maxChangedPixelRatio, tileSize et maxChangedRegions ; les opérations par callbacks n’écrivent pas de heatmaps sur le système de fichiers
Les options de contrats acceptent les champs booléens, de marges, de similarité, de boilerplate et de ressources de THPDFContractCompareOptions, avec des noms camelCase ; granularity vaut word ou sentence
Les budgets partagés sont memoryBytes, outputBytes, resultBytes, timeMilliseconds, pixels, objectCount et pageCount ; les options sont clampées à ces budgets
Les budgets mémoire allouent des quotas conservateurs pour les deux chemins de décodage, les pixels de rendu, le stockage d’alignement et la sortie privée ; ce sont des limites de charge de travail, pas un plafond de RSS du système d’exploitation, et les graphes d’objets déjà chargés restent possédés par l’appelant
L’allocation JSON est vérifiée avec une estimation conservative de taille échappée, qui peut rejeter un résultat dont la représentation UTF-8 finale tiendrait ; HTML utilise un quota conservateur de caractères dans le budget d’octets de sortie
Les échecs de budget renvoient le statut ABI 8 et l’annulation le statut 4 ; l’annulation est coopérative aux frontières de pages, d’objets, de blocs de flux, d’objets de rendu, de rangées de pixels et d’alignement
L’enveloppe de contrôle d’erreurs du C ABI dispose d’un maximum indépendant de 8 Kio et tronque le détail à 1 024 unités de code UTF-16, ce qui permet de rapporter une erreur de budget quand le budget de résultat demandé est trop petit pour une response d’erreur
Handles C ABI empruntés
Chargez chaque handle avec sa propre source hpdf_io_v1 et appelez hpdf_document_compare_json_v1(handle_a, handle_b, operation) ; les dispositions de records ABI v1 et l’export execute original restent inchangés
operation.input_io doit être NULL, result_io doit fournir write, et output_io optionnel fournit l’artefact ; les clés JSON de fichiers input, otherInput et output sont rejetées
Les deux sources indépendantes peuvent renvoyer des lectures random-access courtes, et les deux callbacks d’annulation sont sondés même quand leurs objets décodés sont en cache ; le même handle peut être fourni deux fois pour une auto-comparaison
Gardez les callbacks d’entrée et leurs contextes vivants pendant la durée de vie du handle et les appels actifs, et sérialisez les opérations sur chaque handle ; les références de handles sont retenues jusqu’au retour de la comparaison
Les artefacts sont construits et validés dans des buffers privés bornés avant publication par callbacks ; les callbacks qui échouent pendant la publication peuvent retenir des octets déjà acceptés, tandis que les documents sources restent inchangés
File jobs
{"operations":[{"type":"compare.contract","input":"before.pdf",
"otherInput":"after.pdf","format":"html","output":"review.html"}]}
password et otherPassword déverrouillent indépendamment les deux fichiers ; la sortie JSON peut omettre un chemin de sortie et rester dans l’enveloppe de résultat
Les chemins de sortie doivent différer des deux fichiers sources, alias hard-link existants compris ; un fichier temporaire dans le répertoire de destination est flushé et publié atomiquement après que toutes les vérifications sont passées, en préservant une sortie existante en cas d’échec
Sujets liés
Comparaison de documents · Comparaison de contrats · Export de flux annoté