Comparaison native de documents headless
HPDFHeadlessCompare compare deux documents natifs chargés via HPDFCompareHeadlessDocuments ; l'ABI callback Linux expose la même implémentation à travers hpdf_document_compare_json_v1 avec type:compare
| Mode Pascal | Mode JSON | Contenu comparé |
|---|---|---|
| hcmPageCount | pagecount | Nombre de feuilles de l'arbre des pages |
| hcmPageText | pagetext | Nombre de pages et texte Unicode extrait |
| hcmObjectCount | objectcount | Nombre de pages et nombre d'objets xref physiquement utilisés |
| hcmRenderedImage | renderedimage | Nombre de pages, dimensions rendues et pixels Cairo natifs |
| hcmStructural | structural | Nombre de pages et graphes normalisés du catalog, de l'information et des objets inaccessibles |
| hcmFull | full | Nombre de pages et d'objets, graphes normalisés, texte Unicode et pixels rendus |
Équivalence structurelle
La comparaison structurelle résout les références indirectes et trie les entrées de dictionnaire, normalise les noms PDF et les représentations littérales ou hexadécimales des chaînes, puis décode les filtres de stream ordinaires avant de hacher le contenu avec SHA-256
Les numéros d'objets, l'ordre de sérialisation et la compression ordinaire des streams ne changent pas l'équivalence structurelle ; les encodages d'images terminaux conservent leur filtre et leur politique de décodage, tandis que les objets inaccessibles sont comparés comme un multiset
Les dictionnaires de chiffrement et les conteneurs de stockage xref ou object-stream sont exclus de la structure sémantique ; le contenu AES R5/R6 authentifié est comparé après déchiffrement, avec la permission d'extraction appliquée
Une différence structurelle signale le chemin au niveau document $Document ; les nombres d'objets physiques restent un mode séparé et peuvent différer quand un contenu équivalent utilise des dispositions de stockage différentes
Comparaison rendue
Chaque page est réellement rendue avec le device Cairo natif au DPI sélectionné ; les pixels des images décodées sont composés sur blanc et comparés en RGB ou en luminance
Les rapports contiennent les dimensions, le nombre de pixels modifiés, le delta maximal de canal, l'erreur absolue moyenne, le ratio de pixels modifiés et la similarité ; la similarité vaut 1 - meanAbsoluteError / 255
Un pixel change quand son delta maximal de canal dépasse ColorTolerance ; une page ne passe que si les dimensions correspondent et si la similarité et le ratio de pixels modifiés atteignent les seuils configurés
Le rendering exige les mêmes polices prises en charge, codecs d'images et sémantique graphique que le rendu natif des pages ; une page non prise en charge fait échouer la comparaison au lieu de produire un rapport identique
Exécution bornée
Les options de comparaison bornent le parcours, la profondeur, les objets, les streams décodés, la préparation du texte, le stockage des résultats et les pixels rendus ; l'annulation atteint le parcours, l'extraction de texte et le rendering
Gardez les deux instances de documents vivantes et détenues exclusivement pendant une comparaison Pascal ; leur contenu d'origine et leurs options de ressources sont préservés en cas de succès, d'échec ou d'annulation
L'ABI Linux accepte les six noms de modes en minuscules ci-dessus et des membres options stricts correspondant aux limites Pascal, plus dpi, colorTolerance, minimumSimilarity, maxChangedPixelRatio et colorSpace:rgb ou luminance
Les résultats ABI sont entièrement préparés et bornés avant la publication synchrone par callback ; les appels sur le même handle et les appels concurrents en ordre inverse utilisent l'ordre de verrouillage stable existant
Champs du rapport · Comparaison de contrats sémantiques · ABI C Linux natif