HotPDF Notes de version
Historique des versions de HotPDF : fonctionnalités visibles par l’utilisateur, corrections, mises à jour de compatibilité et évolutions de la documentation
Note : seuls les 800 derniers changements sont conservés
Last release
- Dernière version : 2.974.0 ; Date de publication : 2026-10-11
Version 2.974.0
Added
- Suppression des annotations de page par page exacte et nom Unicode, cascades de popups et de réponses incluses, via des API natives bornées, des transactions Windows, des jobs JSON et des callbacks versionnés avec permissions authentifiées et rollback de publication
Version 2.973.0
Added
- Échange d'annotations FDF binaires avec ressources d'apparence préservées, graphes d'objets partagés et destinations d'actions locales via API natives, échange Windows et callbacks versionnés
Version 2.972.0
Added
- Rendu des apparences par défaut d'annotations avec état de texte préservé, ajustement automatique, espacement de texte enrichi et clipping de texte, y compris les modes de rendu 4 à 7
Version 2.971.1
Fixed
- Prévention des échecs de vérification de plage dans le cache public de runs façonnés sur les builds FPC 3.3.1 Windows, en préservant la multiplication de hachage modulaire 32 bits explicite, l'isolation exacte des clés de cache et l'éviction LRU
Version 2.971.0
Added
- Correspondance du :scope racine et admission des pseudo-classes statiques hover, active et focus avec état d'interaction inactif, en préservant la négation, les sélecteurs logiques et relatifs, les requêtes de support et les apparences FDF/XFDF enregistrées
Version 2.970.0
Added
- Évaluation des groupes @supports de texte enrichi natif et des imports supports() avec requêtes de déclarations et de sélecteurs prises en charge, conditions imbriquées bornées, sondes conscientes des espaces de noms, récupération d'annulation et apparences FDF/XFDF enregistrées calculées
Version 2.969.0
Added
- Évaluation des expressions finies calc, min, max et clamp, des longueurs de viewport relatives à la racine et explicites, et des métriques finales de police pour les lignes et l'espacement dans le décodage de texte enrichi natif, les apparences de champs enregistrées et les imports FDF/XFDF enrichis
Fixed
- Admission cohérente des dimensions minimales de média, de la résolution et des tailles de police initiales exactes sur les cibles de compilation, tout en continuant de refuser les valeurs sous la limite prise en charge
Version 2.968.0
Added
- Évaluation du schéma de couleurs explicite du texte enrichi, des préférences de mouvement réduit, de transparence et de données, du contraste, des couleurs forcées et inversées et de la disponibilité des scripts, tout en préservant les préférences omises inconnues et les apparences enregistrées calculées
Version 2.967.0
Added
- Application des feuilles de style de texte enrichi liées et importées fournies par l'appelant avec jeux de titres preferred ou alternate partagés, résolution bornée des URI et de la base du document, et publication transactionnelle native, Windows et Linux FDF/XFDF
Version 2.966.0
Added
- Évaluation des media queries de texte enrichi natif avec profils print/screen explicites, conditions imbriquées et plages de fonctionnalités bornées, en conservant les styles calculés dans les apparences enregistrées et les imports FDF/XFDF transactionnels
Version 2.965.0
Added
- Création, clonage et édition transactionnels d'arbres de formulaires XFA natifs, en préservant les identités de nœuds survivants, le rollback d'événements, les occurrences de fusion vide prises en charge et les paquets de formulaires enregistrés, indépendamment des modèles d'origine
Version 2.964.0
Added
- Génération d'apparences natives plain, rich, shaped et family à partir de polices OpenType CFF2 complètes aux coordonnées de variation par défaut, en préservant l'identité des glyphes, l'Unicode, les largeurs et les permissions d'incorporation dans une sortie statique CID-keyed CFF 1 bornée
Version 2.963.0
Added
- Application des déclarations d'espaces de noms CSS scoped et des sélecteurs qualifiés aux champs de texte enrichi natifs et aux transactions de formulaires Windows/Linux, en préservant les apparences calculées, la recherche d'espaces de noms bornée, la publication exacte sans opération et la compatibilité checked-build
Version 2.962.0
Added
- Coupure du texte d'annotation raw-font généré aux frontières d'espaces et de tirets entre les runs de style, en préservant les caractères encodés complets, les coupures dures, le dimensionnement automatique et l'annulation bornée
Version 2.961.0
Added
- Rendu des apparences de texte d'annotation manquantes avec les programmes de police Type1C, CIDFontType0C et Type1 brut d'origine, en préservant les mappages Unicode, le dimensionnement automatique, l'espacement, la hauteur de ligne et les ressources immuables bornées
Version 2.960.0
Added
- Transport des apparences Form normal, rollover et down de Stamp XFDF standard avec ressources de polices et d'images incorporées, graphes acycliques bornés, transactions natives authentifiées et callbacks Windows/Linux existants
Version 2.959.0
Added
- Application des listes :not() complexes, des listes :is() et :where() tolérantes, des relations :has() ancrées et des positions :nth-child() filtrées aux feuilles de style internes de texte enrichi natif, en préservant la spécificité des sélecteurs, les valeurs calculées, les polices et les apparences FDF/XFDF transactionnelles
Version 2.958.0
Added
- Accès aux collections d'enfants Data DOM natives actives via indices numériques en lecture seule en JavaScript et FormCalc, en préservant l'ordre actuel des enfants, les références d'objets script conservées, les clones indépendants, les valeurs enregistrées et les apparences PDF
Fixed
- Rejet de l'affectation numérique, de la suppression et de la définition de propriétés à la fois sur les collections actives et dans les objets script lexicaux conservés, avec rollback d'événements borné et nouvelle tentative
Version 2.957.0
Added
- Application des sélecteurs d'attributs, des combinateurs de fratrie, des pseudo-classes structurelles et positionnelles, de la correspondance de langue héritée et de la négation composée aux feuilles de style internes de texte enrichi natif, en préservant les valeurs calculées réelles, les polices, les apparences enregistrées et les imports FDF/XFDF transactionnels
Version 2.956.1
Fixed
- Résolution des chemins de listes d'enfants nodes de FormCalc via le compilateur d'événements réel, en préservant les collections formulaires/propriétés actives, l'accès aux éléments du Data DOM, le replay borné, les valeurs natives enregistrées et les apparences PDF
Version 2.956.0
Added
- Génération d'apparences de champs natives plain, rich et shaped à partir de polices OpenType CFF complètes, en préservant les identités de glyphes indexées par nom, les jeux de caractères CID-keyed réels, les mappages Unicode, les permissions d'incorporation et les ressources de polices partagées ; rendu des apparences FreeText manquantes avec les défauts OpenType incorporés
Fixed
- Bornage de l'analyse CFF et des métriques de glyphes, conservation de l'annulation et des lecteurs immuables par style, et préservation du comportement TrueType sur les six cibles de compilation natives
Version 2.955.1
Security
- Rejet des secrets partagés X25519 et X448 tous nuls après sérialisation canonique des octets, y compris les entrées de bas ordre dont les membres faibles de champ sont non nuls, et maintien du résultat d'accord de clés à false avec un secret vide et un diagnostic frais
Fixed
- Préservation des constantes portables SHA3/SHAKE et de l'arithmétique intentionnelle modulo-2^64 d'accord de clés lorsque les vérifications de débordement d'entiers et de plage sont activées, y compris les échanges P-256, P-384 et P-521 pleine largeur sur Free Pascal 32 bits
Version 2.955.0
Added
- Ajout de collections d'enfants formulaires/propriétés JavaScript actives avec length, lectures indexées, item, namedItem, itération et clones indépendants ; conservation de l'identité du propriétaire entre les événements, les éditions d'instances répétées et la création implicite de propriétés, avec valeurs natives enregistrées et apparences PDF
Fixed
- Maintien des listes actives conservées attachées à leur propriétaire d'événement actuel, rejet des propriétaires supprimés sans re-ciblage d'une autre instance, et préservation des valeurs natives, de l'état conservé et du rollback de journal en cas d'échecs d'allocation de collection, d'opération et d'échéance
Version 2.954.0
Added
- Application des feuilles de style XHTML internes aux champs de texte enrichi natifs et aux imports FDF/XFDF avec sélecteurs de type, de classe et d'ID, combinateurs descendant et enfant, sélecteurs groupés, échappements d'identifiants Unicode, spécificité, importance et ordre source
Fixed
- Préservation des styles calculés dans les valeurs enregistrées réelles et les apparences de widgets, avec scan et correspondance bornés, annulation, octets sans opération commités exacts et rollback transactionnel des callbacks
Version 2.953.0
Added
- Ajout de collections de nœuds de requête XFA indépendantes avec opérations all, classAll, classIndex, clone et appartenance, références conservées stables, replay transactionnel borné et consommation native de PDF enregistrés
Fixed
- Maintien des gestionnaires d'instances requêtés conservés attachés au graphe d'événements actuel et évaluation des chemins SOM ordinaires et des prédicats dans les limites de pile par défaut et d'opération d'origine
Version 2.952.0
Added
- Préservation des destinations d'annotations GoToR distantes via l'échange XFDF natif, Windows ordinaire et callbacks versionnés, y compris les coordonnées exactes, les spécifications de fichiers Unicode et le comportement de fenêtre optionnel
Fixed
- Authentification des imports d'annotations de documents chargés ordinaires par rapport aux permissions de chiffrement, signatures et verrous de champs d'origine, tout en conservant les éditions autorisées de l'appelant et la durée de vie indépendante de la source ; lecture des entiers ByteRange de signature sans arrondi Single et détachement du stockage de chaînes RC4 partagé avant le chiffrement
Version 2.951.0
Added
- Rendu de bordures nuageuses bornées pour les annotations Square, Circle, Polygon et FreeText sans apparences normales, en préservant largeur, tirets, opacité et graphes sources ; partage d'octets de police générés immuables entre les vues FreeText sans frais de décodage répétés, tout en conservant les budgets d'analyse et l'annulation
Version 2.950.0
Added
- Création, clonage, renommage, insertion et suppression de nœuds Data DOM XFA natifs avec propriété bornée, espaces de noms hérités, références importées stables, rafraîchissement de liaison et rollback d'événements complet ; préservation des attributs UTF-8 et des références FormCalc conservées via le XML enregistré et les consommateurs PDF natifs
Version 2.949.0
Added
- Préservation de la distinction entre aucune option de choix sélectionnée et valeur d'export vide sélectionnée via l'échange XFDF natif, Windows et Linux, avec publication exacte sans opération, validation bornée et chargement vérifié de documents chiffrés
Version 2.948.0
Fixed
- Rendu des masques de glyphes remplis avec couverture de clipping fractionnaire capturée tout en préservant les chemins PDF, les motifs, l'alpha et les opérateurs de fusion, et vérification de la capacité mémoire de travail raster avant allocation
Version 2.947.1
Fixed
- Préservation des déclarations d'espaces de noms XML par défaut vides explicites pendant l'analyse et la sérialisation XFA, empêchant les sous-arbres de données non qualifiés d'hériter d'un espace de noms ancêtre après enregistrement et rechargement
Version 2.947.0
Added
- Rendu des bordures d'annotations rectangulaires biseautées et en retrait ainsi que des légendes de ligne Unicode ou enrichies mesurées, en préservant l'opacité, les décalages d'extrémités, les apparences existantes, les ressources de polices bornées et le clipping d'annotations
Version 2.946.3
Fixed
- Application de xfa.host.resetData via des événements natifs sans le méprendre sur un import XML de données, en préservant les défauts du modèle, les valeurs liées, les portées répétées, les éditions en attente et le rollback transactionnel
Version 2.946.2
Fixed
- Correction de l'arithmétique de mots SHA-1, SHA-256, SHA-384 et SHA-512 avec vérifications de plage et de débordement du compilateur activées, en préservant les condensés valides et l'authentification par mot de passe AES-256 sans modification des interfaces publiques
Version 2.946.1
Fixed
- Préservation des attributs XFA présents-vides et des noms, valeurs, espaces de noms et requêtes indexées UTF-8 via la sérialisation XML native, les défauts de propriétés persistants, les événements de script répétés et le rollback transactionnel
Version 2.946.0
Added
- Rendu du texte d'annotation enrichi temporaire avec permissions de polices Preview/Print en lecture seule explicites et octets de polices complètes inchangés, en préservant les politiques d'incorporation modifiables et les apparences Screen existantes sans espaces réservés de médias implicites
Version 2.945.0
Added
- Préservation des destinations de pages d'annotations locales et nommées via l'échange XFDF natif et hérité, avec jetons décimaux bornés exacts, XML Adobe qualifié, validation des attributs dupliqués et publication transactionnelle de callbacks Windows/Linux
Version 2.944.0
Added
- Gestion des éléments d'affichage et d'export de choix XFA actifs via JavaScript et FormCalc, en préservant les alias survivants, les sélections dupliquées ou vides exactes, les listes natives par instance et les apparences PDF natives ou héritées enregistrées sous limites de mutation bornées
Version 2.943.1
Fixed
- Préservation des octets exacts du PDF chargé lorsque les transactions natives de texte enrichi mixtes scalaires et typées ou les lots vides n'apportent aucun changement, en conservant les éditions de graphe en attente, les politiques de signature et de chiffrement authentifiées, les limites de ressources et la publication atomique
Version 2.943.0
Added
- Échange du XFDF d'annotations mappé via les jobs de fichiers Windows et les callbacks V1 d'origine avec transactions d'ajout authentifiées, données binaires et Unicode bornées, octets sans opération exacts et publication atomique
Version 2.942.0
Added
- Rendu des annotations prises en charge sans apparences normales via géométrie temporaire bornée, extrémités de ligne, icônes et FreeText Unicode, en conservant les ressources sources, le texte enrichi, les indicateurs view/print et l'annulation
Version 2.941.1
Fixed
- Validation de l'unicité des sélections de choix XFA natives avec tri borné annulable tout en préservant les valeurs d'export exactes sensibles à la casse, l'ordre de sélection d'origine et le comportement transactionnel d'échec
Version 2.941.0
Added
- Application du CSS natif en cascade indépendante et de l'espacement des lettres et des mots typé d'origine aux runs façonnés, lignes physiques, ajustement et apparences enregistrées, avec sérialisation de points calculée, arrondi décimal exact et publication JSON transactionnelle Windows/Linux
Version 2.940.0
Added
- Échange de dix-huit types d'annotations mappés via le XFDF natif borné et les opérations JSON V1 Linux, en préservant les contenus enrichis Unicode, les légendes d'appel, les couleurs transparentes, les pièces jointes binaires, les liens de popups et de réponses transférées, les permissions authentifiées et la publication d'ajout transactionnelle
Version 2.939.0
Added
- Création de champs combo et liste XFA hérités avec exports d'instances répétées exacts, étiquettes d'affichage, indices sélectionnés, positions de défilement et apparences Unicode stylées, en préservant les indicateurs de champs hauts et le rollback par champ avec une fabrique de choix détachée à police fournie et un mode métadonnées uniquement
Version 2.938.0
Added
- Rendu des quatre intentions de couleurs standard à travers les états graphiques, formulaires, images, dégradés, motifs et groupes de transparence avec substitutions d'images, repli relatif pour les noms inconnus et cache de transformations ICC borné et annulable
Version 2.937.0
Added
- Création de groupes de boutons radio XFA hérités indépendants à partir des portées d'instances répétées réelles, en préservant les exports exacts, les états sélectionnés et les légendes Unicode stylées avec rollback d'adoption de groupe entier et une API native d'apparence de membres détachée à police fournie
Version 2.936.1
Added
- Analyse des dictionnaires et trailers PDF valides avec vérification de débordement arithmétique activée en retenant explicitement les 32 bits bas de la multiplication de hachage FNV
Version 2.936.0
Added
- Liaison des hauteurs de ligne de texte enrichi JSON typées explicites aux apparences enregistrées Windows et Linux, en préservant les runs d'origine, les métriques parentes fournies, la planification agrégée bornée et les mises à jour transactionnelles de champs mixtes
Version 2.935.1
Added
- Comptage des caractères Unicode supplémentaires une seule fois dans les apparences de mot de passe XFA portables, conservation des valeurs d'origine et application des budgets de glyphes agrégés avant l'allocation des masques avec annulation à granularité scalaire
Version 2.935.0
Added
- Préservation de la hauteur de ligne du texte enrichi, des longueurs CSS calculées, des facteurs hérités et des métriques de police parentes via la mise en page native, les apparences enregistrées, les jobs de fichiers Windows et les callbacks, et les imports JSON FDF/XFDF Linux avec planification de polices de métriques bornée
Version 2.934.0
Added
- Création d'apparences XFA héritées Unicode réelles pour les champs texte, numériques, de date et de mot de passe avec famille et style de police effectifs par instance, ressources de polices incorporées modifiables, masquage scalaire des mots de passe et adoption transactionnelle des ressources
Version 2.933.0
Added
- Évaluation des fonctions de couleurs cubiques échantillonnées multidimensionnelles avec la convention scalaire à quatre nœuds existante, repli linéaire en dimension courte, travail tensoriel borné, annulation et interpolation scalaire inchangée
Version 2.932.0
Added
- Décodage des composantes JPEG 2000 signées et non signées sur 26 bits avec précision mixte, sous-échantillonnage et opacité, normalisation des échantillons bornés et ignorance des déclarations BitsPerComponent d'images JPX avant le rendu
Version 2.931.0
Added
- Préservation des états d'export on, off et neutre des cases à cocher XFA héritées, des légendes Unicode stylées et des paquets d'apparences natifs, encodage cohérent des noms PDF spéciaux, et restauration des ressources de page directes après adoption de widgets annulée
Version 2.930.0
Added
- Évaluation des applications d'utilisation de contenu optionnel automatiques avec contexte de zoom, de langue et d'utilisateur explicites, sélections manuelles natives persistantes et état d'opération JSON Linux borné ; invalidation des contextes de rendu empruntés après modifications du document
Version 2.929.0
Added
- Construction de texte scalaire, cellules comb, étiquettes de choix et marques de boutons à partir de familles de polices ordinaires fournies ordonnées via les setters natifs, les jobs Windows et les callbacks versionnés Windows/Linux ; préservation des métadonnées scalaires ordinaires et distinction d'une sélection de choix vide d'un export vide sélectionné
Version 2.928.0
Added
- Le rendu des tableaux de tirets et de leurs phases ExtGState passe par un balayage typé et borné des tableaux PDF, en préservant les commentaires, la validation stricte des opérandes, la géométrie de tracé héritée, l’annulation et les tableaux de texte ordinaires
Version 2.927.0
Added
- Les libellés scalaires et enrichis des boutons poussoirs ApplyXFAAsAcroForm Windows d’origine se peignent avec les programmes famille/style réellement installés, des surcharges par instance persistantes et des bundles d’apparences natives normal/down/rollover, avec enregistrement des véritables ressources de polices AcroForm
Version 2.926.0
Added
- Le raccourci CSS de police inline se déplie, dans une limite bornée, en candidats indépendamment cascadés pour la taille, la graisse, l’italique et les familles fournies, en préservant les tailles relatives héritées, les resets des styles omis, les priorités important par composante et les apparences de police réellement enregistrées
Version 2.925.0
Added
- Les familles de polices fournies par l’appelant sont sélectionnées dans l’ordre pour les graphèmes complets de texte enrichi stylé, via les jobs de fichiers Windows et les callbacks V1, en préservant les candidats CSS et typés, les transactions à valeur vide authentiques et les budgets globaux de polices
Version 2.924.0
Added
- Les groupes de contenu optionnel par défaut du document et leurs expressions d’appartenance se rendent dans le contenu de page marqué, les Form XObjects et les annotations, l’état des graphiques et du texte masqués est préservé, et l’usage explicite vue ou impression est exposé via l’interface JSON V1 native de Linux
Version 2.923.0
Added
- Les listes ordonnées de polices candidates du texte enrichi sont préservées dans les apparences natives et le JSON V1 de Linux, et les runs scalaires et typés d’origine mixtes se lient aux jobs de fichiers Windows et aux callbacks V1 inchangés, avec peinture précise, programmes de style fournis et publication en deux phases
Version 2.922.0
Added
- La visibilité vue ou impression des annotations natives suit les règles Invisible de PDF 2.0, les apparences statiques RichMedia et Projection et les transforms Text implicites sont reconnus, et le remplacement atomique PNG Windows reste borné et annulable avec les diagnostics d’erreur OS réels
Version 2.921.0
Added
- Les libellés scalaires et XHTML des boutons poussoirs XFA natifs se rendent avec les programmes famille et style réellement fournis, les séparateurs inline et le padding d’origine préservés, les apparences normal/down/rollover effectives, la visibilité des libellés et des surcharges par instance répétée persistantes
Version 2.920.1
Fixed
- Les mutations PDF réussies via la C ABI native de Linux restent alignées sur l’instantané source validé, si bien que des imports FDF ou XFDF ultérieurs à valeur identique préservent les valeurs de formulaire publiées exactes, les apparences typées, le texte dessiné et les pages importées au lieu de restaurer des octets d’entrée périmés
Version 2.920.0
Added
- Les champs scalaires mixtes et les runs enrichis typés d’origine s’enregistrent en une transaction de document atomique indépendante, les valeurs d’apparence précises et les programmes de polices fournis sont conservés, les politiques authentifiées et les éditions courantes du graphe préservées, et les no-ops d’apparence réellement en lecture seule sont reconnus
Version 2.919.0
Added
- Les graphèmes Unicode stylés complets se résolvent via les familles de polices candidates explicitement fournies, les valeurs saisies et les styles d’apparence précis sont préservés, un fallback JSON natif Linux opt-in est exposé via les callbacks V1 inchangés, et le quota global réel de polices est retenu pendant le chargement des programmes configurés
Version 2.918.0
Added
- Les libellés booléens XFA natifs se rendent depuis le XHTML effectif et les polices de style nommées fournies, les overlays d’instances répétées et le XML runtime enregistré sont préservés, et les réserves automatiques de libellés sont mesurées avec les étendues logiques finales des lignes de texte
Version 2.917.0
Added
- De véritables programmes famille et style nommés sont sélectionnés pour les imports FDF et XFDF Windows via des chemins de fichiers imbriqués ou les callbacks de polices versionnés existants, et les lectures synchronisées de sources aléatoires sont isolées de la publication séquentielle des transactions
Version 2.916.0
Added
- Les 182 CMaps historiques intégrées se décodent et se rendent avec des codes bornés d’un à quatre octets, les modes d’écriture parent et enfant exacts, des mappings Unicode, une récupération déterministe des codes malformés, un héritage annulable et les notices de redistribution fournies
Version 2.915.0
Added
- Les options sélectionnées des listes XFA natives restent visibles grâce aux fenêtres de sélection en métriques de police et aux indices de début persistés, les tableaux complets d’options et de valeurs sont préservés, et les changements de police par instance répétée ainsi que le rollback d’événements sont retenus avec une préparation bornée des glyphes visibles
Version 2.914.1
Fixed
- Les hits du cache mémoire au premier plan se chevauchent avec l’annulation coopérative du prefetch après acquisition de la réservation mémoire réelle, la télémétrie du cache d’opérations est préservée et l’annulation est revérifiée après les attentes de verrou de cache ou de réservation, tout en gardant l’ordre strict des miss et la jointure des threads
Version 2.914.0
Added
- Les apparences booléennes XFA natives se créent avec six marques personnalisées, des bordures rondes ou carrées, des couleurs et tailles de marques, cinq placements de libellé et des polices de libellé embarquées partagées ; les alias d’export Unicode réversibles et les états neutres légaux distincts sont préservés à travers l’exécution d’événements et le rechargement du PDF enregistré
Version 2.913.2
Fixed
- Les codes-barres matriciels complets pivotés se décodent avant les fragments déconnectés et les mismatch exacts de finder QR sont rejetés avant l’échantillonnage de la grille complète, avec un groupage plus serré, le comportement d’origine des codes-barres linéaires, des budgets de scan atomiques et l’échéance de deux secondes inchangée
Version 2.913.1
Added
- Les valeurs XFA implicites existantes se résolvent via des contextes de données vivants bornés, sans répéter le parsing de sélecteurs imputé au quota des opérations de script, en préservant les échéances de transaction d’origine et le comportement de binding explicite
Version 2.913.0
Added
- Les familles de polices enrichies natives configurées sont sélectionnées via les callbacks JSON V1 Linux inchangés pour les remplissages typés et les imports FDF ou XFDF, les programmes famille et style réellement requis se chargent avec des budgets globaux, et les deux profils enrichis implémentés sont annoncés
Version 2.912.0
Added
- Les FDF et XFDF réels s’importent et s’exportent via les jobs de fichiers Windows et les callbacks V1, avec entrée possédée immuable, préparation du graphe courant non enregistré, apparences enrichies réelles à quatre polices, politiques AES signées authentifiées et commit du contexte seulement après le succès des deux callbacks de sortie
Version 2.911.0
Added
- Les tracés rectangle, ligne et arc XFA natifs et les images PNG ou JPEG inline se créent avec décodage réel des échantillons, masques alpha, ratio ajusté et pose pivotée, préparation bornée et possession transactionnelle sous annulation
Version 2.910.0
Added
- Les apparences d’annotations NoZoom et NoRotate s’ajustent autour de l’ancre rectangle transformée en haut à gauche, en préservant UserUnit, la géométrie ajustée du formulaire, l’opacité et le clip réel de la page à travers échelle et rotation
Version 2.909.0
Added
- Les vraies familles TrueType nommées fournies sont sélectionnées par run enrichi et déclaration font-family XHTML bornée, les métriques de style et les caches de marques par famille sont préservés, et les valeurs enrichies réelles FDF ou XFDF s’importent avec une comparaison canonique sensible à la famille
Version 2.908.1
Fixed
- Les déclarations enrichies inline valides s’appliquent avec une priorité important indépendante, des bases font-size calculées englobantes et les propriétés héritées explicites, en préservant les frontières des commentaires CSS et des déclarations entre guillemets ou fonctionnelles
Version 2.908.0
Added
- De vraies combo boxes, list boxes, listes multi-sélection, cases à cocher et groupes de boutons radio à portée structurelle XFA natifs se créent directement depuis les données runtime enregistrées, avec libellés display/export appariés, éléments par instance, flags d’accès et états d’apparence natifs indépendants
Version 2.907.1
Fixed
- Les échappements hexadécimaux PDF réels et les octets UTF-8 se décodent dans les champs de formulaire à valeur de nom et hérités, en préservant les états d’export de boutons espacés, ponctués et Unicode à travers le rechargement natif du document enregistré
Version 2.907.0
Added
- Les identités de glyphes CFF CID-keyed réelles et les substitutions notdef bornées se rendent via les mappings CID-to-GID effectifs des polices, en préservant l’extraction de texte indépendante et les vérifications d’annulation tout au long du parsing des CMaps échappées
Version 2.906.0
Added
- Les marques combinées inter-styles se positionnent via les bounds réels des glyphes sélectionnés et les classes combinatoires canoniques quand les ancres d’attachement sont absentes, avec échelles de polices indépendantes, empilement du même côté et directions d’éléments réellement résolues pour les doubles marques
Version 2.905.1
Fixed
- Les paramètres de predictor échappés se résolvent dans le vrai dictionnaire DecodeParms et le token réel du flux se localise après la syntaxe équilibrée du dictionnaire externe, en préservant les payloads xref binaires à valeur d’espacement lors du chargement Windows ordinaire
Version 2.905.0
Added
- Les arbres de pages PDF natifs, les champs éditables répétés, les boutons poussoirs et le texte statique Unicode se créent directement depuis les valeurs XDP et runtime enregistrées sur Linux et Windows, avec de vraies apparences embarquées et une préparation bornée des candidats avant sortie vers l’appelant
Version 2.904.2
Fixed
- Les vrais dictionnaires externes des flux de références croisées se lisent sans confondre les paramètres de chiffrement imbriqués, les noms d’entrées échappés se résolvent et les dictionnaires de chiffrement directs sont préservés dans les révisions incrémentales Windows ordinaires
Version 2.904.1
Fixed
- Les contrôles complets de direction de paragraphe et les crochets appariés sont préservés à travers le shaping autonome automatique et le wrap simple des champs multilignes, avec contextes de jointure par ligne physique, cache de paragraphes immuable et sortie totale de glyphes bornée
Version 2.904.0
Added
- Le runtime natif XFA — JavaScript, journal d’événements, Data DOM, XML, FormCalc et locales ICU — s’exécute sur Linux avec des baux de modules partagés possédés et de vraies horloges monotones, tout en préservant l’initialisation Unicode Windows existante
Version 2.903.1
Fixed
- Les clusters de shaping Unicode à direction seule gardent une avance d’espacement de caractères nulle, tout en conservant les contrôles logiques, les identités de glyphes et l’espacement normal des clusters visibles et des mots
Version 2.903.0
Added
- Les embeddings directionnels, overrides, isolates et le contexte de paragraphe à crochets appariés sont préservés à travers les lignes de styles enrichis repliées, des API bornées dérivées des paragraphes et ordonnant les lignes physiques via un cache sont exposées, et les éléments de ligne réels se façonnent avec niveaux et scripts résolus
Version 2.902.0
Added
- Les FDF et XFDF stylés s’importent et s’exportent via de vrais callbacks JSON C ABI Linux, les font faces configurées s’embarquent réellement, les politiques de signature et les octets source privés exacts sont préservés pour les imports no-op, et l’état courant du document n’est publié qu’après le succès des deux sorties de callback
Version 2.901.0
Added
- Les dégradés mesh à patchs Coons et tensor se rendent avec une géométrie cubique bornée, une interpolation de couleurs dans l’espace source, des arêtes de continuation, la gestion des plis et des limites transactionnelles de ressources et d’annulation
Version 2.900.0
Added
- Le XML du Data DOM XFA natif, conscient des namespaces, se charge et s’enregistre de façon transactionnelle, le contenu mixte ordonné et les identités de data binding sont préservés, les valeurs hôtes se quotent en temps linéaire et un bail exact de module JavaScript par session est retenu via un replay borné du moteur
Version 2.899.0
Added
- Les marques combinées stylées s’attachent aux vraies ancres GPOS de base, de ligature et de marque avec des échelles de polices indépendantes, les contours de glyphes à origine négative sont préservés dans les clips des widgets enrichis et des étendues de ligne ajustées sont réservées aux marques empilées visibles
Version 2.898.0
Added
- Le texte enrichi FDF et XFDF se lit et s’écrit de façon bornée, les spans de style XHTML natifs se décodent en quatre véritables styles de police embarqués et les apparences réelles s’importent transactionnellement dans des PDF signés ou chiffrés, avec comparaison canonique des valeurs enrichies existantes en lecture seule
Version 2.897.0
Added
- Les spans de style Unicode sélectionnés se façonnent avec le vrai contexte HarfBuzz environnant, des API natives d’ordre et de direction de paragraphe sont exposées et les éléments enrichis typés se placent dans les lignes physiques réellement repliées, en préservant les styles logiques et la possession des objets
Version 2.896.0
Added
- Le SOM de binding XFA natif se résout à travers des portées de données répétées, avec traversée bornée des descendants, noms échappés, matching Unicode, fallbacks par instance pour les feuilles manquantes et synchronisation transactionnelle des valeurs runtime
Version 2.895.1
Fixed
- Le support statique des événements XFA natifs se compile une fois par moteur JavaScript possédé et rejoue intégralement les arguments compacts d’événements dynamiques, en préservant les closures, les réponses hôtes enregistrées, l’isolation des instances, les budgets de journal d’origine et les échéances de transaction pendant le rollback
Version 2.895.0
Added
- Les octets FDF et XFDF réels s’importent et s’exportent via les callbacks JSON natifs Linux versionnés existants, les valeurs de champs Unicode, la sécurité AES et les politiques de signature authentifiées sont préservées, et le document courant subit un rollback après un échec de sortie ou de publication de résultat
Version 2.894.0
Fixed
- Le texte enrichi typé trop large se replie aux frontières complètes de graphèmes Unicode à travers les styles de police et de couleur, les plages stylées réelles sont mesurées avant l’affectation des lignes et les clusters surdimensionnés indivisibles, les tailles en points mixtes et l’espacement explicite des caractères sont préservés
Version 2.893.1
Security
- Les preuves CRL et OCSP signées Adobe requises sont authentifiées dans de véritables horodatages de document RFC3161 avant d’accepter les mises à jour de formulaire protégées par politique de signature, avec refus transactionnel maintenu pour des preuves manquantes, révoquées, expirées ou non fiables
Version 2.893.0
Added
- Les données scalaires de champs FDF et XFDF natives se lisent et s’écrivent de façon bornée, et les apparences réelles Unicode, choice et bouton s’importent transactionnellement dans des PDF publiés indépendamment, en préservant les politiques de signature authentifiées et le chiffrement AES
Version 2.892.0
Added
- Les dégradés mesh triangulaires free-form et lattice se rendent de façon bornée avec les sémantiques réelles de coordonnées, flags, fonctions, couleurs et transparence, et les flux de palettes Indexed hexadécimaux se décodent exactement une fois
Version 2.891.0
Added
- Les commentaires XML et processing instructions XFA natifs ordonnés sont préservés à travers l’import d’événements, la sérialisation, le clonage et le rollback transactionnel, tout en les excluant de la sélection d’éléments par texte scalaire, texte enrichi et SOM
Version 2.890.1
Fixed
- Les verrous transitoires de publication atomique Windows se récupèrent avec au plus huit tentatives de remplacement annulables, en préservant les cibles exactes, les octets préparés, les erreurs OS permanentes et le nettoyage du staging possédé
Version 2.890.0
Added
- Les groupes Unicode légaux — mots, espaces insécables, ponctuation et nombres — sont préservés à travers les runs de styles enrichis typés, les groupes entiers s’ajustent avec les avances réelles des polices stylées, les lignes de base à tailles mixtes sont retenues et les CRLF fusionnent à travers les coutures de styles
Version 2.889.0
Added
- Les alias scalaires XFA matérialisés, cachés et invisibles, se synchronisent après les commits des champs visibles, tout en préservant les portées de données répétées natives, les valeurs vides explicites et le rollback transactionnel exact
Version 2.888.0
Added
- Les propriétés complètes d’Unicode 17 et la rupture de ligne contextuelle s’appliquent via les API de document existantes, des requêtes portables de propriétés brutes ou résolues LB1 sont exposées, les ordinaux d’enum établis et les contrats de tailoring sont préservés, et les interdictions de tirets conditionnels sont honorées
Version 2.887.0
Added
- Le XML exData XFA natif persistant s’importe et se sérialise avec lectures immédiates par script, préservation des namespaces et du contenu mixte, identités d’instances répétées retenues, rollback transactionnel et rendu XHTML enregistré réel
Version 2.886.0
Added
- Des horodatages de document PDF RFC3161 autonomes se créent et s’authentifient avec streaming borné, empreintes SHA256, SHA384 ou SHA512, identité TSA de confiance et binding de nonce, déclarations d’extensions ESIC requises et exceptions de certification ou de verrouillage de champ authentifiées
Version 2.885.0
Added
- Les opportunités de césure par défaut d’Unicode 17 sont exposées et consommées dans les vrais champs enrichis natifs, en préservant les groupes d’espaces insécables, de tirets et de ponctuation ainsi que les séparateurs explicites Unicode avec les valeurs V et RV d’origine exactes
Version 2.884.0
Added
- Les frontières de graphèmes étendus par défaut d’Unicode 17 sont exposées de façon portable et les mots enrichis trop larges se replient aux clusters complets, en retenant le contenu d’apparence Unicode réel et en corrigeant les changements de largeur des formes de liaison après le shaping de sous-chaînes
Version 2.883.0
Added
- Les valeurs enfants image et géométriques XFA natives persistantes se créent et le rendu couvre le vrai alpha PNG, le DPI des images et la géométrie de ratio, en préservant l’isolation des instances répétées et le rollback transactionnel ; les pixels d’images FPC qui s’affichaient en noir sont corrigés
Version 2.882.0
Added
- Les ressources de polices réelles des flux enfants et les paramètres de texte PDF sont hérités dans le rendu Form, Type3 et Pattern, les sauvegardes de texte de l’état graphique sont préservées, le texte Type3 invisible est honoré et les défauts d’apparence indépendants des annotations sont réinitialisés
Version 2.881.0
Added
- Les signatures CAdES détachées standard s’authentifient automatiquement avec le binding requis du certificat signant, et les chaînes Contents littérales réelles hexadécimales ou échappées se lisent de façon cohérente pour la vérification, les mises à jour de formulaire permises et les preuves de validation à long terme
Version 2.880.2
Fixed
- L’alignement des paragraphes enrichis est conservé à travers les runs initiaux vides, les changements de style inline et les sauts de ligne explicites, et les bordures rectangle ou cercle demandées ainsi que les lignes surlignées mesurées se peignent au lieu d’être omises silencieusement
Version 2.880.1
Fixed
- L’annulation est observée avant l’allocation du renderer de pages et l’installation du contexte ainsi que pendant l’initialisation, un contexte de couleurs actif de l’appelant est préservé quand la construction est rejetée d’emblée, et les display lists empruntées sont libérées sans publier de bitmaps partiels
Version 2.880.0
Added
- Les valeurs réelles de dessin et de libellé scalaires XFA natives se rendent après création par script, les valeurs explicitement vides et l’isolation des instances répétées sont préservées, et un rollback exact est retenu quand le dessin natif ultérieur épuise son budget
Version 2.879.0
Added
- Les valeurs enfants scalaires XFA natives persistantes se créent avec synchronisation immédiate champ, données et alias partagés, persistance typée du formulaire, commits de widgets, isolation des instances répétées et rollback transactionnel exact
Version 2.878.0
Added
- De véritables profils d’apparence de signature Windows se génèrent avec polices Unicode embarquées pour les widgets fusionnés et séparés, les workflows de rotation, chiffrement et certification, et l’AppearanceFilter requis est appliqué au profil réellement généré
Version 2.877.0
Added
- Les motifs PDF de tuilage et de dégradé, colorés ou non, se rendent réellement avec origines de motif héritées, cellules imbriquées, recouvrement, peintures de tracé et stencil, transparence et annulation bornée sur les cibles natives Linux et Windows
Version 2.876.1
Fixed
- Le binding SOM XFA complet et la sélection réelle des données d’instances émises sont préservés lors de l’application des défauts de formulaire et template pour instances manquantes, sans emprunter de valeurs à une autre occurrence répétée
Version 2.876.0
Added
- Les preuves CRL et OCSP authentifiées s’embarquent dans les attributs Adobe RevocationInfoArchival Windows signés, les politiques de seed réelles s’appliquent et le statut de confiance, l’autorisation de réponse et la fraîcheur sont validés avant publication des signatures
Version 2.875.0
Added
- Les défauts réels des champs XFA se résolvent sans fabriquer de données à la lecture, les valeurs d’instances explicitement vides sont préservées et les éditions écrivent des données d’instance indépendantes sans modifier les templates partagés
Version 2.874.0
Added
- Les champs de texte enrichi natifs s’éditent avec des runs de styles Unicode typés, de vraies polices embarquées regular, bold, italic et bold-italic, des lignes de base d’apparences mesurées à tailles mixtes, des décorations et des valeurs V/RV synchronisées à travers les widgets et la sortie chiffrée
Version 2.873.0
Added
- Des choix UI XFA persistants par instance se créent via des scripts natifs et les widgets réels de texte, mot de passe et choix se consomment avec des apparences multilignes et de mots longs mesurées
Version 2.872.0
Added
- De vraies signatures de certification DocMDP Windows se créent avec permissions P1, P2 ou P3 et attestations légales Unicode authentifiées, les politiques de seed requises et les verrous FieldMDP sont honorés, et les signatures ultérieures ne sont permises que là où la politique signée les autorise
Version 2.871.1
Fixed
- Les corps d’événements XFA s’exécutent dans leur propre portée lexicale et stricte, tout en préservant dans la portée externe les alias de champs, la valeur this de l’événement, les returns explicites et le rollback exact en cas d’échec
Version 2.871.0
Added
- Les propriétés XFA manquantes de police, paragraphe, fill, couleur, bordure, edge et corner se créent via de vrais scripts d’événements natifs, des bindings de formulaire stables par instance persistent avec rollback exact, et les apparences optionnelles des widgets se régénèrent après des changements de style effectifs
Version 2.870.0
Added
- Le rendu Cairo Windows natif réel s’appuie sur des contours explicites des polices standard via GDI et les conventions d’appel Win32 correctes d’OpenJPEG, avec des dépendances natives épinglées reproductibles et une acceptation de sortie indépendante
Version 2.869.0
Added
- Les documents Windows se signent avec de vrais callbacks de transport RFC 3161 synchrones via C ABI et des empreintes SHA256, SHA384 ou SHA512, une confiance TSA authentifiée et des vérifications CRL, des contraintes de seed d’horodatage requises et une publication transactionnelle bornée
Version 2.868.0
Added
- Les apparences de champs mot de passe masqués et de sélection de fichiers littéraux se génèrent avec valeurs Unicode préservées et politiques AES-256, l’Unicode supplémentaire échappé transite par l’ABI JSON native, les tokens source décimaux subnormaux des PDF sont retenus et les buffers de prefetch RGB se créent sans screen DC
Version 2.867.0
Added
- Le texte enrichi XFA se replie à travers les styles inline avec des frontières de mots mesurées, des sauts de ligne explicites, des lignes de base et un alignement partagés, de vrais espaces de mots justifiés et une géométrie de liens de fragments, en préservant la persistance XDP native des instances répétées
Version 2.866.1
Added
- Les tokens RFC 3161 de signatures brutes s’authentifient avec leur véritable algorithme d’empreinte supporté, SHA256, SHA384 ou SHA512, tout en conservant le défaut de requête SHA256 existant et les vérifications complètes de confiance et de révocation des tokens
Version 2.866.0
Added
- Les runs de texte enrichi XFA à tailles mixtes s’alignent sur une ligne de base commune dans le PDF enregistré, le mode de position de texte de l’appelant est préservé et la marge de paragraphe adjacente la plus grande s’applique, transitions de paragraphes vides comprises
Version 2.865.0
Added
- Les horodatages RFC 3161 se demandent et s’authentifient pour des empreintes de message explicites SHA256, SHA384 et SHA512 sans re-hacher l’empreinte, en préservant les longueurs strictes de digest, des nonces frais, un transport borné et la validation des chaînes de confiance et de révocation
Version 2.864.0
Fixed
- L’échéance de scan des codes-barres d’origine est préservée en priorisant les rasters linéaires complets et les groupes candidats de quiet zone, et les bordures de finder projectives DataMatrix invalides sont rejetées avant l’échantillonnage des modules intérieurs, sans changer les tolérances de finder
Version 2.863.0
Added
- Les contraintes valides héritées de seed et de certificats des signatures Windows sont honorées avec sélection réelle du digest et de CAdES, informations de signature Unicode, verrous de champs indirects normalisés, permissions de verrous historiques authentifiées, secondes signatures permises et politiques de formulaires chiffrées
Version 2.862.0
Added
- Les dégradés PDF natifs pilotés par fonction, axiaux et radiaux se rendent réellement avec géométrie et évaluation de fonction bornées, clipping hérité, sémantique Domain, Matrix, Extend et BBox, couleurs calibrées et spéciales, transparence, soft masks, blending et groupes knockout
Version 2.861.0
Added
- L’export produit de vrais PDF natifs de revue de contrats annotés avec surlignages Unicode explicites et apparences normales visibles, en préservant le contenu source et les révisions de signatures incrémentales, en appliquant les permissions d’annotations P3 authentifiées et les droits utilisateur chiffrés, et en préparant des sorties bornées avant publication par callback
Version 2.860.0
Added
- Les options natives de signature et de vérification Linux se lient à la sélection réelle du digest, aux métadonnées de signature Unicode, aux profils d’apparence nommés, aux octets de confiance explicites, à l’identité de transport d’horodatage et aux preuves de révocation authentifiées, avec une préparation privée bornée avant publication
Version 2.859.0
Added
- Les overrides XFA vivants par instance de police, paragraphe et corps scalaire s’appliquent au dessin et à la mesure réels du texte enrichi, la précédence CSS inline et le contenu explicitement vide sont préservés via la persistance XDP native, et un rollback transactionnel exact est retenu
Version 2.858.0
Added
- Les noms PDF échappés de polices, encodages, glyphes, couleurs et ressources se décodent exactement une fois dans le rendu natif et l’extraction de texte partagée, les clés de ressources à hash littéral sont préservées et les noms équivalents restent alignés avec les contours réels et les métriques de glyphes
Version 2.857.0
Added
- Les documents natifs se comparent par nombres de pages et d’objets, texte Unicode, graphes structurels normalisés et pixels RGB ou luminance réellement rendus, avec équivalence sémantique des flux, entrées chiffrées authentifiées et préparation bornée avant publication par callback
Version 2.856.0
Added
- Les presets natifs réels d’apparence de signature se sélectionnent par nom de profil enregistré, des layouts distincts d’approbation, de certification et compacts se génèrent, les métadonnées de profils authentifiées et les politiques chiffrées sont préservées, et les profils inconnus sont rejetés avant publication
Version 2.855.0
Added
- Les défauts de schéma de propriétés XFA natifs s’appliquent et les valeurs explicitement vides, les styles par instance et les mesures fractionnaires en points des polices, bordures et dessins sont préservés à travers la sortie AcroForm réelle et les PDF aplatis
Version 2.854.0
Added
- Les objets de propriétés et d’attributs XFA natifs sont exposés avec des bindings de formulaire par instance persistants, des écritures valeur/données synchronisées et de vrais effets de police, bordure, paragraphe et layout UI, en préservant le rollback transactionnel et les budgets de focus sans script
Version 2.853.0
Added
- Les preuves de révocation Adobe réelles s’embarquent comme attributs signés CMS authentifiés, les chaînes complètes de certificats et d’horodatages se valident contre une confiance explicite et les preuves CRL ou OCSP courantes avant publication, et l’embarquement de révocation requis par le seed de signature s’applique
Version 2.852.0
Added
- Des attestations légales Unicode authentifiées s’écrivent dans les signatures de certification, les exigences du seed Legal réservées à la certification sont honorées, les statistiques légales et permissions de catalog existantes sont préservées et les politiques de chaînes chiffrées sont retenues
Version 2.851.0
Added
- Les couleurs source Lab ICC physiques et les entrées de compatibilité XYZ bornées se rendent dans les chemins, le texte, les images packed et les palettes Indexed, les teintes alternatives calibrées et ICC sont préservées via des groupes RGB ou CMYK, et les profils JPX embarqués s’appliquent avec alpha séparé ou associé
Version 2.850.0
Added
- Les documents compatibles à polices manquantes se convertissent en texte recherchable et PDF/A-4 vectoriel avec embarquement Ghostscript explicite et borné, validation veraPDF réelle et publication atomique, et des polices TrueType Unicode natives se sélectionnent de façon cohérente entre distributions
Version 2.849.0
Added
- Les polices simples Type1 et Type1C embarquées se rendent avec les encodages de glyphes Adobe exacts, déclarés ou intégrés, l’extraction ToUnicode reste séparée des contours affichés et un état graphique validé de stroke-adjustment neutre et de colorimétrie relative est accepté
Version 2.848.0
Added
- Les suffixes de chemins descendants XFA complets se résolvent dans chaque contexte de wildcard, les frontières d’occurrences locales sont préservées et les prédicats s’exécutent dans la portée d’événement courante avec un rollback transactionnel exact
Version 2.847.0
Added
- Les contraintes natives héritées de seed et de certificats des signatures s’appliquent avec de vraies chaînes d’émetteurs, des politiques de subject et d’usage de clé, des digests CMS sélectionnables, des métadonnées de signature Unicode chiffrées et des transforms de documents verrouillés
Version 2.846.0
Added
- Les datasets XFA natifs et les nœuds de données sont exposés avec des bindings de formulaire bidirectionnels, une réflexion dynamique des données d’instances, des références retenues stables, des valeurs de formulaire non liées indépendantes et un replay transactionnel des scripts
Version 2.845.0
Added
- Des références FieldMDP authentifiées s’émettent depuis les verrous de champs de signature existants ou hérités, les noms de champs Unicode chiffrés et les références de certification sont préservés et les niveaux de permission des verrous s’appliquent sans affaiblir les politiques signées d’origine
Version 2.844.0
Added
- Les teintes alternatives Separation et DeviceN se rendent avec des fonctions vectorielles bornées, des images packed et un blending de groupes CMYK, la géométrie knockout de None est préservée et les couleurs d’enregistrement All se mappent de façon cohérente
Version 2.843.0
Added
- Les chemins SOM XFA dynamiques se résolvent avec occurrences inférées et relatives, prédicats à portée, sélecteurs de classe et de descendants, collections wildcard et affectations transactionnelles de propriétés d’objets de script
Version 2.842.0
Added
- La comparaison sémantique de contrats entre deux documents passe par une C ABI native et Pascal via un noyau portable partagé, avec géométrie des glyphes source, entrées chiffrées et à contenu imbriqué, sortie de revue JSON ou HTML préparée et ordre stable des verrous concurrents
Version 2.841.0
Added
- Les révisions CMS et CAdES d’origine s’authentifient avant les mises à jour natives de formulaires, les permissions DocMDP et FieldMDP d’origine et les champs verrouillés s’appliquent, le contenu et les ressources signés sont préservés et les métadonnées de libellés des boutons poussoirs se synchronisent atomiquement
Version 2.840.0
Added
- Les couleurs source calibrées CalGray, CalRGB et Lab, le blending calibré de groupes et de pages, les bases Indexed, les échantillons d’images 16 bits et les soft masks de luminance XYZ se rendent avec conversion bornée et évaluation gamma sûre
Version 2.839.0
Added
- La copie de valeurs FormCalc et les références stables de nœuds s’implémentent avec affectation par référence, rebinding et détachement null, égalité d’identité numérique, handles retenus et rollback transactionnel
Version 2.838.0
Added
- Les programmes FormCalc Eval générés au runtime s’exécutent avec des portées de calcul isolées, une évaluation imbriquée, une source Unicode, des tentatives de compilation bornées et un replay transactionnel des réponses hôtes
Version 2.837.0
Added
- Des apparences Unicode embarquées se génèrent via le remplissage de formulaires JSON natif Linux pour les champs texte, choice et multiselect, les états de cases à cocher et de boutons radio et les libellés des boutons poussoirs, en conservant la publication transactionnelle et le chiffrement
Version 2.836.0
Added
- Le transport synchrone d’horodatage RFC 3161 passe par un enregistrement compatible d’opération de signature native étendue, avec réponses bornées, annulation partagée et validation explicite de la confiance et de la révocation TSA
Version 2.835.0
Added
- L’état hôte XFA transactionnel, les flags de page et de cycle de vie, les changements de focus par instance, la validation des éditions en attente et les opérations de reset s’exécutent avec identité stable et replay de l’état lexical
Version 2.834.0
Added
- Les identifiants de certificats signants CAdES se valident contre le signataire réel, indépendamment de la confiance optionnelle en les certificats, et les flux de CMaps Encoding embarquées se résolvent via l’adaptateur natif de polices
Version 2.833.0
Added
- Les CMaps verticales Identity-V et Unicode prédéfinies se rendent avec origines W2/DW2 réelles, matrices, déplacement du texte et clipping, et les flux de CMaps Encoding embarquées se décodent correctement
Version 2.832.0
Added
- La signature passe par l’ABI de callbacks native Linux avec identités PEM ou PFX bornées, nouveaux champs d’apparences Unicode et certification, et le document signé préparé reste le contexte courant après une publication réussie
Version 2.831.0
Fixed
- Les contraintes de seed, de verrouillage et de lecture seule des signatures s’appliquent de façon cohérente aux noms PDF encodés, les clés sémantiquement dupliquées sont rejetées et les dictionnaires de politiques hérités sont validés
Version 2.830.0
Added
- Les clauses picture XFA avancées — numériques, calendaires, texte et composées — s’exécutent via de vrais événements de formulaire, en préservant la précision des entrées, la sémantique des locales et le replay transactionnel des scripts
Version 2.829.0
Added
- Les graphes de ressources de pages natifs et les apparences d’annotations transformées s’importent dans des documents simples ou chiffrés, et les entrées compatibles se convertissent en texte recherchable et PDF/A-4 vectoriel avec une validation réelle avant publication atomique
Version 2.828.0
Added
- Les groupes de transparence et de page CMYK à quatre composantes et ICC se rendent avec tous les modes de fusion, une géométrie knockout imbriquée et des budgets partagés de profils de couleurs
Version 2.827.0
Added
- Les pictures XFA de date, heure, nombres et texte, sensibles aux locales, s’exécutent avec des jeux de locales embarqués, des requêtes de locales transactionnelles bornées et une arithmétique IEEE JavaScript protégée
Version 2.826.0
Added
- Les sélections de choix à valeurs de tableaux Unicode se lisent et s’écrivent, les indices d’options triés sont maintenus et des apparences correspondantes se génèrent pour les sélections visibles et défilées des list boxes
Version 2.825.0
Added
- Les documents chiffrés se signent via les jobs JSON et C ABI Windows, en préservant les révisions d’origine, les paramètres de sécurité AES, les IDs de document et les permissions de signature
Version 2.824.0
Added
- Des documents HTML natifs Linux se créent, du texte Unicode recherchable visible ou ajusté s’insère, une OCR Tesseract bornée et annulable s’exécute, et une sortie raster PDF/A-4 validée indépendamment s’écrit via les API Pascal et callbacks
- Le rendu couvre les masques Alpha/Luminosity de l’état graphique, les fonctions de transfert bornées, la transparence additive et les groupes de page, les formes knockout, ainsi que les échantillons JPEG 2000 étendus et la couleur et l’alpha embarqués
- Les preuves fournies de certificats, OCSP et CRL se valident avant la publication incrémentale DSS/VRI, en préservant les signatures existantes et le chiffrement AES
- Des callbacks XFA hôtes et de transport FormCalc typés et explicites s’exécutent avec requêtes bornées, réponses enregistrées et replay transactionnel
Fixed
- Les valeurs Unicode et les diagnostics d’exceptions retournés par l’API QuickJS de Free Pascal sont préservés
Version 2.823.0
Added
- Des horodatages RFC 3161 validés s’embarquent dans les signatures CMS headless avec vérifications d’empreinte de message, de nonce, d’autorisation TSA, de confiance et de preuves de révocation fournies, en préservant les fichiers de destination quand un horodatage requis échoue
- L’état lexical des objets de script XFA, les closures imbriquées et les modules indépendants d’instances répétées sont retenus avec un replay transactionnel borné et déterministe
- Un espacement explicite des caractères et des mots s’applique aux apparences de texte Unicode headless mesurées et générées
Fixed
- L’ordre des arguments source/search du FormCalc At respecte la spécification et la première position est retournée pour une chaîne de recherche vide
Version 2.822.0
Added
- Les événements XFA QuickJS généraux et FormCalc compilés s’exécutent avec des opérations DOM vivantes d’instances répétées, une persistance transactionnelle des form packets standard, un cycle de vie automatique initialize/calculate/validate/ready, une exécution bornée et l’annulation
Fixed
- Les paramètres des fonctions financières XFA, les formules de cash-flow, les origines de dates grégoriennes et le comportement du reste négatif respectent la spécification, en préservant la précision double entre Delphi et Free Pascal
Version 2.821.0
Added
- Les workflows natifs de documents headless s’étendent avec une C ABI Linux versionnée, de vraies opérations texte/formulaire/rendu/signature par callbacks, une annulation bornée et un rollback en cas d’échec, des apparences multiline/comb/rotated/choice/button avec shaping HarfBuzz/FriBidi, des identités PFX, de nouveaux champs de signature visibles et la certification DocMDP
- Le rendu couvre les masques d’images bornés, les soft masks, les couleurs Indexed/ICC, les modes de fusion PDF, les groupes de transparence RGB isolés, les glyphes Type3 et le clipping de texte, et les flux d’images JPEG, JPEG 2000, CCITT, JBIG2 et RunLength se décodent via le chemin natif authentifié de documents
Version 2.820.0
Added
- Les champs AcroForm Unicode monoligne headless natifs supportés se remplissent avec de véritables apparences TrueType embarquées, des largeurs de glyphes exactes et des mappings CIDToGID/ToUnicode, des mises à jour transactionnelles multi-widgets, la sécurité AES préservée, un embarquement de polices contrôlé et une sauvegarde atomique bornée sur Linux et Windows
Version 2.819.0
Added
- Les chemins PDF supportés, le texte horizontal, les images, les Forms et les apparences d’annotations existantes se rendent en PNG avec des surfaces CPU Cairo/FreeType natives sur Linux, avec travail borné et annulation appliqués, sources préservées et publication atomique des fichiers PNG
Fixed
- Les avances AFM Adobe canoniques s’utilisent pour les douze styles standard Helvetica/Times/Courier quand les largeurs PDF sont absentes, ce qui évite la dérive cumulative de position de texte due aux métriques des polices de substitution, tout en préservant les largeurs explicites et embarquées des polices
Version 2.818.0
Added
- De véritables signatures CMS/CAdES PDF natives headless incrémentales se publient sur Linux et Windows via des champs non signés existants et des identifiants PEM explicites, les révisions antérieures et la sécurité AES-256 sont préservées, les octets signés exacts sont vérifiés et les destinations existantes sont protégées par une publication atomique bornée
Version 2.817.0
Added
- Les jobs de documents JSON et C ABI bornés se complètent avec signature PFX incrémentale validée, champs de signature existants, comparaison de deux documents, six modes de comparaison natifs et revue bilatérale de contrats en JSON/HTML/PDF annoté, avec annulation coopérative, limites de ressources et publication atomique des fichiers
Version 2.816.0
Added
- Les signatures PDF headless natives se vérifient avec binding exact ByteRange/Contents et OpenSSL 3 en streaming, de vraies signatures CMS/CAdES détachées se génèrent depuis des identifiants PEM explicites, et la confiance dans les certificats se rapporte séparément de l’intégrité sur Linux et Windows
Version 2.815.0
Added
- L’assistant borné de présentation d’instances XFA sert aux événements conditionnels, au binding répété explicite, à la présence et l’accès indépendants des instances, à l’identité persistée stable, au reflow transactionnel, à la peinture du canvas hôte et aux enregistrements d’accessibilité
Version 2.814.0
Added
- Les documents AES-256 R5/R6 headless natifs s’ouvrent sur Linux et Windows, les permissions owner/user s’authentifient, les objets compressés chiffrés se décodent et les valeurs de formulaires chiffrées incrémentales s’enregistrent avec préservation exacte du préfixe source et sortie atomique bornée
Version 2.813.0
Added
- Le texte se replie dans des rectangles de page bornés à travers les lignes de base et les invocations partagées de Form sélectionnées, avec changement de polices et de largeur, des rapports de collision conservateurs s’inspectent et des aperçus scellés s’utilisent avec commit ou rollback transactionnel
Fixed
- Les éditions des documents chargés sont préservées dans les sauvegardes répétées après sérialisation d’objets, y compris les sauvegardes de flux vers fichier et les nouvelles tentatives après un échec de sortie
Version 2.812.0
Added
- Les documents chargés compatibles se convertissent en PDF/A-4 en préservant le texte, les vecteurs, les images et les ressources embarquées d’origine, les apparences visibles annotations/widgets se composent, l’OCR recherchable est conservé ou ajouté, les pertes explicites sont signalées et la préservation se valide avant publication atomique du fichier
Version 2.811.0
Added
- Les flux de références croisées, les sections de références hybrides et les flux d’objets compressés se chargent via l’API native de documents headless, les indices de membres bornés et la précédence des révisions se valident, les valeurs numériques larges exactes de la source sont préservées et une sortie incrémentale indépendante préservant la source s’enregistre sur Linux et Windows
Version 2.810.0
Added
- L’orientation des scans, le skew à angles continus, les ombres, les bordures et les quads de perspective explicites se corrigent avec une géométrie réversible bornée, les preuves d’orientation Tesseract de confiance s’utilisent, et les mots OCR, lignes de base, quadrilatères de page et layout sémantique se remappent vers le scan d’origine pour une sortie structurée éditable
Version 2.809.0
Added
- Les moteurs locaux Tesseract et RapidOCR en CLI ou DLL se configurent dans les jobs OCR JSON et C ABI, le texte Unicode recherchable et les pixels des scans sont retenus, les adaptateurs supportés se découvrent, les paramètres explicites se valident, et les budgets de rendu/reconnaissance s’appliquent avec sortie atomique et rollback après échec de publication
Version 2.808.0
Added
- Les PDF classic-xref se chargent dans les applications console natives Linux, le texte Unicode des pages et des Form imbriquées s’extrait avec ressources héritées, les valeurs texte AcroForm s’inspectent et se remplissent, et une sortie incrémentale préservant la source se publie avec diagnostics typés, annulation, budgets de ressources et remplacement atomique
Version 2.807.0
Added
- Plusieurs codes-barres natifs séparés se localisent dans un même raster, les payloads répétés à des positions distinctes sont retenus, les symboles ECC 200 Data Matrix pivotés et projectifs se décodent avec géométrie à quatre coins, et des budgets de scan agrégés s’appliquent avec annulation et publication atomique des résultats
Version 2.806.0
Added
- La comparaison de paragraphes de contrats et de modifications de mots ou de phrases enregistre les insertions, suppressions, remplacements et déplacements, localise les pages des deux côtés, préserve les clauses répétées, exclut explicitement le boilerplate, borne la revue HTML et produit un PDF annoté vérifié à la source
Version 2.805.0
Added
- L’import de modèles HTML métier gère les panneaux flex/grid imbriqués, les lignes repliées, les étendues de colonnes grid, les images et contrôles de formulaire dans des boîtes parallèles, ainsi que les ressources font-face fournies explicitement et conservées via l’embedding différé, avec un budget de cache séparé pour les images décodées
Version 2.804.0
Added
- Le socle partagé — objets PDF, Direct File I/O, décodage du contenu et des polices, compression, cryptographie et writer — existe désormais en code Linux natif avec mapping et synchronisation POSIX, tout en préservant les API Windows et en sérialisant correctement les entrées xref classiques
Version 2.803.0
Added
- Les profils de facturation versionnés et les couches de règles par pays s’enregistrent, la validation des factures CII XML explicites ou hybrides produit des rapports tenant compte du périmètre, et les règles officielles XRechnung 3.0.2 et CTC françaises s’exécutent via un moteur Saxon explicitement configuré, avec sélection du profil publié et diagnostics fail-closed
Version 2.802.0
Added
- L’export de tableaux typés vers des classeurs XLSX indépendants d’Office passe par les API natives, les JSON jobs et la C ABI, en préservant les types de valeurs, les formats monétaires et pourcentages, les cellules fusionnées, les grands entiers exacts et les métadonnées source optionnelles, avec un staging borné et une publication protégée en cas d’échec
Version 2.801.0
Added
- Les JSON jobs et la C ABI peuvent exporter les pages chargées sélectionnées en HTML, XHTML, XML ou JSON sémantiques et les tableaux typés en CSV ou JSON, avec options natives, staging borné, annulation, compatibilité des champs de signature, préservation de l’état source et publication atomique des fichiers
Version 2.800.2
Fixed
- Les caches de relations de formulaires chargés sont invalidés avant le rollback du graphe, afin que les jobs de signature et les éditions de documents échouées laissent le document original interrogeable sans risque et réutilisable
Version 2.800.1
Fixed
- Le rendu parallèle ordonné accepte désormais les réservations mémoire dans l’ordre d’entrée, si bien que les pages suivantes ne peuvent plus épuiser le budget pendant que la livraison attend une page antérieure, en préservant l’annulation et la sortie bornée sur Delphi et FPC
Version 2.800.0
Changed
- Le texte SVG, les appearances FreeText chargées et les remplacements de texte chargés préservent désormais les fonctionnalités de shaping du document, les flags d’auto-shaping de script et les sélections de script et de langue GSUB, en utilisant les données OpenType de chaque police sélectionnée et en conservant les mappings Unicode lors des changements de police
Version 2.799.0
Changed
- Les imports vectoriels SVG conservent désormais les tableaux de tirets hérités, les offsets de tirets et les limites de pointe pour les tracés pleins et en dégradé, tandis que le rendu natif préserve les motifs de tirets phasés et de longueur nulle
Version 2.798.0
Changed
- Le texte Unicode stylé conserve désormais les polices gras et italique à travers la mise en page de fallback ; les surcharges de
ResolveFontForCodePointetAnalyzeUnresolvedGlyphssensibles au style alignent le preflight sur la sortie, et les références de caractères XML en FPC préservent les scalaires Unicode au lieu de corrompre le texte
Version 2.797.0
Fixed
- Les imports SVG composent désormais l’opacité des objets et des groupes via des Forms de transparence vectorielle isolées, préservent l’alpha indépendant du remplissage et du tracé, et conservent le comportement imbriqué des ressources, clips, masques et liens sous des budgets explicites
Version 2.796.0
Added
- La conversion d’archivage raster PDF/A-4 bornée est exposée via les JSON jobs et la C ABI, avec acceptation explicite de la perte d’information, échecs de budget structurés, annulation coopérative, restauration de l’état source et sortie de fichiers atomique
Version 2.795.0
Added
- Les PDF chargés peuvent désormais être normalisés en documents raster PDF/A-4 validés, avec rendu natif strict, couleur sRGB vérifiée, décodage et ressources raster bornés, annulation, protection des alias source et publication atomique ; le rapport de conversion identifie les contenus interactifs et joints volontairement retirés
Version 2.794.0
Changed
- L’import HTML5 utilise désormais des lignes de texte bidirectionnelles mesurées, une pagination qui gère veuves et orphelines, une césure optionnelle, des layouts flex et grid bornés et des diagnostics CSS observables ; les bitmaps natifs FPC synchronisent le dessin GDI direct avec les caches d’images LCL
Version 2.793.0
Changed
- L’ajout et la suppression dynamiques bornés d’instance managers XFA et les événements de présence de template s’accompagnent d’un rebinding du layout, de la préservation de l’état d’édition, d’un rollback atomique, de limites de ressources et d’une sortie XDP persistante
Version 2.792.0
Changed
- L’import SVG s’enrichit de polices Unicode embarquées mesurées, de ressources PNG/JPEG, de tracés en dégradé et de vrais soft masks Alpha et Luminosity, et corrige l’alpha des groupes natifs ainsi que le compositing des surfaces bitmap FPC
Version 2.791.0
Changed
- Le remplacement de texte Unicode chargé devient prévisualisable, avec polices embarquées, politiques de wrap et de largeur, diagnostics par correspondance, détection de plans obsolètes, ressources bornées, commits atomiques et opérations de prévisualisation et d’application via JSON/C ABI
Version 2.790.0
Changed
- Les opérations de pile et de tableaux transitoires standard CFF Type 2 sont implémentées dans le rendu des glyphes, et les dépendances de sous-programmes locaux et globaux issues de calculs arithmétiques sont préservées lors du subsetting de polices
Version 2.789.0
Changed
- Le décodage de codes-barres intégré s’étend au Code 128, à EAN/UPC, à la récupération QR tenant compte de la perspective, au Data Matrix ECC 200 et au PDF417 avec correction Reed-Solomon et décodage borné du payload
Version 2.788.0
Changed
- Windows FPC prend désormais en charge nativement TIFF, JPEG/JPX, la conversion ICC, JBIG2 et Zopfli via un pont de codecs validé par ABI, et utilise de vrais threads workers pour le rendu de pages, de pages ordonnées, de tuiles, de bandes et de tuiles JPEG 2000, avec budgets, callbacks ordonnés, annulation et pixels déterministes
Version 2.787.0
Changed
- La C ABI et le processeur de JSON jobs partagent désormais des opérations document versionnées par schéma pour les capacités, le rendu, le texte Unicode et les formulaires, les couches OCR, la redaction et la signature PFX, avec budgets de ressources explicites, rollback en cas d’échec de callback et sorties de fichiers atomiques ; les entrées de callbacks multipages sont chargées correctement
Version 2.786.0
Changed
- L’édition des FreeText chargés reconstruit atomiquement les appearances Unicode et rich-text embarquées, avec wrap, alignement, opacité, rotation, callouts, insets et politiques de débordement explicites ; les payloads de flux réécrits sont capturés avant mutation, si bien que le rollback de transaction restaure le texte original
Version 2.785.0
Added
- La démo console SearchableOCR ajoute l’OCR intégré et les moteurs Tesseract DLL ou CLI en plus de RapidOCR, génère un échantillon scanné de trois pages et expose la sélection de pages, le filtrage par confiance, les budgets de reconnaissance et des statistiques de conversion détaillées
Version 2.784.0
Changed
- Les imports par lots FDF et XFDF annulent désormais les mises à jour antérieures de champs et d’annotations après un échec d’import, préservent les transactions détenues par l’appelant et effacent les métadonnées de résultat d’échange échoué
Version 2.782.0
Added
- L’adaptateur OCR Tesseract local accepte une segmentation de page configurable, un mode de moteur de reconnaissance, des limites de pixels et des timeouts via THPDFTesseractOptions pour la reconnaissance single-line, single-word, sparse-text et vertical-block
Fixed
- L’adaptateur Tesseract natif utilise la dimension de boîte cross-text pour les lignes de base majoritairement verticales, ce qui empêche les longueurs de mots verticaux de gonfler les tailles de texte des PDF consultables
Version 2.781.0
Changed
- Les collections de démos Delphi et C++Builder incluent désormais un guide multipage des champs de codes-barres avec étiquettes métier et un manuel de navigation complet avec bookmarks hiérarchiques, destinations nommées et liens fonctionnels vers les documents compagnons ; les recettes PDF/A minimales déménagent dans Miscellaneous et les projets redondants autonomes d’outline et de métadonnées sont retirés
Version 2.780.1
Fixed
- La page d’annotations du Showcase sépare les légendes d’aperçu de contenu des appearances live de free-text et de tampons, ce qui évite les étiquettes superposées dans les lecteurs PDF tout en gardant les exemples identifiables quand les appearances d’annotations sont masquées
Version 2.780.0
Changed
- Les catalogues de démos privilégient désormais les workflows complets et déplacent dix-sept exemples minimaux, ciblés ou anciens dans des sous-dossiers Miscellaneous ; les projets redondants ImageCompression et AddDelPages ont été supprimés, leurs fonctionnalités étant conservées dans les démos principales et les suites de régression
Version 2.779.0
Added
- Les démos Showcase Delphi et C++Builder ouvrent désormais un studio documentaire complet en dix chapitres, avec aperçu embarqué, surlignage de recherche, couvertures personnalisées, filigranes de revue en un clic, export de pages vérifié et copies protégées AES-256 R6 qui conservent les modifications ; les deux utilisent le même moteur documentaire et prennent en charge une commande de génération sans fenêtre
Version 2.778.1
Removed
- Les démos GUI TestNumeric Delphi et C++Builder, devenues redondantes, sont retirées au profit de tests de régression numériques automatisés qui vérifient les dimensions de pages fractionnaires et les opérandes de dessin après enregistrement et rechargement de PDF non compressés et compressés Flate, avec une couverture persistée des tableaux numériques
Version 2.778.0
Changed
- Les démos de pages et de rapports clients fournissent désormais des workflows concrets : PageOperations édite de vrais PDF via des commandes extract, delete, move, insert et append avec vérification au rechargement, tandis que DBTable utilise le moteur de tableaux pour les lignes repliées, les en-têtes répétés et la pagination automatique avec un échantillon par défaut sans base de données
Version 2.777.1
Fixed
- L’OCR rejette l’UTF-8 malformé, les caractères de contrôle non pris en charge et les sorties incompatibles des modèles de détection natifs avant la publication du texte, et tient compte des résultats de reconnaissance écartés lors de l’application des limites de mots inter-pages
Version 2.777.0
Fixed
- L’OCR intégré traite les pages blanches ou non reconnues comme des résultats vides réussis pour que les lots de documents numérisés puissent continuer, préserve les pixels bitmap en Windows FPC et contrôle l’annulation et les limites de temps tout au long de l’analyse d’images
- La classification d’angle du RapidOCR natif préserve les rapports d’aspect des lignes courtes et n’applique une rotation aux extraits de texte qu’après une prédiction tête-bêche suffisamment sûre
- L’adaptateur RapidOCR Python local préserve l’espacement des lignes reconnues et leur ponctuation au lieu de publier des caractères isolés susceptibles de gagner des espaces indésirables, et l’adaptateur DLL Tesseract rejette les caractères de contrôle C1 avant la publication du texte
Version 2.776.0
Added
- Les couches de texte des PDF numérisés peuvent remplacer atomiquement les flux OCR HotPDF marqués après enregistrement et rechargement, conservent les couches existantes en cas de reconnaissance échouée ou vide, signalent les pages remplacées, et utilisent un exemple console RapidOCR multilingue natif pour la conversion sans écraser les fichiers existants
Fixed
- Les mots OCR latins et cyrilliques adjacents séparés d’un écart de mot sur une même ligne reçoivent des espaces Unicode explicites pour une recherche et une copie stables d’expressions, tandis que les mots CJK adjacents restent non séparés
- Le rendu des numérisations JPEG en Windows FPC conserve les pixels décodés lors de la conversion au format bitmap OCR, ce qui évite une entrée de reconnaissance vide due à un changement de format de pixels LCL
Version 2.775.0
Added
- Le RapidOCR natif gagne des préréglages de modèles locaux pour le chinois simplifié et traditionnel, l’anglais, le français, l’allemand, l’espagnol, le portugais, l’italien, le néerlandais, le turc, le japonais, le coréen, le russe, l’arabe et le hindi, avec dictionnaires de caractères appariés, installation de modèles vérifiée, ordre de lecture horizontal et sortie Unicode multilingue dans les builds Delphi, C++Builder et Windows FPC/Lazarus
Fixed
- Les adaptateurs OCR de processus local réessayent le nettoyage des sorties temporaires quand des fichiers de diagnostic restent brièvement verrouillés après l’arrêt du worker
Version 2.774.0
Added
- Un adaptateur DLL RapidOCR natif garde les modèles ONNX locaux dans le processus, reconnaît des instantanés bitmap sans Python, prend en charge une classification d’angle facultative et des PDF consultables Unicode, et valide les budgets de sortie avec annulation coopérative dans les builds Delphi, C++Builder et Windows FPC/Lazarus
Version 2.773.0
Added
- L’adaptateur RapidOCR local gagne une configuration explicite des modèles ONNX, une classification d’angle facultative, des dictionnaires de caractères et polices locaux, des contrôles de threads CPU, un preflight hors ligne et des budgets de reconnaissance pour des PDF consultables Unicode dans les builds Delphi, C++Builder et FPC/Lazarus
Version 2.772.1
Fixed
- Les adaptateurs DLL et CLI Tesseract fonctionnent désormais dans les builds Windows FPC/Lazarus Win32 et Win64, en préservant les mots OCR Unicode et en lisant les pixels courants des images LCL pour les couches de texte des PDF consultables
Version 2.772.0
Added
- Un adaptateur DLL Tesseract natif facultatif ajoute un OCR multilingue avec modes de segmentation de page et de moteur configurables, mots Unicode, indice de confiance, bornes de mots et lignes de base, plus annulation coopérative, échéances de reconnaissance et budgets de sortie pour des PDF numérisés consultables
Version 2.771.1
Changed
- L’OCR intégré reconnaît du texte ASCII normal, gras, italique et gras italique sur des fonds clairs ou majoritairement sombres, accepte des caractères estompés avec un contraste de niveaux de gris suffisant, et omet les mots contenant des glyphes retenus incertains au lieu de supprimer des caractères en silence
Version 2.770.175
Fixed
- LoadedDocInspector et SignatureValidator renvoient un code de sortie d’échec pour les PDF illisibles et rejettent les arguments de commande invalides au lieu de signaler une inspection vide réussie
Version 2.770.174
Fixed
- LoadedImageExport valide chaque destination d’image avant d’exporter la moindre page, ce qui empêche les alias de chemins d’écraser le PDF d’entrée ou une autre page sélectionnée, et rejette les noms de formats non pris en charge
Version 2.770.173
Fixed
- Le cache disque de pages rendues ignore les dossiers de documents liés lors de la récupération, de la recherche, du stockage, de l’invalidation et de l’éviction, en préservant les fichiers situés hors du cache
Version 2.770.172
Fixed
- Les jobs JSON rejettent une syntaxe mal formée, du contenu superflu après la valeur, des nombres hors de la plage finie du type Double et une imbrication excessive avant d’exécuter la moindre opération, en libérant les valeurs partiellement analysées en cas d’échec
Version 2.770.171
Fixed
- PreflightCLI vérifie le plan complet de sorties de rapports avant d’écrire, en protégeant les PDF d’entrée des alias de fichiers et en rejetant les destinations de rapports en conflit ; les scans récursifs ignorent les sous-répertoires liés pour éviter les cycles
Version 2.770.170
Fixed
- CopyPage vérifie l’identité des fichiers avant d’exporter, rejette les alias de sortie en conflit, et place les sorties nommées automatiquement à côté des entrées sans extension dans des répertoires contenant des points
Version 2.770.169
Fixed
- Les valeurs de jobs JSON préservent les caractères nuls échappés, sérialisent les nombres finis hors de la plage des entiers signés 64 bits sans débordement d’entier, et renvoient les valeurs par défaut des paramètres entiers hors plage sans changer la locale du processus
Version 2.770.168
Fixed
- La récupération de l’analyseur d’objets simples se termine sur des crochets fermants égarés dans des corps de tableaux sans crochets et préserve les nombres valides et les clés de dictionnaire situés juste après des délimiteurs mal formés
Version 2.770.167
Fixed
- HotPDFCLI rejette les chemins de sortie qui aliasent les fichiers d’entrée et vérifie tous les chemins générés avant de démarrer un export par lot, ce qui empêche les commandes de tronquer ou de remplacer leurs données sources
Version 2.770.166
Fixed
- L’exemple ExtractText protège son PDF d’entrée quand une sortie passe par une jonction de répertoires ou un lien physique, et LoadedImageExport signale un échec pour les documents illisibles ou les exports de pages incomplets
Version 2.770.165
Fixed
- Les lectures directes de fichiers invalident les remplissages de cache incomplets après un échec d’E/S et bornent prudemment les plages de lecture anticipée près de la limite des décalages signés 64 bits
Version 2.770.164
Fixed
- Le décodage RunLength n’alloue que la taille des données utiles décodées et valide les séquences mal formées avant d’allouer la sortie, ce qui évite des réservations mémoire excessives pour les flux à terminateurs anticipés
Version 2.770.163
Fixed
- Les exemples Delphi et C++Builder trouvent les images, métafichiers, profils colorimétriques et fixtures de signature facultatives embarqués aussi bien dans les dossiers de projet que dans les répertoires de sortie de build imbriqués
Version 2.770.162
Fixed
- Les exemples HugeFileBenchmark rejettent les chemins de PDF générés qui correspondent à un document d’entrée avant de démarrer un lot de benchmark
- L’exemple C++Builder préserve les sous-répertoires d’entrée relatifs pour les PDF générés, ce qui évite que des entrées récursives de même nom partagent un fichier de sortie
- Les opérations en échec, les dépassements de limite mémoire et les chargements invalides de zéro page produisent désormais un code de sortie non nul tout en conservant le rapport de benchmark
Version 2.770.161
Fixed
- Les CLI Preflight Delphi et C++Builder rejettent les chemins de sortie de rapports et d’agrégats qui correspondent à un PDF d’entrée, ce qui empêche les rapports d’écraser les documents sources
Version 2.770.160
Fixed
- L’analyse ASN.1 rejette les encodages high-tag-number qui dépassent la plage d’identifiants 32 bits prise en charge au lieu d’accepter un identifiant rebouclé
Version 2.770.159
Fixed
- La CLI Preflight C++Builder préserve les sous-répertoires relatifs des rapports récursifs et des liens du tableau de bord, si bien que des PDF de même nom ne s’écrasent plus l’un l’autre
- Les tableaux de bord Preflight Delphi et C++Builder encodent correctement les liens de rapports pour les caractères spéciaux et les noms de répertoires non ASCII
- Les échecs de validation standard en C++Builder renvoient désormais le code de sortie 3 et apparaissent comme invalides dans le tableau de bord pour chaque format de rapport, y compris pour les entrées qui ne se chargent pas
Version 2.770.158
Fixed
- L’exemple de fusion PDF C++Builder résout les chemins d’entrée relatifs depuis le répertoire de l’exécutable et empêche les boîtes de dialogue de fichiers de changer le répertoire de travail
- Chaque signet généré vise désormais la première page copiée depuis son propre document d’entrée
Version 2.770.157
Fixed
- L’analyseur d’objets normalise les fins de ligne CR et CRLF non échappées à l’intérieur des chaînes littérales PDF en LF, tout en préservant les retours chariot échappés et les continuations de ligne
Version 2.770.156
Fixed
- La compression de flux LZW signale le nombre réel d’octets écrits pour une entrée vide
- La compression et la décompression LZW font correctement l’aller-retour avec InitialCodeSize réglé à 2, et la compression rejette les littéraux hors d’un alphabet réduit avant d’écrire la sortie
Version 2.770.155
Fixed
- Dans les builds Win64, l’import de données de chemins SVG ou XPS avec un nombre dont l’exposant est proche de 100, comme 1e-100 ou 5e99, ne lève plus de débordement en virgule flottante quand l’application démasque les exceptions en virgule flottante
- De tels nombres se lisent désormais à leur valeur réelle, si bien qu’une longue mantisse avec un grand exposant négatif s’importe correctement
Version 2.770.154
Fixed
- DecodeLoadedPageBarcodes signale désormais des bornes de codes-barres correctes sur les pages dont la CropBox diffère du MediaBox quand aucune région de décodage n’est définie ; auparavant, les positions étaient décalées de l’offset de la crop box, ou mises à l’échelle par rapport à une hauteur de page erronée
- Les constats de visages de DetectLoadedRedactionFindings (avec détection de visages activée) tombent désormais sur les visages détectés de ces pages, au lieu d’être décalés par rapport à eux
- Les deux fonctionnalités rendent la zone de page visible (la CropBox rognée au MediaBox) et ramènent désormais les positions détectées à travers cette même zone ; la boîte de page passée à un IHPDFFaceDetector personnalisé correspond désormais au bitmap qu’il reçoit
- Le décodage de codes-barres avec une région explicite, ainsi que les pages sans CropBox ou dont la CropBox égale le MediaBox, restent inchangés
Version 2.770.153
Fixed
- ApplyLoadedOCRTextLayer place désormais correctement la couche de texte invisible sur les pages dont la CropBox diffère du MediaBox ; auparavant, le texte consultable était décalé de l’offset de la crop box, ou mis à l’échelle par rapport à une hauteur de page erronée, si bien que les sélections et les résultats de recherche ne tombaient pas sur les mots visibles
- La trame OCR est rendue depuis la zone de page visible (la CropBox rognée au MediaBox), et les positions des mots reconnus sont désormais ramenées à travers cette même zone
- La boîte de page transmise à un IHPDFOCREngine personnalisé dans THPDFOCRRequest est désormais la zone visible rendue, en correspondance avec le bitmap qu’il reçoit
- Les pages sans CropBox, ou dont la CropBox égale le MediaBox, restent inchangées
Version 2.770.152
Fixed
- GetLoadedInvoiceSummary renvoie désormais le nom de l’acheteur (BT-44) sous forme de texte décodé, si bien que des noms avec lettres non ASCII comme "Müller & Söhne" ne reviennent plus en octets UTF-8 bruts avec l’échappement XML encore en place
- Le nom de l’acheteur se lit désormais toujours depuis la partie commerciale acheteur elle-même, à l’image du nom du vendeur et des autres champs du résumé
- ValidateVisualXmlConsistency en profite aussi : un nom d’acheteur avec lettres accentuées ou caractères échappés est désormais comparé au texte visible de la page tel qu’écrit
Version 2.770.151
Fixed
THPDFTablegarde désormais sur une même page les lignes liées par unRowSpan: quand le groupe ne tient pas dans l’espace restant, tout le groupe passe à la page suivante avec l’en-tête répété- Une cellule s’étendant sur plusieurs lignes ne dépasse plus la marge basse pendant que les lignes qu’elle couvre continuent à la page suivante
- Un groupe de fusion de lignes plus haut qu’une page entière se scinde toujours ligne par ligne, ses cellules fusionnées étant coupées à la marge basse de chaque page
TotalHeightRenderedreflète le groupe déplacé sur la dernière page
Version 2.770.150
Fixed
- Les cellules
THPDFTableavec unColSpanou unRowSpaninférieur ou égal à zéro se dessinent désormais comme des cellules simples, à l’endroit où la grille du tableau les a déjà placées, au lieu de pousser les cellules suivantes dans de mauvaises colonnes - Les fusions négatives ne font plus lire le tableau hors de sa grille, et les fusions qui débordent de la dernière colonne ou ligne sont coupées au bord du tableau, y compris au moment de mesurer et de dessiner
- Une cellule dont le premier mot est plus large que la colonne ne commence plus par une ligne vide, si bien que sa ligne n’est pas plus haute que ne l’exige le texte renvoyé à la ligne
Version 2.770.149
Security
- Les formulaires XFA qui déclarent une entité interne dans leur DOCTYPE ne peuvent plus faire exploser la mémoire en référençant une grande entité de nombreuses fois : le texte substitué aux entités internes est plafonné à 16 Mo par document
- Une valeur d’entité interne unique de plus de 1 Mo est rejetée
- Les documents qui dépassent l’une ou l’autre limite échouent au chargement avec une
EHPDFXFAErrorau lieu de s’étendre en gigaoctets de texte ; l’usage ordinaire des entités n’est pas affecté - Le texte contenant de nombreuses références d’entités ou de caractères se décode aussi en temps linéaire
Version 2.770.148
Fixed
RecalculateLoadedFormFieldsIncrementaltraite désormais de la même façon tout champ passé comme modifié, quel que soit l’ordre des noms listés- Un champ calculé qui a été écrit directement en même temps que l’un de ses champs sources garde la valeur écrite au lieu d’être recalculé seulement quand il est listé après cette source
- Les champs qui dépendent des champs modifiés sont toujours recalculés une fois, dans l’ordre de calcul
Version 2.770.147
Fixed
- Les codes-barres GS1-128 avec code de départ A (
THPDFBarcodetype 20) encodent désormais leurs données dans le jeu de codes A, comme le Code 128 A - Les lettres minuscules de ces codes-barres s’écrivent désormais avec un SHIFT vers le jeu de codes B au lieu d’un mot de code du jeu B que les scanners relisent comme un caractère de contrôle du jeu A
- Les symboles GS1-128 A numérisés contenant du texte en minuscules renvoient donc le texte d’origine
Version 2.770.146
Fixed
- Les codes-barres add-on EAN-2 et EAN-5 (
THPDFBarcodetypes 18 et 19) n’ajoutent plus un chiffre calculé àTextquandChecksumest activé - Dessiner un tel code-barres de façon répétée produit désormais le même symbole à chaque fois, au lieu de faire grossir le texte d’un chiffre par redessin et de changer le motif de barres
- Les symboles add-on ne portent par définition aucun caractère de contrôle, si bien que
Checksumest ignoré pour eux ; le motif de parité se déduit toujours de la valeur comme avant
Version 2.770.145
Fixed
- L’export XFDF décode désormais les valeurs de champs de formulaire et le texte d’annotations comme chaînes de texte PDF (ISO 32000-1 7.9.2.2) : les valeurs UTF-16BE, les chaînes hexadécimales et les caractères PDFDocEncoding comme la puce s’écrivent comme le texte Unicode réel au lieu de chiffres hexadécimaux ou de charabia de page de codes
- Le contenu, l’auteur, le sujet, l’état et le texte d’overlay des annotations exportés vers XFDF conservent les caractères non latins, par exemple des commentaires en chinois ou en cyrillique
- Le texte riche (
/RC,/RV) qui commence par une déclaration XML s’intègre désormais sans elle, si bien que le XFDF exporté reste du XML bien formé - L’import XFDF ne convertit plus le texte via la page de codes ANSI du système : les valeurs que PDFDocEncoding peut représenter se stockent comme telles, les autres comme chaînes de texte UTF-16BE, tant pour les champs de formulaire que pour le texte d’annotations
- Les fichiers XFDF exportés font désormais correctement l’aller-retour des caractères hors de la page de codes ANSI via
ImportLoadedFormFromXFDFetImportLoadedAnnotationsFromXFDF, sans les transformer en points d’interrogation
Version 2.770.144
Fixed
- Les noms et les autres textes du résumé de facture se décodent désormais depuis le XML de facture UTF-8, si bien qu’un vendeur comme "Müller GmbH" ne revient plus en caractères multi-octets altérés
- Les caractères de balisage échappés et les références de caractères sont résolus, si bien que "A & B" dans le XML est restitué sous la forme "A & B"
ValidateVisualXmlConsistencyne signale plus comme absent du texte visible de la page un nom de vendeur avec lettres accentuées ou esperluette quand il y est imprimé- Le texte du résumé est renvoyé dans la page de codes ANSI du système, les champs du record de résumé étant des chaînes ANSI ; les caractères que cette page de codes ne peut pas représenter deviennent des points d’interrogation
Version 2.770.143
Fixed
GetLoadedInvoiceSummarysignale désormais le total net au niveau de la facture (BT-106) depuis la sommation monétaire de l’en-tête au lieu du montant du premier poste de ligne- Le total des taxes, le total général et le montant dû se lisent eux aussi depuis la sommation de l’en-tête, y compris pour les factures ZUGFeRD 1.0
- La date d’émission (BT-2) est désormais renvoyée comme valeur de date brute, par exemple
20260305, au lieu d’inclure le balisageDateTimeStringimbriqué HPDFFacturXXMLElementTextrenvoie désormais les données caractère de l’élément entier sans ses balises enfants, et ne correspond plus aux éléments dont le nom commence simplement par le nom demandé
Version 2.770.142
Fixed
- L’export XFDF écrit désormais les caractères hors du plan multilingue de base, comme les emoji ou les idéogrammes CJK rares, en UTF-8 valide de quatre octets au lieu d’encoder chaque moitié de paire de substitution séparément, si bien que les lecteurs XML stricts acceptent le fichier
- L’import XFDF décode désormais les références de caractères au-dessus de U+FFFF, comme
😀, vers le caractère complet au lieu de le tronquer en un caractère BMP sans rapport - Les références de caractères qui ne désignent pas une valeur scalaire Unicode, et les substituants non appariés à l’export, deviennent désormais U+FFFD au lieu de corrompre le texte
- Les fichiers XFDF écrits par des versions antérieures s’importent toujours correctement
Version 2.770.141
Fixed
- Les valeurs de champs et les textes d’annotations contenant des antislashs, comme des chemins Windows du style
C:\Data\2024\001, survivent désormais intacts à un export et un import XFDF, au lieu de voir des suites de chiffres transformées en caractères de contrôle - Quand un antislash serait relu autrement comme un échappement, l’export XFDF l’écrit désormais comme l’échappement octal
\134, comme dans une chaîne littérale PDF (ISO 19444-1 5.8.2) - L’import XFDF ne décode que les échappements octaux que le format utilise pour les caractères de contrôle et les antislashs ; les autres suites d’antislash des fichiers tiers sont conservées littéralement
- Le texte SVG lu via le même lecteur XML léger ne perd plus non plus ses suites d’antislash
Version 2.770.140
Fixed
- Le cache de pages rendues persistant activé par RenderCacheFolder fonctionne désormais pour les documents ouverts avec LoadFromFile, LoadFromStream et LoadFromRandomAccessSource ; auparavant, le niveau disque était ignoré pour les chargements ordinaires, si bien qu’aucune page n’était jamais écrite dans le dossier ni lue depuis lui
- Les documents chargés depuis un fichier sont identifiés par leur taille, leur date de dernière écriture et leurs octets de tête et de fin, si bien que rouvrir un fichier inchangé lit ses pages depuis le cache sans hacher tout le fichier
- Les documents chargés depuis un flux ou une source à accès direct sont identifiés par le SHA-256 de leur contenu ; réglez RenderCacheFolder avant le chargement pour que ces documents utilisent le niveau disque
- Un document modifié après son chargement ne lit ni n’écrit plus d’entrées disque pour le reste de ce chargement, si bien que les pages modifiées ne sont jamais servies depuis les pages en cache du fichier d’origine ni stockées comme telles
- Les entrées disque dépendent désormais aussi du backend de rendu de pages et du workflow d’épreuvage ICC, si bien qu’un autre backend ou profil de sortie ne réutilise pas des pages rendues avec d’autres réglages ; les documents chiffrés ne sont jamais écrits dans le cache disque
Version 2.770.139
Fixed
- L’import de gros fichiers XFDF ne ralentit plus avec le carré de la taille du fichier : un fichier avec des milliers de champs ou d’annotations s’analyse désormais en millisecondes au lieu de secondes ou de minutes
- Les valeurs de champs avec de nombreux sauts de ligne ou autres références de caractères se décodent en temps linéaire
- La mémoire de pointe pendant l’analyse XFDF ne croît plus avec le nombre d’éléments multiplié par la taille du fichier
- L’entrée SVG lue via le même lecteur XML léger profite de la même accélération
Version 2.770.138
Fixed
- Quand
DecodeLoadedPageBarcodesréessaie une page tournée de 90 ou 270 degrés, la trame remise au décodeur est désormais tournée dans le sens horaire, comme le documenteAttemptRotationDegrees - Les symboles trouvés seulement dans ces nouvelles tentatives sont désormais signalés à leur vraie position sur la page au lieu de leur position en symétrie centrale
- L’orientation signalée pour ces symboles correspond désormais à leur direction de lecture sur la page au lieu d’être décalée de 180 degrés
- Les décodeurs de codes-barres personnalisés qui s’appuient sur la rotation horaire documentée reçoivent désormais des trames correctement tournées
Version 2.770.137
Fixed
- La copie de pages entre documents (CopyPageFromDocument, CopyPageByPhysicalIndex, méthodes d’import de pages et de fusion) ne transforme plus en dictionnaires ou tableaux les chaînes de texte contenant "<<" et ">>" ou "[" et "]" ; un commentaire d’annotation tel que "Read <<this>> [now]" était copié comme un dictionnaire cassé
- Les chaînes hexadécimales, comme les noms et identifiants d’annotations, sont copiées sous forme hexadécimale au lieu d’être écrites comme des chaînes littérales de leurs chiffres hexadécimaux
Version 2.770.136
Fixed
- Les annotations créées sur de nouvelles pages (AddStampAnnotation, AddTextAnnotation et les autres méthodes d’annotation de THPDFPage) écrivent désormais /Rect avec le coin inférieur gauche en premier, [llx lly urx ury] ; plusieurs d’entre elles écrivaient le bord haut avant le bord bas, par exemple [395 712 575 652], ce que les lecteurs acceptent mais que les validateurs PDF/A et certains outils de traitement rejettent ou lisent mal
Version 2.770.135
Changed
- THotPDF.RenderCacheFolder est désormais une chaîne (UnicodeString en Delphi 2009 et suivants, UnicodeString en C++Builder) au lieu d’un AnsiString, si bien qu’un dossier de cache dont le chemin contient des caractères hors de la page de codes du système, comme un nom d’utilisateur chinois sur un Windows anglais, est utilisé tel quel au lieu d’être transformé en points d’interrogation
- Le code qui affecte un AnsiString à la propriété continue de se compiler ; la valeur est convertie en Unicode lors de l’affectation
Version 2.770.134
Fixed
- SetOptionalContentGroupUsage avec la catégorie Zoom écrit désormais la plage de zoom comme les nombres /min et /max, tels que la spécification PDF les définit ; la valeur entière était écrite comme une chaîne de texte sous /Min, que les lecteurs ignorent, si bien que la plage de zoom du calque n’avait aucun effet
- La valeur Zoom est le grossissement minimum suivi facultativement du maximum, séparés par une espace (par exemple '0.5 4') ; une valeur qui ne commence pas par un nombre lève désormais une exception
Version 2.770.133
Fixed
- La création de sous-ensembles des polices CFF/OpenType intégrées ne perd plus les sous-routines que les glyphes utilisent encore ; les glyphes avec plus de huit hints, des hints hstemhm ou des masques de compteurs étaient analysés incorrectement, si bien qu’une sous-routine utilisée pouvait être remplacée par une vide et le glyphe rendu avec des contours manquants ou cassés
Version 2.770.132
Fixed
- RegisterNChannelColorSpace (la surcharge avec définitions de colorants spot) écrit désormais correctement comme clés des dictionnaires /Colorants, /Solidities et /DotGain les noms de colorants contenant des espaces ou des délimiteurs, comme "PANTONE 185 C" ; le nom brut cassait la syntaxe du fichier
- AddPDFX6ExternalOutputIntentSpotData écrit de la même façon ses clés de colorants pour les données de solidité et spectrales
Version 2.770.131
Fixed
- Les métadonnées XMP écrites avec EnableXMPMetadata portent désormais Title, Author, Subject et Keywords en UTF-8 valide quand ils contiennent du texte dans la page de codes du système (par exemple des caractères accentués ou chinois affectés comme AnsiString) ; les octets bruts de page de codes rendaient le paquet XML invalide, ce que les validateurs PDF/A et les lecteurs XMP rejettent
- Les caractères de contrôle que XML 1.0 n’autorise pas sont exclus de ces valeurs XMP
Version 2.770.130
Fixed
- Les images JBIG2 écrites avec JBIG2Options.AccumulateGlobalsAcrossPages se décodent de nouveau correctement quand une page ultérieure ajoute des symboles que les pages antérieures n’utilisaient pas ; ces pages continuaient de se référer au flux globals de la première page, qui manque des nouveaux symboles, si bien que les lecteurs les affichaient altérées ou pas du tout
- Dès qu’une page ajoute des symboles, un flux globals contenant tout le dictionnaire jusqu’à cette page est écrit et utilisé à partir de là ; les pages qui n’ajoutent aucun symbole continuent de partager le plus récent
Version 2.770.129
Fixed
- L’enregistrement d’un document chargé dont les objets ont un numéro de génération autre que 0 écrit désormais des numéros d’objets cohérents : une réécriture complète (SaveLoadedDocument et méthodes apparentées) écrit chaque objet, référence et entrée de références croisées avec la génération 0, là où les en-têtes d’objets et le trailer gardaient l’ancienne génération tandis que les références et la table de références croisées utilisaient 0
- Les mises à jour incrémentales (SaveIncrementalUpdate et méthodes apparentées) se réfèrent désormais aux objets existants avec leur numéro de génération réel ; les références étaient toujours écrites avec la génération 0 et pointaient donc vers des objets qui n’existent pas quand l’original utilisait une autre génération
Version 2.770.128
Fixed
- THPDFPage.TextOutHTML avec un MaxWidth ne perd plus le formatage lors d’un retour à la ligne : quand plusieurs runs de styles différents passaient ensemble à la ligne suivante, ils étaient fusionnés en un seul run dessiné avec le style en vigueur au moment du retour à la ligne, si bien que leur couleur, leur style gras ou italique, leur police, leur taille, leur décalage indice/exposant et leur lien se perdaient. Chaque run garde désormais son propre formatage sur la nouvelle ligne
Version 2.770.127
Fixed
- InvalidateRenderedPageCache purge désormais aussi les entrées de glyphes Type 3 et de demi-teintes partagées par le rendu parallèle ; après une invalidation de tout le document, le rendu parallèle suivant pouvait réutiliser des glyphes mis en cache pour le contenu précédent
- PreflightLoadedPAdES ne vide plus le cache de rendu partagé comme effet de bord de la vérification du niveau PAdES d’une signature, si bien que les rendus après un preflight gardent leurs glyphes en cache
Version 2.770.126
Fixed
- L’analyse de révisions et de modifications des documents signés signale désormais correctement les noms de champs quand le nom contient des parenthèses ou se termine par une, par exemple "Total (net)" ; le dernier caractère était coupé
- Les noms de champs écrits avec des échappements octaux ou avec une continuation de ligne par antislash se décodent eux aussi
Version 2.770.125
Fixed
- SplitPDFToFiles n’ouvre plus chaque fichier de sortie dans le lecteur PDF par défaut au moment de son écriture ; les documents internes qu’il crée ont désormais AutoLaunch désactivé
Version 2.770.124
Fixed
- GetLoadedTrailerID renvoie désormais l’identifiant de fichier permanent du document depuis le tableau /ID du trailer, sous forme de texte hexadécimal ; il cherchait /ID dans le catalogue du document, où il ne se trouve jamais, et ne signalait donc aucun identifiant pour pratiquement tous les fichiers
Version 2.770.123
Fixed
- SetLoadedOpenActionPage écrit désormais une destination qui nomme la page demandée ; la référence de page était écrite comme 0 0 R, si bien que les lecteurs ne pouvaient pas ouvrir le document à cette page
- La destination garde la position de vue courante (left et top null) au lieu de forcer 0 0, ce qui sautait au coin inférieur gauche de la page
Version 2.770.122
Fixed
- SetLoadedViewerPreferences écrit désormais HideToolbar, HideMenubar, FitWindow et DisplayDocTitle comme valeurs booléennes ; elles étaient écrites comme les noms /true et /false, que les lecteurs ne traitent pas comme des booléens, si bien que les préférences n’avaient aucun effet
Version 2.770.121
Fixed
- CheckLoadedSignatureSeedValue applique désormais la valeur seed /Reasons d’un champ de signature quand les flags /Ff du champ la marquent comme requise (bit 4, valeur 8) ; un motif non listé passait auparavant
- Les motifs se comparent exactement, comme les chaînes de texte en PDF ; "approved" ne satisfait plus une valeur seed qui liste "Approved"
Version 2.770.120
Fixed
- Tamponner une page chargée plus d’une fois avec StampLoadedPageText ou StampLoadedPageShape donne désormais à chaque tampon sa propre opacité, et à chaque tampon de texte sa propre police standard ; les tampons à partir du deuxième réutilisaient la transparence et la police du premier tampon de la page
- Un tampon avec la même opacité et la même police qu’un tampon antérieur partage toujours ses ressources, si bien que des tampons identiques répétés ne font pas grossir les ressources de la page
Version 2.770.119
Fixed
- ExtractLoadedPageStructureText suit désormais les éléments de structure dont l’entrée /K est un simple numéro de contenu marqué (par exemple /K 3 ou /K [0 1]), la forme la plus courante dans les PDF balisés ; ces éléments étaient ignorés, si bien que la méthode ne signalait aucun ordre de structure pour de nombreux documents balisés ou renvoyait leur texte dans l’ordre de dessin
- La méthode ne lit plus une entrée de catalogue invalide quand un document n’a aucun objet racine utilisable
Version 2.770.118
Fixed
- StampLoadedPageText, StampLoadedPageImage, StampLoadedPageShape, StitchLoadedPage et FlattenLoadedAnnotations ne cassent plus les pages qui héritent leurs ressources du nœud /Pages parent ; elles donnaient à une telle page un nouveau dictionnaire /Resources vide, ce qui masquait les polices et images héritées, si bien que le texte et les images d’origine de la page ne s’affichaient plus
- La page reçoit désormais sa propre copie des ressources héritées avant que la nouvelle police, image ou form soit ajoutée
Version 2.770.117
Fixed
- ComposeLoadedPagesNUp, ImposeLoadedPagesNUp, ImposeLoadedPagesBooklet et les méthodes d’assemblage de pages reportent désormais les ressources qu’une page source hérite de son nœud /Pages parent ; ces pages étaient posées sans leurs polices et images, si bien que leur texte et leurs images manquaient ou étaient faux sur la feuille composée
Version 2.770.116
Fixed
- SaveIncrementalUpdateAuthenticated peut désormais réécrire dans le fichier d’où la mise à jour incrémentale avait été lancée ; la mise à jour acceptée ne pouvait pas remplacer la cible parce que le document gardait la source ouverte, et l’appel échouait toujours avec une erreur de commit d’accès refusé
- Comme avec un SaveIncrementalUpdate sur place, la source est libérée avant le remplacement, rouverte si le remplacement échoue, et BeginIncrementalUpdate doit être rappelé avant un autre enregistrement incrémental
Version 2.770.115
Fixed
- RepairPDFUA2Structure ne prend plus un temps exponentiel sur les arbres de structure dont les éléments sont listés par plus d’un parent (ou forment un cycle) ; la réparation d’héritage de langue, la réparation d’ordre des titres et le scan de contenu marqué derrière la réparation de texte alternatif ne parcourent désormais chaque élément de structure qu’une fois. Un arbre forgé de 24 éléments listant chacun deux fois le suivant prenait auparavant environ 40 secondes
Version 2.770.114
Fixed
- HPDFPaginateTable n’ajoute plus des pages jusqu’à épuisement de la mémoire quand une ligne insécable ne tient pas sous les lignes d’en-tête répétées ; sur une page qui ne contient que des en-têtes répétés, la ligne se scinde désormais (ou, quand les en-têtes remplissent la page, est posée avec droit de déborder)
- HPDFLayoutFootnotes et HPDFLayoutEndnotes ne bouclent plus à l’infini quand le séparateur ne laisse aucune place sur une page ou que la hauteur minimale de fragment d’une note ne peut être atteinte sur une page vide ; la note est posée sur cette page à la place
Version 2.770.113
Fixed
- HPDFBalanceColumns ne se bloque plus quand un élément sécable a une ligne plus haute que la hauteur de colonne ; il passait à la colonne suivante pour toujours. Une telle ligne se pose désormais seule en haut d’une colonne vide, en débordant, et la mise en page continue
Version 2.770.112
Fixed
- Les documents chiffrés avec le gestionnaire de sécurité standard révision 4 (filtres de chiffrement RC4 ou AES-128) s’ouvrent de nouveau quand leur dictionnaire de chiffrement omet l’entrée /Length de niveau supérieur facultative ; le chargement échouait avec "Unsupported legacy Standard security handler V=4 R=4 Length=40"
- Toute valeur /Length de niveau supérieur est acceptée pour ces documents, la clé de fichier faisant toujours 128 bits
Version 2.770.111
Fixed
- ProcessObjectStreamsForDecompression et ExtractRawObjectFromStream ne font plus confiance au compte /N déclaré d’un flux d’objets : un compte au-dessus de dix millions est rejeté et le compte est limité aux paires numéro d’objet que l’en-tête du flux peut réellement contenir, si bien qu’un fichier forgé ne peut plus leur faire allouer ni parcourir des millions d’entrées vides
Version 2.770.110
Fixed
- La Direct File API (DADirectEncryptFileAES256, DADirectDecryptFileAES256 et méthodes apparentées) lit désormais /Root, /Info, /Encrypt, /Prev et /XRefStm d’une section de références croisées classique uniquement depuis le dictionnaire trailer de cette section ; sur les fichiers mis à jour incrémentalement, elle pouvait prendre un /Prev dans les objets d’une révision ultérieure (par exemple un élément de signets) ou son trailer, et échouer ou lire la mauvaise révision
- Une chaîne de /Prev qui reboucle vers une section déjà lue s’arrête désormais au lieu de relire les mêmes sections
Version 2.770.109
Security
- ApplyLoadedRedactions supprime désormais le texte sous une zone de caviardage sur les pages dont le contenu est réparti sur plusieurs flux ; quand un flux se terminait par un opérateur et le suivant commençait par un (par exemple ET suivi de BT), le texte après la jonction était rapproché des mauvais opérandes et restait lisible dans le fichier enregistré bien que la zone ait été recouverte
- Les flux de contenu sans données sont ignorés de façon cohérente, si bien que les flux restants s’alignent avec le texte qui avait été localisé sur la page
Version 2.770.108
Changed
- GetLoadedOCGCount, GetLoadedOCGName, GetLoadedOCGVisibility et SetLoadedOCGVisibility utilisent désormais tous le même index : la position du groupe de contenu facultatif dans le tableau /OCGs de /OCProperties du document. Count et name utilisaient la position dans le tableau /ON de la configuration par défaut, la visibilité utilisait la position dans /OFF et le setter utilisait /OCGs, si bien qu’un même index pouvait désigner trois groupes différents ; les documents sans /OCGs retombent toujours sur le tableau /ON
- GetLoadedOCGVisibility signale désormais un groupe comme masqué quand il est listé dans /OFF, ou quand il est dans aucun des deux tableaux et que le /BaseState de la configuration par défaut est /OFF
Fixed
- SetLoadedOCGVisibility ne met plus le même objet de référence à la fois dans /OCGs et /ON ou /OFF (il était libéré deux fois à la libération du document) et ne provoque plus de fuite des entrées qu’il retire
Version 2.770.107
Fixed
- CopyLoadedPage ne fait plus partager aux dictionnaires des pages source et cible les mêmes objets d’entrées /Contents et /Resources ; les objets partagés étaient libérés deux fois à la libération du document ou au remplacement de l’entrée cible, ce qui pouvait corrompre la mémoire
- La page cible reçoit désormais sa propre référence au contenu et aux ressources de la source (les valeurs directes sont copiées), et son entrée du cache de pages rendues est rafraîchie
Version 2.770.106
Fixed
- Charger un PDF endommagé ne perd plus de la mémoire pour chaque objet de flux illisible, par exemple un flux sans entrée /Length ni mot-clé endstream, ou dont le dictionnaire ou les données ne peuvent pas se charger ; ouvrir de tels fichiers en boucle faisait croître le processus sans borne
Version 2.770.105
Fixed
- Les nombres écrits avec une partie fraction vide comme "21." (autorisés par la spécification PDF) ne font plus échouer le chargement ; un /Length de flux indirect écrit ainsi faisait perdre tout le flux, laissant la page blanche
- Les nombres avec un signe plus de tête, une partie entière vide comme ".5", ou une partie entière au-delà de la plage 32 bits se lisent correctement eux aussi
Version 2.770.104
Fixed
- Démo PDFmerge : avec les signets activés, chaque signet par source ouvre désormais la première page fusionnée de cette source ; auparavant, chaque signet pointait la première page du fichier fusionné
- Démo PDFmerge : les sources d’exemple et le nom de sortie par défaut, comme tout nom relatif saisi dans le formulaire, se résolvent par rapport au dossier de la démo ; ajouter des fichiers ou choisir la sortie dans une boîte de dialogue ne change plus le répertoire courant au point de casser les entrées relatives
Version 2.770.103
Fixed
- Démo TextOut : le
TextOut.pdfgénéré utilise vraiment des flux de contenu compressés, comme le promettent les commentaires de la démo ; il règleCompressionsurcmFlateDecodeau lieu de s’appuyer sur l’argumentBeginDoc, qui ne contrôle pas la compression
Version 2.770.102
Fixed
- Les images dessinées avec
AlphaBlenddans un métafichier amélioré gardent désormais leur opacité enregistrée quand le métafichier est converti avecTHPDFEmfPatcher.RenderEmfDirect; elles étaient mélangées avec une opacité nulle et disparaissaient - Le format alpha enregistré est respecté lui aussi, si bien que les images sans canal alpha sont mélangées avec leur opacité constante au lieu d’échouer
- Les records bitmap dont l’en-tête ou les données de pixels pointent hors du record, ou dont les données de pixels sont plus courtes que le bitmap déclaré, sont désormais ignorés au lieu d’être lus au-delà du record
- Les bitmaps de plus de 32768 pixels de côté ou 64 mégapixels au total sont ignorés au lieu d’être alloués en entier
Version 2.770.101
Fixed
- StitchLoadedPage, StitchLoadedPageSideBySide et StitchLoadedPageSideBySideEx dessinent désormais la page source à travers un Form XObject qui porte le contenu, la boîte de page et les ressources de la page ; le dictionnaire de la page lui-même était enregistré comme XObject, ce que les lecteurs ne peuvent pas peindre, si bien que la page assemblée ne s’affichait pas
- Assembler plus d’une page sur la même cible conserve chaque page assemblée : chacune reçoit son propre nom de XObject au lieu de toutes partager un nom qui remplaçait la page précédente
Version 2.770.100
Fixed
- Les Form XObjects sont désormais clippés à leur
/BBoxau rendu, comme l’exige ISO 32000-1 ; le contenu qu’une form dessine hors de sa boîte englobante ne s’affiche plus sur la page - Les Form XObjects imbriqués à plus de quatre niveaux se dessinent désormais ; ils étaient abandonnés comme s’ils récursaient. L’imbrication est autorisée jusqu’à 32 niveaux
- Un Form XObject qui se dessine lui-même, directement ou via d’autres forms, est détecté et l’appel répété est ignoré, avec une entrée de récursion dans les diagnostics de rendu
Version 2.770.99
Fixed
- Démo PDFOptimize : la rangée de petits rectangles de chaque page de texte est désormais tracée au trait, si bien que les barres sont visibles et que le flux de contenu termine chaque chemin par un opérateur de peinture comme l’exige ISO 32000-1 8.5.2 ; les tailles de PDF de texte annoncées changent légèrement du coup
Version 2.770.98
Fixed
- Les chaînes littérales contenant des parenthèses équilibrées sans antislash, comme /Title (Report (draft) v2), se lisent désormais en entier au chargement d’un document ; la chaîne se terminait à la première parenthèse fermante et le reste du dictionnaire était mal lu
- Les parenthèses échappées continuent de fonctionner comme avant
Version 2.770.97
Fixed
- Le chargement ne confond plus un objet dictionnaire avec un flux quand l’une de ses valeurs chaîne ou nom contient les lettres "stream" en fin de ligne, comme un dictionnaire Info avec /Title (Livestream) ; l’objet était lu comme un flux et ses entrées se perdaient
- Le mot-clé stream n’est désormais reconnu que comme token à part entière après le >> fermant du dictionnaire et en fin de ligne, comme la spécification PDF définit les objets de flux
Version 2.770.96
Fixed
- Démo Stamp : les fichiers PNG et BMP proposés par le sélecteur d’images peuvent désormais servir de tampon image ; auparavant, seul JPEG fonctionnait et les autres fichiers échouaient avec une erreur de bitmap invalide
- Démo Stamp : l’annotation de tampon en caoutchouc se place comme prévu dans la zone en haut à droite de chaque page, sous un tampon image du coin supérieur, au lieu du coin inférieur droit où elle chevauchait un tampon image en bas à droite
- Démo Stamp : les chemins d’entrée, de sortie et d’image par défaut se résolvent par rapport au dossier de la démo, et choisir un fichier dans une boîte de dialogue ne change plus le répertoire courant, si bien que les noms relatifs continuent de pointer les mêmes fichiers
Version 2.770.95
Fixed
- Les requêtes d’horodatage construites avec un OID de politique (HPDFRFC3161BuildRequest, et signature avec une politique d’autorité d’horodatage) encodent désormais la politique demandée comme l’identifiant d’objet simple que la RFC 3161 spécifie
- La politique était auparavant enveloppée dans une balise de contexte que la RFC 3161 réserve aux extensions de requête, si bien qu’une autorité d’horodatage stricte rejetait la requête ou ignorait la politique
- Les requêtes sans OID de politique restent inchangées
Version 2.770.94
Fixed
- Démo ViewerPref : laisser Initial Zoom non coché signifie vraiment désormais "None (Default)" ; le PDF généré ne s’ouvre plus avec un ajustement à la hauteur, qui était le défaut du composant que la démo ne réinitialisait pas
Version 2.770.93
Fixed
- Démo FileAttach : les annotations de pièce jointe au niveau page sont désormais créées quand la démo s’exécute depuis un dossier dont le nom contient des caractères hors de la page de codes ANSI du système ; le fichier joint est transmis par son simple nom de fichier au lieu d’un chemin absolu
Version 2.770.92
Fixed
- Démo HTMLText : un chemin de sortie contenant des caractères hors de la page de codes ANSI du système (par exemple un nom de dossier grec ou cyrillique) s’écrit désormais correctement au lieu d’échouer
- Démo HTMLText : le PDF généré n’est plus ouvert automatiquement dans un lecteur externe, à l’image des autres démos console
Version 2.770.91
Fixed
- L’import de chemins SVG et XPS ne lève plus d’
EOverflowsur des nombres à des centaines de chiffres, ou sur des nombres longs combinés à un grand exposant ; de telles valeurs sont rejetées comme tout autre nombre hors plage - Cela affecte les images SVG posées via les API d’import SVG et la géométrie de chemins XPS, sur les compilateurs dont les exceptions en virgule flottante ne sont pas masquées
- Les nombres ordinaires, y compris les longues mantisses avec exposants négatifs, se lisent comme avant
Version 2.770.90
Fixed
- Démo EmfDraw : une conversion en échec (par exemple un métafichier d’entrée manquant) se termine désormais avec le code de sortie 1 au lieu de 0, si bien que les scripts et les étapes de build qui lancent la démo détectent l’échec
Version 2.770.89
Fixed
- Démo CJKAnnotations : quand Arial Unicode MS n’est pas installée, la démo retombe désormais réellement sur Microsoft YaHei ; elle vérifie les polices installées au lieu d’attendre une exception qu’une police manquante ne levait jamais, si bien que le texte CJK ne se retrouve plus dans une police de substitution sans couverture CJK
Version 2.770.88
Fixed
- Les flux de contenu qui imbriquent plus de 32 opérateurs
qne perdent plus l’état graphique englobant : les sauvegardes plus profondes étaient ignorées tandis que leurQcorrespondant restaurait quand même, si bien que le texte et les graphismes après le bloc imbriqué utilisaient l’état d’avant unqexterne - Cela affecte l’extraction de texte via l’interface de périphérique de contenu et l’export SVG de ces pages
- Les états sauvegardés croissent désormais avec la profondeur d’imbrication ; une imbrication très profonde reste correctement appariée
Version 2.770.87
Fixed
- Démo ImageDemo : le signet « Image zoom » saute désormais vers le titre IMAGE ZOOM au lieu d’un point proche du bas de la première page
Version 2.770.86
Security
- L’ouverture d’un PDF chiffré pour un certificat de destinataire à clé courbe elliptique (accord de clés ECDH) efface désormais le secret partagé brut et les tampons intermédiaires de dérivation de clé dès qu’ils ne servent plus, y compris lors de la nouvelle tentative avec l’ordre des octets alternatif et sur chaque chemin d’échec précoce
- Signer avec un certificat du magasin de certificats Windows ne laisse plus crypt32.dll et advapi32.dll chargées quand une fonction CryptoAPI requise est introuvable
Version 2.770.85
Security
- Le passage en contour d’un glyphe Type 1 dont la charstring utilise sbw avec trop peu d’opérandes ne lit plus avant le début de la pile d’opérandes ; l’opérateur mal formé est ignoré
- Une charstring Type 1 qui se termine par l’octet d’échappement d’un opérateur de deux octets ne lit plus au-delà de la fin de la charstring
Version 2.770.84
Fixed
- La longueur en octets des codes de caractères d’une plage de codespace CMap vient désormais de la longueur de ses chaînes hexadécimales, comme le précise ISO 32000-1 9.7.6.2 ; une plage telle que <0000> <00FF> était traitée sur un octet parce que sa borne haute tient dans un octet, ce qui scindait les codes de deux octets au rendu et à l’extraction de texte
- Les plages de codespace chargées depuis les CMap intégrées portent elles aussi leur longueur de code
Version 2.770.83
Fixed
- L’intégration d’un sous-ensemble d’une police TrueType installée conserve chaque composant des glyphes composites (lettres accentuées et semblables) dont les composants portent une échelle ou une transformation 2x2 ; le composant qui suit une telle transformation était mal lu, si bien qu’il pouvait manquer au sous-ensemble ou voir sa référence de glyphe écrite par-dessus les octets de la transformation
- Les glyphes composites dont les composants se référent mutuellement en boucle, se réfèrent au-delà du nombre de glyphes de la police ou pointent vers un glyphe vide ne font plus planter ni bloquer la création de sous-ensembles de polices
- Dans un sous-ensemble, un glyphe composite imbriqué dans un autre composite voit ses références de composants renumérotées une fois au lieu de deux
Version 2.770.82
Fixed
- Les nombres réels des dictionnaires de polices CFF (FontMatrix, FontBBox, valeurs blue et semblables) se lisent correctement quand un octet porte un signe, un point décimal ou un exposant accolé à un chiffre ; le chiffre du même octet était perdu, si bien que -2,25 devenait -0,5
- Ces valeurs s’analysent avec un point comme séparateur décimal quelle que soit la configuration régionale de Windows ; sur les systèmes qui utilisent la virgule décimale, elles échouaient avec une erreur de conversion
Version 2.770.81
Fixed
- L’extraction de texte et les recherches ToUnicode ne renvoient plus une chaîne multi-caractères périmée pour les codes d’une entrée de tableau beginbfrange qui suit une autre entrée de tableau à cibles multi-caractères ; ces codes correspondent désormais à leur propre caractère unique
Version 2.770.80
Fixed
- L’instanciation d’une police variable TrueType à des valeurs d’axes choisies (par exemple via SetVariableFontAxis) ne déforme plus les glyphes dont les données gvar contiennent un tuple épars après un autre tuple ; le tuple épars partait des deltas du tuple précédent et déplaçait ces points deux fois
- Les points qu’un tuple épars omet ne s’interpolent désormais qu’à partir des points que ce tuple liste, comme l’exigent les règles gvar d’OpenType
Version 2.770.79
Security
- AddTiffFromFile refuse désormais une page TIFF dont la largeur multipliée par la hauteur exigerait une trame de plus de 2 Go, en levant une exception au lieu d’allouer un tampon dont la taille avait bouclé et de laisser le décodeur écrire au-delà de sa fin (débordement de tas)
- Une page TIFF de largeur ou de hauteur nulle est refusée de la même manière
- Les pages TIFF très hautes (1 200 lignes ou plus) signalent désormais un échec d’allocation au lieu de décoder dans un tampon nil
Version 2.770.78
Fixed
- Les glyphes des polices Type 3 suivent désormais l’échelle horizontale (
Tz) : une suite de texte dessinée à 200 % d’échelle horizontale sort deux fois plus large au lieu de garder sa largeur naturelle - Les glyphes des polices Type 3 suivent désormais l’élévation du texte (
Ts), si bien que les exposants et les indices composés en polices Type 3 sont élevés ou abaissés au lieu de rester sur la ligne de base - Les avancements des glyphes étaient déjà mis à l’échelle ; les formes des glyphes s’alignent désormais dessus
Version 2.770.77
Fixed
- Les requêtes d’horodatage RFC 3161 construites par HPDFRFC3161BuildRequest encodent toujours le nonce en DER INTEGER minimal ; quand le nonce aléatoire commençait par un octet nul, la requête portait un zéro de tête redondant, que les serveurs d’horodatage stricts rejettent comme mal formée
- Le nonce renvoyé garde la longueur demandée, si bien que les appelants qui le comparent à la réponse d’horodatage ne sont pas affectés
- Les fichiers PDF 2.0 chiffrés (AES-256-GCM) dont les flux d’objets se déchiffrent en contenu vide n’échouent plus au chargement avec une erreur d’authentification GCM ; un flux d’objets vide portant une balise d’authentification valide est désormais accepté, tandis qu’une balise falsifiée reste rejetée
Version 2.770.76
Fixed
- Démo Hyperlink : les libellés de liens et les URL contenant des caractères hors de la page de codes ANSI du système (texte grec, cyrillique ou accentué par exemple) ne se transforment plus en points d’interrogation ; les libellés se dessinent en texte Unicode avec un lien URI posé par-dessus
- Démo Hyperlink : les caractères non ASCII d’une URL s’encodent en pourcentage en UTF-8 avant d’être stockés dans l’action du lien, si bien que les lecteurs ouvrent l’adresse voulue
Version 2.770.75
Fixed
- Les couleurs CalRGB dont les composantes sortent de 0..1 ne lèvent plus d’exception en virgule flottante (
EInvalidOp) au rendu ; les composantes sont bornées à leur plage valide avant l’application du gamma - Sur les compilateurs dont les exceptions en virgule flottante sont masquées, ces couleurs se rendent désormais comme la couleur valide la plus proche au lieu d’une couleur indéfinie
Version 2.770.74
Fixed
- Les réécritures Direct File API (par exemple DADirectEncryptFileAES256 et DADirectDecryptFileAES256) lancées simultanément sur plusieurs threads ne se corrompent plus mutuellement leurs sorties ; la copie par plages d’octets qu’elles partagent utilisait un tampon unique à tout le processus
Version 2.770.73
Fixed
- Le cache de révocation partagé de THPDFSignatureValidationBatch trouve désormais les réponses OCSP des certificats de signataires dont le numéro de série a son bit de poids fort à 1 ; ces réponses étaient stockées sous un numéro de série privé de son octet zéro de tête et recherchées avec lui, si bien que chaque signature suivante manquait le cache
- Les réponses OCSP signées par un répondeur délégué, ou identifiant le répondeur par clé, se stockent désormais sous l’émetteur du certificat et peuvent être réutilisées par les signatures suivantes du lot ; auparavant, elles étaient stockées sous le nom du répondeur ou pas du tout
- Les signatures qui s’appuient sur une preuve mise en cache par une signature antérieure du même lot aboutissent désormais à un verdict de confiance au lieu d’un statut de révocation inconnu dans ces cas
Version 2.770.72
Fixed
- La recherche d’un fichier intégré par nom (GetLoadedEmbeddedFileSpec, ExtractEmbeddedFileBytes, SaveLoadedEmbeddedFileToDisk et méthodes apparentées) ne déborde plus de la pile quand l’arbre de noms /EmbeddedFiles du document contient des nœuds qui se listent mutuellement ou eux-mêmes comme /Kids
- Chaque nœud de l’arbre de noms n’est parcouru qu’une fois, si bien que les noms accessibles via un nœud partagé restent trouvés
Version 2.770.71
Fixed
- Démo PageSizes : les pages aux formats chinois 8K et 16K impriment désormais leur description complète sur tous les systèmes ; les noms des formats chinois sont donnés en pinyin parce que les descriptions se dessinent en Arial, qui n’a aucun glyphe CJK, et le texte non ASCII se transformait en points d’interrogation sur les pages de codes non CJK
Version 2.770.70
Fixed
- Les dégradés axiaux (Type 2) couvrent désormais toute la zone peinte quand l’axe du dégradé en est éloigné, par exemple un dégradé défini hors du bord de la page avec
/Extend [true true]; ces zones restaient non peintes - Cela vaut pour l’opérateur
shet pour les motifs de dégradé utilisés comme couleur de remplissage ou de trait
Version 2.770.69
Fixed
- Démo Navigation : les destinations nommées
chapter-1etchapter-2ouvrent désormais leurs pages en haut, 60 points sous le bord supérieur, au lieu de faire défiler jusqu’au bas de la page ; les coordonnées de destination sont dans l’espace utilisateur par défaut du PDF, l’origine étant en bas à gauche
Version 2.770.68
Fixed
- L’extraction de texte d’un PDF doté d’une police TrueType intégrée ne reste plus bloquée des minutes quand la cmap de la police est tronquée mais annonce des milliers de segments ou de groupes ; la longueur de la table est désormais vérifiée avant la lecture des segments et des groupes
- La construction de la table glyphe-vers-Unicode d’une police TrueType intégrée parcourt chaque sous-table cmap une fois par segment ou par groupe au lieu de rechercher les 65 535 points de code BMP un par un, ce qui accélère aussi l’extraction avec les grandes polices CJK
- Les recherches de glyphes dans une sous-table cmap de format 4 ou format 12 tronquée s’arrêtent à la fin des données de la police au lieu de parcourir des segments inexistants
Version 2.770.67
Fixed
- Les fonctions exponentielles (Type 2) et de raccord (Type 3) respectent désormais un
/Domainà une seule entrée tel que[0 0.5]; il était ignoré et remplacé par[0 1], si bien que les entrées étaient bornées au mauvais intervalle - Une fonction exponentielle sans
/C1utilise désormais la valeur par défaut[1.0]; les couleurs Separation et les dégradés définis ainsi se rendaient en noir - Les fonctions exponentielles évaluent désormais
C0 + x^N (C1 - C0)avec l’entrée elle-même au lieu de la remettre à l’échelle dans 0..1, conformément à ISO 32000-1 pour les domaines autres que[0 1] - Les sorties des fonctions exponentielles ne sont bornées à
/Rangeque lorsqu’il est présent ; les couleurs spot avec un espace de remplacement Lab (L* jusqu’à 100) étaient bornées à 0..1 et se rendaient presque noires - Une fonction exponentielle dont l’entrée sort des valeurs pour lesquelles elle est définie est rejetée au lieu de lever une exception en virgule flottante
Version 2.770.66
Fixed
- Les fichiers PKCS#12 / PFX exportés sans mot de passe par des outils qui dérivent leurs clés d’un mot de passe de longueur nulle s’ouvrent désormais avec un mot de passe vide dans HPDFParsePFX, HPDFParsePFXByLocalKeyID, HPDFEnumeratePFXIdentities et les méthodes de signature PFX ; ils échouaient auparavant avec une erreur d’authentification
- Avec un mot de passe vide, l’encodage standard de RFC 7292 est essayé en premier et la forme à longueur nulle en second, pour la vérification d’intégrité comme pour le déchiffrement de clé, si bien que les fichiers qui s’ouvraient déjà continuent de s’ouvrir de la même manière
Version 2.770.65
Fixed
- L’en-tête de page de la démo DBTable pour C++Builder affiche désormais « Page 1 » au lieu de « Page1 »
- Une erreur pendant l’écriture de sa table par la démo DBTable pour C++Builder ferme désormais le document à moitié construit, si bien que le clic suivant repart d’un état propre
Version 2.770.64
Fixed
- Les démos console pour C++Builder AnnotationInteraction, FormFields, CanvasDraw, EmfDraw, FormXObject, GraphicDraw, ImageDemo, ImageMask, LineGraphicsState et RtLTextOut basculent vers le dossier de l’exécutable quand elles sont lancées sans arguments, comme les démos Delphi, si bien que leurs fichiers d’entrée sont trouvés et leurs PDF écrits là même quand on les exécute depuis un autre répertoire
- Les démos Graphic pour C++Builder n’envoient plus de message de fermeture à toute fenêtre dont le titre contient le nom de leur PDF de sortie, ce qui pouvait fermer des fenêtres sans rapport
- La démo ImageMask pour C++Builder fonctionne désormais comme la version Delphi : elle vérifie que Mask.bmp et Image.jpg existent, compresse sa sortie, n’ouvre pas de viewer et signale les erreurs au lieu de se terminer par une exception non gérée
- La démo EmfDraw pour C++Builder signale une erreur, par exemple un Sample.emf manquant, et renvoie un code de sortie non nul au lieu de se terminer par une exception non gérée
- La démo AddDelPages pour C++Builder résout les noms de fichiers d’entrée et de sortie relatifs par rapport au dossier de l’exécutable, comme la version Delphi
Version 2.770.63
Fixed
- La démo FileAttach pour C++Builder écrit FileAttach.pdf à côté de l’exécutable, le nom qu’utilisent la version Delphi et le readme, au lieu de Output.pdf dans le répertoire courant, et garde sa pièce jointe FileAttach.txt dans le même dossier
Version 2.770.62
Fixed
- La Direct File API (DADirectEncryptFileAES256, DADirectDecryptFileAES256 et les autres méthodes de réécriture directe) lit désormais correctement les décalages de flux de références croisées au-delà de 2 GiB ; ces décalages étaient tronqués et devenaient négatifs, si bien que les objets de la partie haute d’un gros fichier étaient introuvables
- Les décalages /Prev et /XRefStm au-delà de 2 GiB dans le trailer ou le flux de références croisées sont suivis au lieu d’être lus comme 0, si bien que les révisions antérieures et les sections de références croisées hybrides des gros fichiers ne sont plus ignorées
- Cela vaut aussi au chargement d’un gros fichier et à l’examen de ses révisions
- Les nouveaux assistants HPDFDirectReadUIntBE64 et HPDFFindNameInt64 renvoient la valeur 64 bits complète
Version 2.770.61
Fixed
- Un flux de références croisées dont les largeurs de champs /W sont négatives ou supérieures à 8 octets est désormais rejeté au lieu d’être décodé ; le chargement retombe sur l’analyse du fichier pour retrouver ses objets
- Les méthodes Direct File API (par exemple DADirectEncryptFileAES256) ne lisent plus de mémoire hors de la table décodée et ne peuvent plus planter sur un tel fichier ; elles le refusent désormais
Version 2.770.60
Fixed
- L’extraction de texte, la recherche et les positions de glyphes lisent désormais correctement l’opérateur de texte
": son premier opérande est l’espacement des mots et le second l’espacement des caractères ; les deux étaient inversés - Les lignes écrites avec
"et un espacement des mots ou des caractères non nul ne signalent plus de positions de glyphes décalées, ce qui pouvait fusionner ou scinder des mots dans le texte extrait de la page et déplacer les résultats de recherche - Le rendu des pages n’était pas affecté
Version 2.770.59
Fixed
- Démo Table : les lignes couvertes par le rowspan « Group A » affichent désormais leur élément et leur note dans les colonnes Item et Notes ; auparavant, le texte de la note était décalé d’une colonne et perdu
- Démo Table : le PDF généré n’est plus ouvert automatiquement dans un lecteur externe, à l’image des autres démos console, et les chemins de sortie hors de la page de codes ANSI du système restent intacts
Version 2.770.58
Fixed
- La décompression de données Flate vers un flux ne fuit plus l’état du décodeur (environ 40 Ko à chaque fois) quand le flux source ou cible lève une exception en cours de route, par exemple quand une écriture échoue ou qu’un flux atteint sa limite de taille
- La compression d’une chaîne ne fuit plus son tampon temporaire si la compression lève une exception
- La compression et la décompression qui réussissent se comportent exactement comme avant
Version 2.770.57
Fixed
- Les certificats dont l’extension de contraintes de nommage n’est pas marquée critique ne sont plus rejetés comme illisibles pendant la validation des certificats de signature ; un certificat d’autorité de certification de ce genre empêchait auparavant la construction de toute chaîne passant par lui
- Les contraintes d’un tel certificat s’appliquent désormais au reste de la chaîne comme celles d’une extension critique, si bien que les noms de signataires hors des sous-arbres autorisés sont toujours signalés comme violation de contrainte de nommage
Version 2.770.56
Fixed
- Les fonctions calculateur PostScript (Type 4) avec des procédures
ifouifelseprofondément imbriquées ne débordent plus de la pile au rendu ; une telle fonction est traitée comme inutilisable et la couleur retombe comme pour toute autre fonction invalide - L’imbrication est limitée à 64 niveaux, bien au-delà de ce que les vrais programmes calculateur utilisent ; les transformations de teinte Type 4 ordinaires et les dégradés se rendent comme avant
- L’évaluation des fonctions calculateur demande moins de pile par niveau d’imbrication
Version 2.770.55
Fixed
- Démo E-Invoice : le XML Factur-X / ZUGFeRD extrait se décode en UTF-8, si bien que les caractères accentués et autres caractères non ASCII des noms et adresses ne s’affichent plus altérés dans le panneau XML
- Démo E-Invoice : à partir de Delphi XE2, le verdict e-facture combiné décide désormais de l’étape des règles métier, si bien qu’un échec du fichier de règles ou du moteur fait échouer la validation au lieu de passer en silence
- Démo E-Invoice : une divergence entre le texte visible et le XML signalée par la vérification heuristique de cohérence est rapportée comme avertissement et ne fait plus échouer à elle seule la validation globale
Version 2.770.54
Security
- La vérification des signatures CMS (HPDFVerifyCMSSignature, HPDFVerifyCMSSignatureEx et signatures PDF chargées) signale désormais une signature mal formée quand les attributs signés n’ont pas l’attribut de type de contenu ou nomment un type de contenu différent du contenu signé, comme l’exige RFC 5652 ; ces signatures se vérifiaient auparavant comme valides, ce qui permettait de présenter comme signant un autre contenu des attributs signés faits pour un type de contenu donné
- Les signatures dont l’attribut de type de contenu est répété sont rejetées comme auparavant
- Les contresignatures, qui par définition ne portent pas d’attribut de type de contenu, et les jetons d’horodatage RFC 3161 se vérifient toujours comme avant
Version 2.770.53
Fixed
- Un deuxième clic sur le bouton de la démo Annotations pour C++Builder ne réécrit plus le document précédent avant que le nouveau ne soit commencé
- Une erreur pendant la construction du PDF par la démo Annotations pour C++Builder ferme désormais le document à moitié construit, si bien que le clic suivant repart d’un état propre
Version 2.770.52
Fixed
- Plusieurs documents ou instances de
THotPDFdans un même processus qui utilisent le même dossier de cache de rendu disque partagent désormais un index de cache unique ; auparavant, chaque instance gardait son propre index et écrasait celui des autres à chaque sauvegarde, perdant l’ordre d’utilisation récente - Les limites de nombre de documents et de taille totale du cache de rendu disque s’appliquent à toutes les instances qui partagent un dossier, si bien que le dossier ne dépasse plus son budget quand plusieurs viewers ou threads de rendu l’utilisent en même temps
- Le même dossier est reconnu quelle que soit la casse ou la présence d’un délimiteur de chemin final
Version 2.770.51
Fixed
- Le rééchantillonnage d’un bitmap avec le noyau bicubique ou Lanczos3 fonctionne désormais pour tout format de pixels source ; une source 32 bits, 8 bits ou 1 bit était lue comme si elle contenait des pixels de 3 octets, ce qui mélangeait ses canaux de couleur ou lisait au-delà de la fin de ses lignes
- Ces sources sont d’abord converties en 24 bits, si bien que l’image rééchantillonnée garde les couleurs de la source ; le résultat reste un bitmap 24 bits comme avant
- Les sources 24 bits et le noyau demi-teinte ne sont pas affectés
Version 2.770.50
Fixed
- Démo PreflightCLI :
-dsur un PDF unique écrit désormais l’index du tableau de bord même quand le fichier échoue au preflight - Démo PreflightCLI : les fichiers qui lèvent une erreur pendant le preflight figurent comme échoués dans l’index du tableau de bord, et le code de sortie reflète chaque fichier en échec
- Démo PreflightCLI : avec
-r, les rapports des PDF de même nom dans des sous-répertoires différents s’écrivent dans des sous-dossiers correspondants au lieu de s’écraser mutuellement, aussi bien avec-oque dans le tableau de bord - Démo PreflightCLI :
-f jsonet-f csvproduisent désormais le même schéma avec ou sans--profile/--preset/--aggregate, colonne spec CSV comprise - Démo PreflightReport : les rapports CSV générés avec un profil remplissent désormais la colonne spec comme les rapports sans profil
Version 2.770.49
Fixed
- La démo LargeFile pour C++Builder génère désormais le jeu d’entrées de benchmark que son readme décrit, comme la version Delphi : LargeFile-Text.pdf, LargeFile-Image.pdf, LargeFile-Mixed.pdf et le LargeFile-Encrypted.pdf chiffré en AES-256 dans un dossier BenchmarkInputs à côté de l’exécutable ; elle n’écrivait qu’un unique LargeFile.pdf de 200 pages
- La démo LargeFile pour C++Builder accepte les options
--output-dir,--scale(small, default, large, huge) et--pages, et affiche la commande HugeFileBenchmark pour le dossier généré
Version 2.770.48
Fixed
- La démo Outlines pour C++Builder écrit désormais Outlines.pdf à côté de l’exécutable, le fichier que nomme le readme, au lieu de Output.pdf dans le répertoire courant, et indique où il a été enregistré au lieu d’ouvrir un viewer
- La démo Outlines pour C++Builder construit désormais le même document de 10 pages avec libellés de page Arial que la version Delphi ; les libellés de bas de page à y = 830 étaient coupés au bord de la page et les signets « Bottom » de la dernière page pointaient au-dessous
- Une erreur pendant l’écriture du PDF par la démo Outlines pour C++Builder ne laisse plus la démo incapable de créer un autre document
Version 2.770.47
Fixed
- Le cache de rendu disque persistant fonctionne désormais sous des dossiers dont les noms contiennent des caractères hors de la page de codes ANSI du système (par exemple un dossier de profil utilisateur avec des caractères non latins) ; auparavant, chaque écriture de page y échouait et le cache ne produisait jamais de succès
THPDFDiskPageCacheprend son dossier racine comme chaîne Unicode et garde tous les chemins de cache en Unicode, y compris le remplacement atomique des fichiers de page et de l’index de cache
Version 2.770.46
Fixed
- Le rendu par région et par tuiles (
RenderLoadedPageRegionToBitmap,RenderLoadedPageTiles, rendu progressif de région) ne laisse plus une tuile vide quand son seul contenu vient d’un form XObject placé loin de l’origine ; un form compte désormais comme couvrant sa/BBoxtelle que placée par sa/Matrixet la transformation courante - Le texte posé avec
TD,T*,'ou"atterrit désormais sur la bonne ligne au moment de décider quelles tuiles le contiennent, si bien que les lignes suivantes d’un paragraphe ne sont plus écartées des tuiles où elles apparaissent - Les décalages
Tdsont mis à l’échelle par la matrice de texte et mesurés depuis le début de la ligne, conformément à la façon dont le texte est réellement dessiné - L’espacement des caractères, l’espacement des mots, l’échelle horizontale et l’élévation du texte sont pris en compte pour estimer où se termine une suite de texte, et les glyphes ne sont plus supposés plus étroits qu’un em
Version 2.770.45
Fixed
- La démo MemStream pour C++Builder écrit MemStream.pdf à côté de l’exécutable, le nom qu’utilise la version Delphi, au lieu de Memory.pdf dans le répertoire courant
- La démo MemStream pour C++Builder recharge désormais le PDF en mémoire avec LoadFromStream et vérifie qu’il compte une page avant de l’enregistrer
- Une erreur pendant l’écriture du PDF par la démo MemStream pour C++Builder ne laisse plus la démo incapable de créer un autre document
Version 2.770.44
Fixed
- La démo HelloWorld pour C++Builder n’envoie plus de message de fermeture à toute fenêtre dont le titre contient HelloWorld.pdf au démarrage, ce qui pouvait fermer des fenêtres sans rapport comme un éditeur ou un gestionnaire de fichiers
- La démo HelloWorld pour C++Builder écrit HelloWorld.pdf à côté de l’exécutable et ne l’ouvre que si
--openest passé ; comme la version Delphi, elle accepte un nom de fichier de sortie ou--output <file>
Version 2.770.43
Fixed
- Le chargement d’un PDF dont l’arbre de pages comporte des nœuds /Pages intermédiaires ne perd plus les pages situées sous ces nœuds ; ces documents ne signalaient auparavant que les pages listées directement sous la racine de l’arbre
- Les pages gardent leur ordre dans l’arbre de pages, si bien que les index de pages, les boîtes de page et le contenu correspondent à ce que montrent les autres viewers
- Une page dont /Type est stocké comme objet indirect est reconnue comme page pendant cette étape de mise en ordre
Version 2.770.42
Fixed
- Le chargement d’un PDF dont l’arbre de pages se référence lui-même (un nœud /Pages listé parmi ses propres /Kids, ou deux nœuds qui se listent mutuellement) ne plante plus par débordement de pile ; chaque nœud de l’arbre de pages n’est parcouru qu’une fois et les arbres d’une profondeur absurde sont coupés
- Un nœud d’arbre de pages dont le tableau /Kids ou le nom /Type est stocké comme objet indirect charge désormais ses pages au lieu d’échouer ou de lire de la mémoire invalide
Version 2.770.41
Fixed
- THPDFPage.LastAnnotation renvoie désormais le lien créé par AddGoToLink, AddURILink, AddNamedDestinationLink, AddGoToRLink, AddLaunchLink, AddStructureDestinationLink et AddGoToRStructureDestinationLink
- Appeler SetAnnotationFlags, SetAnnotationBorderStyle ou AddPopupAnnotationFor avec LastAnnotation juste après l’ajout d’un lien ne fait plus silencieusement rien ni ne modifie à la place l’annotation créée précédemment
Version 2.770.40
Fixed
- Le JSON de job passé à
THPDFJobProcessor.Execute,HPDFDocRunJobetHPDFDocRunJobWithCallbacksse lit désormais en UTF-8 de bout en bout : les échappements\uXXXXne se replient plus dans la page de codes ANSI, et les paires de substitution échappées comme😀produisent le caractère voulu au lieu de deux caractères cassés - Les noms de fichiers d’entrée et de sortie des jobs de fusion, découpe, optimisation, chiffrement et validation conservent les caractères hors de la page de codes du système, qu’ils soient écrits en UTF-8 brut ou en échappements
\u, si bien que ces fichiers sont trouvés et écrits sous leur vrai nom - Un échappement
\umal formé de moins de quatre chiffres hexadécimaux est abandonné sans avaler les caractères suivants ni le guillemet fermant - Une marque d’ordre des octets UTF-8 au début du texte du job est ignorée
Version 2.770.39
Fixed
- Les identifiants d’objet fournis par l’appelant lors de la construction de signatures et de requêtes d’horodatage (politique de signature, type d’engagement, rôle revendiqué, politique d’horodatage et OID semblables) s’encodent désormais correctement quand le premier arc vaut 2 et le second arc 48 ou plus ; la première valeur combinée était coupée à un seul octet, produisant un identifiant différent et faux
- Un arc d’identifiant d’objet trop grand pour être représenté est désormais rejeté avec une erreur au lieu de boucler silencieusement sur une autre valeur
Version 2.770.38
Fixed
- Démo HugeFileBenchmark : avec
--recursive --keep-output, les PDF qui partagent un nom de fichier dans des sous-répertoires différents ne s’écrasent plus mutuellement leurs fichiers générés ; le répertoire de travail reflète désormais l’arborescence du dossier d’entrée
Version 2.770.37
Security
- Le rendu d’un PDF doté d’une police TrueType intégrée dont les glyphes composites listent beaucoup de composants, chacun de nouveau composite, ne peut plus bloquer le moteur de rendu ni l’export texte-vers-contour ; un glyphe se développe désormais en 1024 composants au plus sur tous les niveaux d’imbrication
- Un composant de glyphe composite qui se réfère à son propre glyphe est ignoré au lieu d’être développé jusqu’à la limite d’imbrication
Version 2.770.36
Fixed
- Une fonction de raccord (Type 3) qui se référence elle-même, directement ou à travers d’autres fonctions, ne s’appelle plus récursivement jusqu’à provoquer un débordement de pile ; elle est traitée comme une fonction inutilisable
- Cela affecte les transformations de teinte Separation et DeviceN, les fonctions de dégradé et les fonctions de transfert des PDF mal formés ou hostiles rendus avec
RenderLoadedPageToBitmapet les autres chemins de rendu - L’imbrication de fonctions est limitée à 16 niveaux ; les documents légitimes imbriquent bien moins profondément
Version 2.770.35
Fixed
- La démo PageOperations pour C++Builder suit désormais le même déroulé que la version Delphi : elle insère aussi une page blanche de taille personnalisée avec InsertLoadedBlankPage et imprime le texte des pages 1 à 3 avec ExtractLoadedPagesText
- Les fichiers réordonné et extrait de la démo PageOperations pour C++Builder contiennent désormais les mêmes pages que ceux de la version Delphi, en déplaçant la dernière page en page 2 et en extrayant les pages 2 et 5
Version 2.770.34
Fixed
- La démo Hyperlink pour C++Builder poursuit sur une nouvelle page quand la liste de liens ne tient pas sur une page ; les liens au-delà du bas de la première page étaient écrits hors de la page
- Add, Remove et Make PDF de la démo Hyperlink pour C++Builder sont désactivés pendant l’écriture du PDF, si bien que la liste de liens ne peut plus changer et que le document ne peut pas être démarré une seconde fois en pleine génération
Version 2.770.33
Fixed
- La démo Stamp pour C++Builder place désormais le filigrane texte et l’annotation de tampon relativement à la taille de chaque page ; sur les pages paysage et autres pages non A4, l’annotation de tampon tombait hors de la page et le filigrane se décentrait
Version 2.770.32
Fixed
- Chaque bouton de la démo ViewerPref pour C++Builder repart désormais d’un document neuf ; la direction de lecture, le zoom initial et les autres préférences de viewer d’un clic antérieur restaient en vigueur, si bien que par exemple Create PDF après Test Direction écrivait toujours du texte de droite à gauche et des préférences qui n’étaient plus sélectionnées
- La démo PDF_INFO pour C++Builder écrit désormais PDFInfo.pdf à côté de l’exécutable, le nom de fichier qu’utilisent la version Delphi et le readme
Version 2.770.30
Security
- La validation de chemin de certificats (HPDFValidateCMSCertificatePath, la variante en ligne et les lots de signatures) ne peut plus être bloquée par une signature qui embarque beaucoup de certificats partageant un même nom et une même clé ; un tel ensemble faisait auparavant essayer à la recherche de chemin chaque ordre possible, ce qui croît factoriellement et pouvait occuper une validation pendant des heures
- Chaque signature d’émetteur d’une chaîne candidate n’est vérifiée qu’une fois par validation et son résultat réutilisé, au lieu d’être revérifiée pour chaque chemin qui passe par elle
- La recherche de chemin est plafonnée à une quantité de travail fixe ; quand le plafond est atteint, la validation signale qu’aucun chemin valide n’atteint une ancre de confiance, et les chaînes ordinaires restent bien en dessous
Version 2.770.29
Fixed
ImportLoadedInterchangeFromFDFcorrespond désormais à des noms de clés entiers quand il lit les annotations et le statut FDF :/Tne s’arrête plus à/Typeou/Text,/Fplus à/FreeText, et/Statusplus à une clé plus longue qui commence pareil, si bien que les annotations importées gardent leur auteur et leurs flags- Les clés des dictionnaires imbriqués à l’intérieur d’une annotation importée, et le texte ressemblant à des clés à l’intérieur des chaînes, ne sont plus pris pour les entrées propres de l’annotation
- Les chaînes littérales des annotations et statuts FDF importés décodent tous les échappements définis par ISO 32000-1 :
\t,\b,\f, l’octal\dddet les continuations de ligne par antislash, en plus de\n,\ret des parenthèses échappées
Version 2.770.28
Fixed
- Dans les builds faits avec des versions de Delphi antérieures à XE2, qui utilisent le lecteur PNG embarqué, le chargement d’un fichier PNG avec un chunk de texte compressé (zTXt) ne lit plus au-delà d’un tampon interne ; un texte de plus de 256 octets sortait corrompu et beaucoup trop long, et des chunks volumineux pouvaient faire planter
- La méthode de compression d’un chunk de texte compressé se lit désormais à l’octet correct, si bien que les chunks à méthode non prise en charge sont ignorés au lieu d’être décodés comme des données deflate
- Un texte compressé tronqué ou mal formé ne risque plus une boucle de décodage sans fin
- Les builds avec Delphi XE2 et ultérieurs utilisent le lecteur PNG du système et ne sont pas affectés
Version 2.770.27
Changed
- La démo SearchAndSelect pour C++Builder fonctionne désormais comme la version Delphi : elle crée un PDF d’exemple, le charge, trouve le terme recherché avec SearchLoadedDocumentText et ajoute une annotation de surlignage sur chaque occurrence avec AddLoadedHighlightAnnotation
- La démo SearchAndSelect pour C++Builder accepte un PDF d’entrée, un terme de recherche, un fichier de sortie et les options --case-sensitive et --whole-word, et vérifie dans la copie enregistrée les nouvelles annotations
Fixed
- Les surlignages de la démo SearchAndSelect pour C++Builder couvrent désormais les mots trouvés ; ils étaient posés une ligne trop haut parce que la position du texte était prise pour la ligne de base au lieu du haut du texte
Version 2.770.26
Fixed
- La démo DigiPrint pour C++Builder démarre désormais sur les systèmes dont le séparateur décimal est un point ; les décimales à virgule de demo.xml étaient analysées avec les paramètres régionaux du système et levaient une erreur pendant la création de la fiche
- La démo DigiPrint lit demo.xml et ses deux icônes JPEG dans le dossier de l’exécutable et y écrit demo.pdf, et le projet place désormais l’exécutable dans le dossier de la démo à côté de ces fichiers
- Les icônes de page du pied de page de la démo DigiPrint se dessinent à l’intérieur de la rangée de pied de page au lieu de sous le filet du bas de page, et le titre, l’année et le texte de pied de page utilisent les tailles de police du style de rapport
- Un clic multiple sur le bouton DigiPrint ne décale plus la marge de gauche encore plus à droite à chaque clic
- Une erreur pendant la construction du PDF par la démo DigiPrint, comme un fichier image manquant, ne laisse plus la démo incapable de créer un autre document
Version 2.770.25
Fixed
- Démo Showcase : les bandes d’en-tête, le fond de couverture, les échantillons de dégradé et l’accent de la dernière page s’alignent désormais avec les formes qu’ils remplissent ; les coordonnées des dégradés sont données dans l’espace utilisateur par défaut du PDF (origine en bas à gauche), si bien que les couleurs ne sont plus décalées ni retournées
- Démo Showcase : Save Copy ne bascule plus le fichier de travail, si bien que Regenerate et Open External continuent d’utiliser la galerie principale au lieu de la dernière copie écrite
- Démo Showcase : quand la génération de la galerie échoue, le viewer est rattaché à nouveau et continue d’afficher la dernière galerie chargée au lieu de rester vide
- Démo Showcase : les chemins de sortie avec des caractères hors de la page de codes ANSI du système passent tels quels
Version 2.770.24
Fixed
- Le chargement d’une image JPEG 2000 à quatre composantes (RGB plus alpha, ou YCC plus alpha) dans un
TJpeg2000Bitmapplace désormais le rouge, le vert, le bleu et l’alpha dans les bons octets du bitmap 32 bits ; auparavant, les canaux de couleur étaient décalés d’un octet et le canal alpha en écrasait un - Cela corrige aussi un aller-retour d’un
TJpeg2000Bitmap32 bits parSaveToStreametLoadFromStream, qui revenait avec des couleurs mélangées - Les images couleur à trois composantes, les images en niveaux de gris et les images CMYK à quatre composantes se chargent comme avant
Version 2.770.23
Security
- Une chaîne de texte dont la valeur commence par << et se termine par >> (par exemple un titre, un auteur, une valeur de champ de formulaire ou un texte d’annotation tel que « <<URGENT>> ») s’enregistre désormais toujours comme chaîne ; elle était écrite verbatim, ce qui brisait la syntaxe du fichier et permettait à un texte forgé d’injecter un dictionnaire, par exemple une action, dans le document enregistré
- Cela vaut pour les nouveaux documents et pour les documents chargés enregistrés avec SaveLoadedDocument et les méthodes apparentées
Version 2.770.22
Fixed
- La démo Barcodes pour C++Builder écrit Barcodes.pdf à côté de l’exécutable au lieu du répertoire de travail courant, et accepte un nom de fichier de sortie facultatif comme unique argument
- La démo Barcodes pour C++Builder n’ouvre plus de viewer PDF après son exécution et, comme la version Delphi, compresse le contenu de ses pages et s’ouvre au zoom ajusté à la hauteur
- Les erreurs de la démo Barcodes pour C++Builder sont signalées avec leur texte de message ; la console affichait une adresse mémoire à la place
Version 2.770.21
Fixed
- Dans l’ABI C stable, appeler
hpdf_document_destroypendant qu’un autre appel sur le même handle tourne encore (depuis un autre thread, ou depuis un callback de lecture, d’écriture, de progression ou d’annulation) ne libère plus le document sous cet appel - Le handle devient invalide dès que
hpdf_document_destroyretourne ; le document lui-même est libéré quand le dernier appel en cours sur lui se termine - Les appels qui recherchent un handle concurremment avec sa destruction reçoivent
HPDF_STATUS_INVALID_HANDLEau lieu de toucher de la mémoire libérée
Version 2.770.20
Security
- Façonner du texte avec une police TrueType/OpenType dont les lookups contextuels GSUB se référencent eux-mêmes ne déborde plus de la pile et ne plante plus ; la profondeur d’imbrication s’accumule désormais réellement à travers les niveaux
- Une règle contextuelle qui déclenche beaucoup de lookups imbriqués ne peut plus les multiplier en une boucle quasi sans fin : chaque correspondance de premier niveau exécute au plus 1024 lookups imbriqués
Fixed
- Une substitution contextuelle en chaîne (lookup GSUB de type 6) atteinte depuis un autre lookup contextuel s’applique désormais ; elle était lue avec la disposition contextuelle simple et ne correspondait jamais, si bien que certaines ligatures et formes contextuelles manquaient
- Une substitution en chaîne inverse (lookup GSUB de type 8) référencée depuis une règle contextuelle est ignorée comme l’exige la spécification OpenType, au lieu d’être mal lue comme une sous-table contextuelle
Version 2.770.19
Fixed
RenderLoadedPageToDCne lève plus de violation d’accès quand la page contient un XObject image ou une image en ligne ; les images se dessinent dans le contexte de périphérique de l’appelantGetLoadedPageMetafilen’échoue plus sur les pages avec images, et les images sont enregistrées dans le métafichier renvoyé- Le rognage des images contre la surface visible utilise désormais la taille passée à
RenderLoadedPageToDCquand le contexte de périphérique n’a pas de région de clipping
Version 2.770.18
Fixed
- Les régions demi-teinte JBIG2 avec saut de grille activé ne perdent plus les cellules de grille qui commencent à gauche ou au-dessus de la région mais la recouvrent encore ; ces cellules étaient traitées comme situées loin dehors, leurs valeurs de gris étaient sautées, et les cellules restantes de la région se décodaient en décalé
- Les coordonnées de grille négatives qui ne sont pas des pixels entiers s’arrondissent désormais vers moins l’infini comme l’exige la spécification JBIG2, si bien que les cellules partiellement visibles tombent sur le bon pixel
- Les régions demi-teinte dont la grille se trouve entièrement à des coordonnées non négatives ne sont pas affectées
Version 2.770.17
Fixed
- Les réponses OCSP dont le répondeur est identifié par hachage de clé sous la forme standard de RFC 6960 (une balise [2] explicite autour du hachage de clé) sont de nouveau acceptées ; la validation de chemin de certificats les écartait auparavant, si bien que la révocation restait inconnue pour tout répondeur qui se nomme par clé
- Les répondeurs directs (l’AC émettrice) comme les certificats de signature OCSP délégués identifiés par clé sont reconnus, et l’ancienne forme à balisage implicite continue de fonctionner
- HPDFDescribeValidationEvidence indexe désormais les descripteurs OCSP par le DN de l’émetteur du certificat nommé dans chaque réponse, résolu depuis le hachage du nom d’émetteur de la réponse, au lieu du DN du répondeur ; les réponses des répondeurs délégués et les réponses identifiées par clé produisent désormais des descripteurs qu’une recherche par émetteur du certificat peut retrouver
- Une surcharge de HPDFDescribeValidationEvidence prend désormais la signature CMS et des certificats d’émetteur supplémentaires, pour les réponses qui identifient le répondeur par clé et n’embarquent aucun certificat
Version 2.770.16
Fixed
- Démo Viewer : la fiche ne lève plus de violation d’accès au démarrage ; la barre d’état existe désormais avant que le viewer ne soit rattaché au document et commence à signaler les changements de page
- Démo Viewer : appuyer sur Entrée dans la zone de recherche active désormais le premier résultat au lieu de sauter directement au second
- Démo Viewer : les signets sans page de destination résoluble sont listés sans un suffixe « (p0) » erroné, et cliquer dessus ne lève plus d’erreur de plage
Version 2.770.15
Fixed
- L’étape de déchiffrement de la démo Security pour C++Builder ouvre désormais réellement l’exemple chiffré avec le mot de passe utilisateur « user » ; l’argument du mot de passe était pris pour le drapeau de déchiffrement automatique, si bien que l’exemple était chargé sans son mot de passe et que Security-Decrypted.pdf n’était pas une copie déchiffrée
Version 2.770.14
Fixed
- Un chemin de rognage posé avec
WouW*prend effet désormais après que le chemin est peint, comme l’exige ISO 32000-1, au lieu d’avant - Le tracé d’un chemin qui pose aussi le clipping (
re W S) peint désormais toute la largeur du trait ; la moitié extérieure du trait était coupée par le clipping propre du chemin - Le remplissage-tracé avec un clipping impair-impair (
W* B) remplit désormais avec la règle d’enroulement propre de l’opérateur de peinture ; le clipping impair-impair perçait des trous dans le remplissage B*etb*remplissent désormais toujours avec la règle impair-impair, indépendamment de la règle de remplissage laissée par une opération antérieure
Version 2.770.13
Fixed
- Les régions demi-teinte JBIG2 dont les plans de niveaux de gris sont codés en MMR se décodent désormais ; auparavant, les plans sortaient inversés, une colonne sur huit seulement était lue, et la fin de chaque plan était localisée au mauvais octet, si bien que les plans suivants se décodaient depuis la mauvaise position
- Le marqueur de fin de bloc après chaque plan MMR est reconnu qu’il suive directement la dernière ligne ou qu’il vienne après du remplissage d’octets, et chaque plan démarre désormais à la frontière d’octet qui suit
- Les régions demi-teinte à codage arithmétique ne sont pas affectées
- Cela vaut pour les images PDF au filtre JBIG2Decode chargées, extraites ou rendues avec le décodeur intégré
Version 2.770.12
Fixed
- Le JSON produit par le processeur de jobs (
THPDFJobProcessor.Execute,HPDFDocRunJob,HPDFDocRunJobWithCallbacks) et par la comparaison de documents échappe désormais les guillemets et antislash en\"et\; les formes\x22/\x5Cprécédentes ne sont pas du JSON valide et faisaient rejeter par les parseurs standards des résultats contenant un guillemet ou un chemin Windows - Les caractères de contrôle s’écrivent en échappements
\uXXXXet la sortie est toujours de l’UTF-8 bien formé : les octets qui ne sont pas de l’UTF-8 valide sont remplacés par U+FFFD au lieu d’être copiés dans le résultat - Les messages d’erreur des résultats de job et de l’objet d’erreur de comparaison s’encodent en UTF-8, si bien que le texte d’exception non anglais et les noms de fichiers n’arrivent plus dans la page de codes ANSI
Version 2.770.11
Fixed
- RedactLoadedRect, StampLoadedPageText, StampLoadedPageImage, StampLoadedPageShape, StitchLoadedPage et FlattenLoadedAnnotations ne jettent plus le contenu existant d’une page quand son /Contents est un tableau de flux ; les nouveaux opérateurs s’ajoutent comme un flux supplémentaire à la fin du tableau, ou au début pour un underlay
- Les tampons en underlay sur une page dont le contenu est réparti sur plusieurs flux gardent chaque flux d’origine
- Les pages dont l’unique flux de contenu utilise un filtre autre que FlateDecode simple (ASCIIHex, ASCII85, LZW, RunLength, chaînes de filtres ou Flate avec prédicteur) se décodent désormais avant l’ajout de nouveaux opérateurs, si bien que le tampon, la zone de caviardage ou l’apparence aplatie est réellement peinte et que le contenu d’origine reste lisible
- Quand le flux de contenu d’une page ne peut pas être décodé du tout, il reste intact et les nouveaux opérateurs s’écrivent dans un flux séparé au lieu d’être ajoutés aux octets encodés
Version 2.770.10
Security
- Le rendu d’un PDF dont la police CFF intégrée (FontFile3, Type1C ou CIDFontType0C) stocke un décalage INDEX de 0x80000000 ou plus ne lit plus de mémoire hors des données de la police ; ces décalages étaient traités comme négatifs et passaient les vérifications de bornes
- Les polices TrueType intégrées reçoivent le même traitement pour les positions de glyphes et longueurs de tables de 0x80000000 ou plus : le glyphe ou la police est ignoré au lieu d’être lu au mauvais endroit
- Un glyphe CFF dont les sous-routines s’appellent mutuellement de nombreuses fois ne peut plus bloquer le rendu ni l’export texte-vers-contour ; chaque glyphe dispose désormais d’un budget fixe d’opérations de charstring, bien au-dessus de ce que les vraies polices utilisent
Version 2.770.9
Fixed
- Les images JBIG2 dont les régions de texte utilisent le codage Huffman avec raffinement de symboles dans le gabarit de 13 pixels se décodent désormais ; les octets de pixels adaptatifs de raffinement de l’en-tête de région étaient sautés, si bien que le nombre d’instances et chaque champ suivant étaient lus au mauvais décalage et l’image était rejetée
- Les régions de texte à codage arithmétique, ou au gabarit de raffinement de 10 pixels, ne sont pas affectées et se décodent exactement comme avant
- Cela vaut pour les images PDF au filtre JBIG2Decode chargées, extraites ou rendues avec le décodeur intégré
Version 2.770.8
Security
- Avec l’isolation des codecs activée, la taille d’une image décodée renvoyée par le worker de codec isolé est désormais vérifiée contre la limite de sortie configurée et la mémoire partagée allouée par le processus hôte, au lieu d’un champ de capacité que le worker peut lui-même écraser
- Un worker compromis ou défaillant ne peut plus faire copier à l’hôte au-delà de la fin du bloc de mémoire partagée ; une telle réponse est rejetée comme erreur de protocole et l’image n’est pas dessinée à partir d’elle
- La réponse du worker est copiée une fois et validée depuis cette copie, si bien que son en-tête ne peut pas changer entre les vérifications et la copie des pixels
Version 2.770.7
Fixed
- Les requêtes OCSP construites pour la vérification de révocation en direct (HPDFCollectCMSRevocationRequests et la validation de chemin de certificats en ligne) encodent désormais correctement l’identifiant d’algorithme SHA-256 du CertID ; auparavant, les deux premiers arcs de l’identifiant d’objet étaient écrits comme octets séparés, si bien que l’algorithme de hachage était invalide
- Les répondeurs OCSP qui rejettent les requêtes mal formées répondent désormais à ces requêtes avec un statut normal au lieu d’une erreur, si bien que les vérifications de révocation en ligne ne retombent plus sur des preuves hors ligne à cause de l’encodage de la requête
Version 2.770.6
Fixed
- Le rendu d’une police Type 3 peint désormais chaque occurrence d’un glyphe ; auparavant, un glyphe répété dans la même suite de texte, ou ailleurs sur la page avec la même taille et la même orientation, n’était peint que la première fois et restait vide ensuite
- Cela affecte
RenderLoadedPageToBitmap,RenderLoadedPageToDC, les métafichiers de page et les chemins d’export image, avec ou sans le cache de rendu partagé - Les glyphes Type 3 répétés continuent d’utiliser le cache de glyphes, si bien que la correction ne relit pas la procédure du glyphe à chaque occurrence
Version 2.770.5
Fixed
- L’ABI C stable ne libère plus deux fois la source d’entrée quand
hpdf_document_load_from_ioéchoue pendant l’analyse du document, par exemple quand le callback de lecture signale une erreur ou que l’opération est annulée en cours de route ; un tel chargement pouvait corrompre le tas ou faire planter le processus hôte - Un chargement échoué retourne désormais le statut du callback ou de l’annulation au lieu d’une erreur interne, et le même handle de document peut être chargé de nouveau ensuite
- Charger un nouveau document dans un handle existant ne libère la source d’entrée précédente qu’une fois que le nouveau chargement a pris le relais
Version 2.770.4
Fixed
- Les résultats de codes-barres de
DecodeLoadedPageBarcodessur les pages avec/Rotate 90ou/Rotate 270signalent désormais des bornes à la position réelle du symbole au lieu d’une position en miroir à travers la page - L’orientation de code-barres signalée sur ces pages correspond désormais à la direction dans laquelle le symbole se lit réellement dans l’espace de la page
- Le texte invisible posé par
ApplyLoadedOCRTextLayersur les pages tournées d’un quart de tour se trouve désormais au-dessus des mots reconnus, si bien que la sélection et la recherche surlignent le bon endroit - Les visages détectés par la détection de caviardage sur les pages tournées d’un quart de tour sont eux aussi ramenés à la bonne zone de la page
- Les pages non tournées et retournées à 180° ne sont pas affectées
Version 2.770.3
Fixed
- Dans les builds 32 bits, le chargement ou l’écriture d’une image TIFF compressée avec PixarLog ne plante plus par débordement de pile ; la sélection du codec construit ses tables de companding, qui tombaient sur une fonction d’exposant récursive à l’infini
- Les images TIFF SGILog (LogLuv) des builds 32 bits passent par les mêmes assistants mathématiques corrigés
- L’assistant d’arrondi inférieur 32 bits utilisé par les codecs TIFF arrondit désormais les valeurs négatives vers moins l’infini et accepte de grandes amplitudes sans erreur de débordement, à l’image des builds 64 bits
Version 2.770.2
Changed
- Au rendu, une image dessinée à la moitié de sa taille en pixels ou moins est réduite à exactement la taille dessinée par moyenne de surface juste après le décodage, au lieu d’être gardée à taille pleine et étirée pendant le dessin
- L’image réduite tient dans le cache d’images décodées : un groupe de transparence dessiné deux fois, sur noir et sur blanc, pour récupérer son alpha décode désormais une telle image une fois au lieu d’une fois par passage, et il en va de même au re-rendu de la même page
- Une image avec un masque doux est combinée à son masque pixel par pixel à la taille dessinée, le masque étant réduit lui aussi ; cela évite de construire et de prémultiplier une copie pleine taille d’une grande image et de son masque, et le bord du masque n’est plus échantillonné au plus proche voisin
- Sur une page d’exemple avec une image masquée de 4229 x 4629 dessinée à environ un quart de sa taille dans un tel groupe, le rendu prenait environ 1,8 seconde au lieu de 4,5
- Les masques image pochoir gardent leur pleine résolution, et les méthodes publiques de décodage de région continuent de renvoyer les tailles qu’elles documentent
Version 2.770.1
Fixed
- Dans les builds 64 bits, le rendu d’une page avec un groupe de transparence échouait avec une erreur d’index de liste dès que le groupe ne posait pas de masque doux qui lui soit propre, une régression de la version 2.769.3 ; ces pages se rendent de nouveau
Version 2.770.0
Added
- La nouvelle propriété
RenderColorimetricLuminosityMaskschoisit comment un masque doux de luminosité transforme la couleur en valeurs de masque quand son groupe a un espace de fusion à base CIE (CalGray,CalRGB,LabouICCBased) - La mettre à
trueprend le Y CIE comme le décrit ISO 32000-1 11.5.3 ; les bitmaps rendus sous les deux réglages sont mis en cache séparément
Changed
- Par défaut, un masque de luminosité pondère désormais la couleur résolue de son groupe comme DeviceRGB quel que soit l’espace de fusion, comme le font les viewers PDF courants. Le Y CIE se mesure sur une échelle linéaire, si bien qu’un gris moyen dans un groupe ICC ou calibré n’était masqué qu’à un cinquième environ, et les ombres portées et fondus ressortaient bien plus clairs que dans les autres viewers
- La couleur de fond
/BCd’un masque suit le même réglage que la peinture à l’intérieur du groupe du masque - Les masques dont le groupe utilise un espace de couleur de périphérique se rendent comme avant
Version 2.769.3
Fixed
- Un groupe de transparence peint avec un mode de fusion autre que Normal, comme les ombres portées Multiply qu’exportent les outils de création, fusionne désormais sa propre couleur et son propre alpha avec l’arrière-plan (ISO 32000-1 11.3.6 et 11.4.8). Là où le groupe était partiellement transparent, ses pixels contenaient déjà l’arrière-plan, qui se fusionnait alors avec lui-même : une ombre Multiply ressortait trop sombre et dans la teinte de l’arrière-plan
- Le contenu d’un groupe de transparence démarre avec le mode de fusion Normal, le mode de fusion s’appliquant au groupe dans son ensemble (11.6.6). Il gardait le mode avec lequel le groupe était peint, si bien qu’un groupe isolé multipliait son contenu avec son départ vide et peignait en noir
- Un masque doux posé dans le même état graphique qu’un mode de fusion dessine son groupe de masque avec une fusion Normal (11.6.5.2) ; le mode de fusion rendait noir un groupe de masque blanc et cachait ce que le masque aurait dû montrer
- Pour trouver l’alpha d’un groupe qui n’est pas isolé, le groupe se dessine deux fois, sur noir et sur blanc, quand ses propres états graphiques fusionnent normalement ; ces pages se rendent un peu plus lentement
Version 2.769.2
Changed
- Une image avec un masque doux se décode à la taille à laquelle elle est dessinée, comme l’était déjà une image sans masque, et son masque se décode aussi à cette taille ; un masque JPEG passe par le décodeur JPEG à taille réduite au lieu d’être décodé en entier
- L’image et son masque se décodent toujours en entier, si bien que le masque ne peut pas se décaler par rapport à l’image, et le rognage garde ce qui est dessiné dans la partie visible
- Sur une page avec une image d’ombre de 4229 x 4629 et un masque JPEG de 2114 x 2314 dessiné à environ 1000 pixels de large, le rendu à 72 dpi prenait 1,6 seconde au lieu de 3,7
DecodeLoadedImageRegionAtResolutionrenvoie une image entière d’un format sans décodeur de région telle que décodée, sans la copier une fois de plus
Version 2.769.1
Changed
- Les masques doux se construisent plus vite : la construction d’un masque ne garde plus une seconde copie de la page entière à laquelle comparer, ce que les pages avec beaucoup de masques, comme les dégradés et ombres portées qu’exportent les outils de création, payaient une fois par masque
- Les masques de luminosité sur un espace de fusion calibré ou à base ICC consultent la courbe sRGB au lieu de la calculer pour chaque canal de chaque pixel, et le contenu de masque en gris, le cas courant, se convertit par une unique table
- Une page de 1125 x 1600 avec une vingtaine de masques doux se rend environ un cinquième plus vite ; les pixels rendus sont inchangés
Version 2.769.0
Changed
- Définir la Width ou la Height d’une page ne masque plus les erreurs : un échec lève désormais une exception au lieu de laisser la taille silencieusement inappliquée, et définir la taille d’une page dont le canvas a déjà été fermé lève la nouvelle EHPDFPageClosedError avec un message qui dit pourquoi
- Après un tel échec, la page ne reste plus dans un état où les changements de taille ultérieurs ne mettent à jour que son MediaBox et pas la taille de page utilisée pour le dessin
Fixed
- Redimensionner une page d’un PDF chargé n’écrase plus d’autres objets : un MediaBox dont les nombres sont des objets séparés, ou un tableau MediaBox partagé par plusieurs pages, est copié pour la page redimensionnée, si bien que les autres pages gardent leur taille
- Redimensionner une page chargée dont le MediaBox compte moins de quatre nombres écrit désormais un MediaBox complet avec la nouvelle taille ; la nouvelle taille était ignorée auparavant
Version 2.768.20
Fixed
- L’extraction de texte n’entre plus dans un Form XObject qui se peint lui-même, directement ou à travers d’autres forms ; un tel form était relu à chaque niveau d’imbrication, répétant son texte jusqu’à douze fois, et un form qui se peignait deux fois prenait 4 096 passages
- Le texte d’un Form XObject qui tombe en dehors de la boîte englobante du form, qui le rogne, ne fait plus partie du texte de la page
Version 2.768.19
Changed
- Les gros documents se chargent de nouveau plus vite : le parcours de l’arbre de pages ne recherche plus tous les objets chargés pour chaque page, et la vérification de chiffrement de LoadFromFile avec AutoDecrypt lit le fichier par le même tampon que le chargement. La PDF Reference 1.7 de 56 Mo se charge désormais en environ 8 secondes au lieu de 22
Version 2.768.18
Fixed
- Le rendu de pages trouve désormais les polices installées que Windows signale sous un nom localisé, comme Microsoft YaHei sur un Windows chinois ou Yu Mincho sur un Windows japonais ; le texte dans ces polices était dessiné dans une police de substitution quand le PDF ne les intégrait pas
- Les noms de polices écrits sans espaces correspondent désormais aux familles Windows qui gardent certains mots soudés, comme MicrosoftYaHei pour Microsoft YaHei, MicrosoftJhengHei pour Microsoft JhengHei et MSPGothic pour MS PGothic ; ils étaient recherchés avec une espace devant chaque majuscule et jamais trouvés
- Le moteur de rendu se souvient des noms de polices installés, si bien que les documents avec beaucoup de polices non installées ne sondent plus Windows pour chaque nom à chaque page
Version 2.768.17
Changed
- Les gros documents se chargent bien plus vite : la télémétrie des opérations échantillonne désormais la mémoire au plus une fois toutes les 10 ms au sein d’une opération au lieu d’échantillonner à chaque objet lu par le parseur, un échantillon qui parcourait chaque bloc du gestionnaire de mémoire. La PDF Reference 1.6 de 1 236 pages se charge en environ 2,5 secondes au lieu de 30, et la PDF Reference 1.7 de 56 Mo en environ 22 secondes au lieu de plus de quatre minutes
- Le ralentissement croissait avec la taille du tas propre à l’application, si bien que les applications qui retiennent beaucoup de mémoire en profitent le plus
- UpdateOperationTelemetrySample gagne un paramètre Force facultatif qui prend un échantillon quel que soit l’intervalle ; la fin de chaque opération en prend toujours un
Version 2.768.16
Fixed
- Le chargement d’un fichier vide ne se bloque plus ; LoadFromFile bouclait à l’infini en lisant à rebours depuis le début du fichier
- Un fichier dans lequel aucune page ne peut être trouvée, comme un fichier vide, du texte brut ou des octets aléatoires, ne se charge plus sous forme d’une ou trois pages blanches devinées d’après sa taille ; LoadFromFile retourne désormais 0 ou lève une exception, comme pour les autres fichiers illisibles
- Un fichier chiffré dont les pages se trouvent dans des flux d’objets chiffrés lève désormais une exception disant que le mot de passe est requis quand il est chargé sans, au lieu de se charger comme une page blanche ; chargez-le avec la surcharge à mot de passe
Version 2.768.15
Fixed
- Le texte de page ne répète plus les caractères qui sont repeints par-dessus eux-mêmes, comme dans les logos surimprimés et le gras simulé en dessinant le texte deux fois avec un petit décalage ; un tel texte était extrait deux fois, par exemple « Bold wordsBold words », et les recherches dessus pouvaient échouer
- Les modes d’extraction texte, colonne, mise en page et sémantique lisent tous un tel caractère une seule fois ; la liste de glyphes signale toujours chaque glyphe peint
Version 2.768.14
Fixed
- Les noms de glyphes de la liste Adobe Glyph List complète se résolvent désormais dans l’extraction de texte et le rendu, parmi eux les ligatures fi, fl, ff, ffi et ffl et les noms afii qu’utilisent les anciennes polices cyrilliques, hébraïques et arabes ; un encodage de police qui nommait de tels glyphes donnait les mauvais caractères, par exemple « defined » était extrait en « deÞned »
Version 2.768.13
Changed
- LoadFromFile lit les fichiers en dessous de LocalFileMappingThreshold (8 Mo par défaut), et tout fichier quand le mapping est désactivé ou indisponible, par un tampon de lecture de 64 Ko ; les fichiers avec beaucoup d’objets et une table de références croisées classique se chargent bien plus vite, par exemple le PostScript Language Reference Manual de 912 pages en environ 1 seconde au lieu de près de 3 minutes
Version 2.768.12
Fixed
- L’extraction de texte place désormais les glyphes des polices à clés CID (Type 0) dont le tableau de largeurs /W n’est pas ordonné par CID ; la plupart des glyphes recevaient la largeur plein-em par défaut, si bien que les lignes dépassaient le bord de la page et que leurs fins étaient perdues dans le texte extrait et la recherche
Version 2.768.11
Fixed
- Les lettres accentuées des polices CFF (Type 1C) intégrées qui sont construites à partir d’une lettre de base et d’un accent, comme dans beaucoup de polices converties du Type 1, se rendent désormais ; des lettres comme ü et é restaient vides, si bien que des mots comme « München » montraient un trou
- Les mêmes lettres sont désormais complètes dans l’export SVG avec polices intégrées
Version 2.768.10
Fixed
- Les glyphes composites des polices TrueType intégrées placent désormais chaque partie à son propre décalage : les lettres accentuées comme é et Å perdaient leur accent, et les guillemets doubles courbes s’affichaient comme une apostrophe suivie d’un vide
- Les mêmes glyphes sont désormais complets dans l’export SVG avec polices intégrées
Version 2.768.9
Fixed
- Les images marquées
/Interpolate falsesont désormais moyennées quand elles sont dessinées plus petites que leur propre résolution ; elles étaient échantillonnées un pixel sur plusieurs, si bien que des graphiques posés en images montraient des libellés d’axes crénelés et sombres et des lignes fines cassées là où les autres viewers les montrent lisses - Les images agrandies avec
/Interpolate falsegardent leurs bords de pixels nets comme avant
Version 2.768.8
Fixed
- Le texte dessiné avec un trait plus étroit qu’un pixel, comme les documents le font pour du gras simulé, se rend désormais à cette largeur ; le trait faisait auparavant un pixel entier, si bien que de tels titres semblaient bavés et bien plus gras que dans les autres viewers
- Les petits glyphes des polices intégrées et installées sont tracés avec anticrénelage dans les modes de rendu de texte 1 et 2, dans la couleur du trait, après le remplissage
Version 2.768.7
Fixed
- Appeler
ProcessObjectStreamsForDecompressionsur un document chargé n’abandonne plus les flux d’objets que le chargement avait lus : les objets compressés restent accessibles ensuite àExtractRawObjectFromStreametExtractObjectFromStream, alors qu’auparavant aucun ne pouvait être lu - Quand la méthode scanne elle-même le fichier, comme pour un document à table de références croisées classique, elle trouve désormais un flux d’objets qui suit directement un autre flux et lit son nombre d’objets et ses offsets dans son propre dictionnaire
ExtractRawObjectFromStreamdécode à nouveau un flux d’objets quand le cache de flux d’objets l’a libéré, au lieu de renvoyer un résultat vide
Version 2.768.6
Fixed
- La démo Stamp se compile désormais correctement en Win64
Version 2.768.5
Fixed
- Sur les éditions chinoise, japonaise et coréenne de Windows, les documents à flux de références croisées dont les dictionnaires contiennent des chaînes binaires, comme les sommes de contrôle des fichiers attachés, se chargent désormais en une fraction de seconde ; un portfolio de 4 Mo avec neuf PDF attachés mettait deux minutes à s’ouvrir
- Le parseur cherche désormais ses mots-clés dans les octets bruts du fichier plutôt que dans du texte converti via la page de codes Windows, si bien que des données binaires accolées à un mot-clé ne peuvent plus le masquer ni décaler sa position
Version 2.768.4
Fixed
- Le contenu d’un Form XObject est désormais rendu avec l’opacité, le soft mask et le mode de fusion qu’il se fixe lui-même ; auparavant, tout ce qui se trouvait dans un form était peint à pleine opacité, donc les filigranes et tampons translucides ressortaient opaques
- Un form peint avec une opacité qui lui est propre reste composé une seule fois dans son ensemble, comme avant
Version 2.768.3
Fixed
- Le texte de page inclut désormais le texte que la page peint via des Form XObjects, comme les en-têtes et pieds de page, les filigranes et les tampons ; auparavant, seul le texte du contenu propre de la page était renvoyé
- Le texte d’un form apparaît là où le form est peint, placé via sa matrice et lu dans ses propres polices, et les forms imbriqués les uns dans les autres sont également suivis
- Cela vaut pour le texte de page plain, layout, column et semantic ; l’extraction au niveau des glyphes ne renvoie toujours que les glyphes du contenu propre de la page, dont les positions pointent dans ce contenu
Version 2.768.2
Fixed
EncryptFileetDecryptFileen AES-256 n’endommagent plus les fichiers de polices intégrées dont le dictionnaire liste/Length1avant/Length, comme les écrivent Ghostscript et d’autres outils ; ces polices étaient chiffrées comme un octet unique, ce qui laissait le résultat illisible- Les flux dont la longueur est stockée dans un flux d’objets compressé conservent toutes leurs données à travers un chiffrement et un déchiffrement AES-256 ; auparavant, le dernier octet d’un tel flux pouvait se perdre
Version 2.768.1
Fixed
- Les documents dont les longueurs de flux sont stockées dans des flux d’objets compressés, comme les écrit Ghostscript, se chargent désormais intégralement ; auparavant, chaque flux de contenu de page d’un tel fichier était abandonné, donc les pages se rendaient vides et ne donnaient aucun texte
- Un flux dont la longueur renvoie à un objet inexistant, ou qui n’a aucune longueur, se lit désormais jusqu’à son marqueur de fin au lieu d’être abandonné
Version 2.768.0
Added
BuildLoadedPageSVGetSaveLoadedPageAsSVGacceptent un paramètreEmbedFontsfacultatif ; désactivé par défaut, il laisse les appels existants exporter exactement comme avant- Avec
EmbedFontsàTrue, le texte des polices dont le programme TrueType ou CFF est intégré au PDF est dessiné à partir des contours de glyphes de la police elle-même, si bien que le SVG se montre identique sur les systèmes où ces polices ne sont pas installées - Chaque contour de glyphe est écrit une seule fois et réutilisé partout où le caractère apparaît, ce qui contient la taille du fichier sur les pages riches en texte
- Le texte reste dans le SVG en texte transparent posé sur les contours, si bien qu’on peut toujours le sélectionner, le rechercher et le lire avec un lecteur d’écran
- Texte en remplissage, en contour et en remplissage plus contour, épaisseurs de trait, texte pivoté ou mis à l’échelle et texte utilisé comme chemin de clipping ressortent comme dans la page rendue
- Les polices non intégrées, les programmes de polices Type 1 et le texte CJK vertical restent du texte SVG ordinaire
Version 2.767.4
Fixed
- Le texte en contour et en remplissage plus contour (modes de rendu du texte 1 et 2) des polices non intégrées respecte désormais l’épaisseur de trait au rendu ; auparavant, chaque contour ressortait large d’un pixel quelle que soit l’épaisseur demandée
- Ces contours sont désormais dessinés d’après les formes de glyphes exactes de la police installée, à leurs positions exactes, comme l’était déjà le texte rempli
- Les caractères que la police installée ne possède pas, que Windows puise dans une police de repli, gardent eux aussi l’épaisseur de trait une fois mis en contour
Version 2.767.3
Fixed
- Le texte des polices non intégrées est désormais dessiné avec les caractères que son encodage désigne. Les codes de caractères partaient tels quels vers la police installée, qui les lit dans son propre jeu de caractères, donc chaque entrée
/Differenceset les codes où StandardEncoding ou MacRomanEncoding diffèrent du jeu de caractères Windows dessinaient les mauvais caractères, par exemple des guillemets droits au lieu de guillemets courbes dans les polices Type 1 sans encodage - Sur les éditions chinoise, japonaise et coréenne de Windows, les lettres accentuées, les guillemets courbes, le signe copyright et les autres caractères au-dessus du code 127 dans les polices non intégrées étaient dessinés en points d’interrogation depuis la version 2.766.83 ; ils sont de nouveau lus dans le jeu de caractères de la police installée
- Les polices Symbol gardent leur propre correspondance de codes
Version 2.767.2
Fixed
- Les grands glyphes des polices intégrées sont désormais rendus avec anticrénelage eux aussi. Les glyphes de plus de 64 pixels, comme les titres aux résolutions d’impression, étaient remplis sans lui et montraient des bords crénelés ; ils sont maintenant anticrénelés jusqu’à 256 pixels, tandis que le texte plus grand des polices installées conserve la sortie texte anticrénelée du système
Version 2.767.1
Fixed
- L’extraction du texte layout, column et semantic mesure désormais la page en unités de page. Elles comparaient les positions avec la taille de police donnée à
Tfet avec les avances de l’espace texte, qui ne représentent qu’une fraction des distances réelles dans les nombreux documents qui dimensionnent le texte via la matrice de texte, si bien que le texte layout étalait chaque lettre sur plusieurs colonnes, que le texte column perdait toutes les espaces entre mots et que le texte semantic isolait presque chaque mot sur sa propre ligne - Les trois ne renvoient désormais que le texte situé dans la boîte visible et séparent les mots qu’un document écarte en déplaçant la position du texte, comme le texte de page plain
- Le texte layout garde réunies les lettres d’un mot, là où les lettres larges comme m ou W finissaient par glisser une espace dans le mot
- Le texte semantic ne colle plus une ligne vide après chaque ligne d’une page à une seule colonne : une suite de lignes pleine largeur forme une seule zone, et un changement de zone ne sépare les lignes que lorsqu’elles sont écartées de plus d’un interligne
- Les pages d’aide de ces méthodes décrivent ce qu’elles renvoient, et la méthode column affiche sa syntaxe complète
Version 2.767.0
Added
LoadFromFileetLoadFromStreamont des surcharges avec un paramètreAutoDecrypt. AvecAutoDecryptà True, un document chiffré avec un mot de passe utilisateur vide — comme le sont les documents qui se contentent de restreindre impression, copie ou édition — s’ouvre déchiffré en mémoire à la manière des viewers, donc on peut en extraire le texte et en rendre et exporter les pages sans fournir de mot de passe- Les documents qui exigent un mot de passe et les documents non chiffrés se chargent exactement comme avec les surcharges ordinaires, et le fait que le mot de passe vide ouvre le document est vérifié sur quelques petites plages du fichier avant le chargement
- Comme avec les surcharges à mot de passe, un document ouvert ainsi n’est plus chiffré en mémoire, et l’enregistrer écrit une copie déchiffrée
Version 2.766.83
Changed
- Le petit texte des polices non intégrées, comme les 14 polices standards et les polices Office et chinoises installées, est désormais rendu à partir des contours de glyphes non hintés, à sa position exacte et avec le même anticrénelage que les polices intégrées. La sortie texte du système utilisée auparavant posait chaque glyphe sur un pixel entier et ajustait sa forme à la grille de pixels, si bien que le petit texte était espacé de façon inégale et paraissait taché ; les pages rendues se rapprochent désormais nettement plus des formes et des espacements des autres viewers
- Les glyphes que la police installée ne possède pas et les grands glyphes restent dessinés avec la sortie texte du système, qui peut prendre les caractères manquants dans des polices liées
Fixed
- Les petits glyphes des polices intégrées se dessinent plus vite, car les bitmaps qui soutiennent leur anticrénelage sont réutilisés au lieu d’être créés pour chaque glyphe
Version 2.766.82
Fixed
- Le texte dessiné avec les polices installées dans les pages rendues utilise désormais l’anticrénelage en niveaux de gris. Il suivait le réglage ClearType du système, si bien que le texte noir des bitmaps rendus traînait des franges rouges et bleues propres à chaque machine et qui subsistaient dans les images enregistrées, imprimées ou mises à l’échelle
Version 2.766.81
Fixed
- Le petit texte des polices CFF et OpenType CFF intégrées est désormais rendu avec anticrénelage, comme le texte TrueType l’était déjà. Ces glyphes étaient remplis sans anticrénelage, donc aux petites tailles et aux résolutions d’écran courantes, les fûts plus étroits qu’un pixel disparaissaient et le texte courant se brisait en fragments ; formulaires et documents composés dans des polices comme Helvetica Neue sont désormais lisibles à 72 DPI
Version 2.766.80
Changed
- L’extraction du texte de page ne renvoie que le texte que la page montre. Les glyphes situés hors de la zone visible — la crop box dans la media box — sont écartés, si bien que les repères d’impression, les lignes de gâche et autres contenus extérieurs à la page au format final n’apparaissent plus dans le texte extrait. L’extraction au niveau des glyphes renvoie toujours chaque glyphe avec sa position
Version 2.766.79
Fixed
- L’extraction du texte de page ne coupe plus une ligne sur un exposant surélevé ou une ligne de base légèrement décalée dans le texte dimensionné via la matrice de texte. Une nouvelle ligne démarrait dès que le texte montait ou descendait de la moitié de la taille de police donnée à
Tf, qui vaut souvent 1 dans ces documents, si bien qu’un déplacement d’un demi-point suffisait - Le texte pivoté, comme des étiquettes montant le long d’un bord de page ou des filigranes en diagonale, ne place plus chaque caractère sur sa propre ligne. Les lignes se distinguent désormais par le déplacement en travers de la direction du texte, comparé à la moitié de la hauteur du texte sur la page
Version 2.766.78
Fixed
- Quand l’export SVG retombe sur une famille de polices générique pour une police non installée, il nomme désormais d’abord une forme courante de ce type : Times New Roman avant
serif, Arial avantsans-serifet Courier New avantmonospace. Un navigateur choisit la forme d’une famille générique seule d’après ses propres réglages de langue, et les navigateurs chinois ou japonais prenaient des polices CJK dont les lettres latines larges se chevauchaient aux positions issues du PDF
Version 2.766.77
Fixed
- L’export SVG nomme désormais les familles de polices chinoises installées pour les polices connues sous leurs anciens noms GB2312, comme
KaiTi_GB2312ou son orthographe chinoise. Les applications Windows accèdent à ces polices via les substitutions de polices du système, mais pas les navigateurs, si bien que ce texte s’affichait dans la police par défaut du navigateur - Une police nommée dans une seule langue reçoit aussi l’autre nom de la famille installée, par exemple SimHei accompagné de son nom chinois, plus une famille générique correspondant à son style
Version 2.766.76
Added
THPDFGlyphRecordgagneGlyphEndXetGlyphEndY, la fin en espace page de la largeur propre du glyphe le long de la ligne de base, hors espacement des caractères et des mots
Fixed
- L’extraction du texte de page sépare désormais les mots qu’un document écarte en déplaçant la position du texte au lieu d’afficher une espace. Beaucoup de producteurs écrivent
[(PDF)-240(Reference)]ou posent chaque mot avec son propre opérateur de positionnement, et ces mots se collaient alors enPDFReference - Une espace est ajoutée là où le vide après la largeur propre du glyphe dépasse 0,15 de la hauteur du texte, mesuré en unités de page afin que le texte dimensionné via la matrice de texte soit traité comme le texte dimensionné par la taille de police
- Le crénage, un espacement légèrement desserré, le resserrement des caractères que les ajustements de position rendent ensuite, le texte surimprimé et les vraies espaces restent tels quels, et aucune espace n’est ajoutée entre deux caractères chinois, japonais ou coréens, si loin que la justification les écarte
Version 2.766.75
Fixed
- L’extraction de texte, l’export SVG et le rendu reconnaissent désormais les noms de glyphes de la police Symbol, comme
copyrightsans,registerserif,trademarksanset les morceaux de grandes parenthèses et accolades (parenlefttp,braceex,integralex, ...). Les polices Symbol réduites en subset réencodent couramment ces noms, et les caractères ressortaient en codes de contrôle bruts - Tous les noms de glyphes ITC Zapf Dingbats (
a1àa206) sont également reconnus, si bien que les coches, croix, flèches et nombres cerclés qu’une police sélectionne via ces noms — comme le font souvent les champs de formulaire et les listes à puces — sont extraits comme leurs caractères Unicode - La recherche du nom de glyphe d’un caractère privilégie toujours le nom courant, comme
arrowrightouspade, face à un nom ZapfDingbats
Version 2.766.74
Fixed
HPDFExtractGlyphsViaDevicen’échoue plus avec une opération sur pointeur invalide. Le device d’extraction de texte qu’il crée est à comptage de références, et la fonction le libérait aussi explicitement, de sorte que chaque appel se terminait par une seconde libération du device
Version 2.766.73
Fixed
- L’extraction de texte restaure désormais l’état du texte avec
Q, comme l’exige la spécification (ISO 32000-1 9.3.1). Auparavant, seule la transformation était restaurée, si bien qu’une police, un espacement de caractères ou une interligne fixés dansq...Qrestaient en vigueur pour le texte qui suivait - Quand la police sélectionnée dans
q...Qutilisait des codes sur deux octets et la police extérieure des codes sur un octet, le texte aprèsQétait décodé comme des codes sur deux octets et se perdait. Word et des producteurs similaires écrivent des pages ainsi, perdant typiquement les pointillés des tables des matières et des mots latins entre des passages chinois - La correction couvre à la fois l’API de texte de page et l’interface d’extraction de texte à base de devices
Version 2.766.72
Fixed
- Le texte dessiné après
RestoreStatea désormais toujours sa police sélectionnée. La page saute une sélection de police qui répète la dernière écrite, mais elle ne tenait pas compte du fait queRestoreState(l’opérateurQ) ramène le lecteur à la police en vigueur avantSaveState. Le texte affiché aprèsRestoreStatedans la police choisie à l’intérieur de la paire ressortait sans police ou avec la mauvaise, si bien que des viewers pouvaient l’abandonner et que l’extraction de texte ne pouvait pas le lire - L’espacement des caractères, l’espacement des mots, l’échelle horizontale et l’interligne suivent
SaveStateetRestoreStatede la même façon, si bien qu’une valeur redéfinie aprèsRestoreStateest écrite au lieu d’être sautée alors que le lecteur est déjà revenu à la valeur antérieure - Sélectionner une police Type 3 ne provoque plus le saut de la sélection suivante de la police précédente
- Les documents XPS convertis en PDF étaient touchés, car chaque suite de glyphes est dessinée dans son propre état graphique sauvegardé
Version 2.766.71
Fixed
- L’extraction de texte et l’export SVG lisaient les codes d’une police simple (Type 1, TrueType ou Type 3) sur deux octets quand sa CMap
/ToUnicodedéclarait un codespace sur deux octets, comme certains producteurs l’écrivent pour chaque police. Les codes des polices simples font toujours un octet (ISO 32000-1 9.6.6), si bien que chaque paire de caractères était prise pour un code inconnu et l’essentiel du texte disparaissait, ne laissant que des chaînes d’un seul caractère
Version 2.766.70
Fixed
- L’export SVG déplaçait le texte des opérandes de
Td,TD,T*,'et"en unités de page au lieu de l’espace texte (ISO 32000-1 9.4.2). Le texte dont la taille vient de la matrice de texte — avec1 Tfet unTmmis à l’échelle, comme l’écrivent souvent les traitements de texte — voyait ses lignes empilées les unes sur les autres près de la première ligne de base ; il est désormais disposé comme dans le PDF - La même correction s’applique à l’extracteur de texte à base de device de contenu
THPDFTextExtractDevice
Version 2.766.69
Fixed
- Le moteur de rendu de pages transmettait à Windows les noms de polices contenant des séquences d’échappement
#xxavec leurs échappements, si bien que les polices non intégrées ainsi nommées — cas courant des polices CJK comme KaiTi_GB2312 écrites en caractères chinois — ne correspondaient à aucune police installée et étaient dessinées dans une forme de substitution. Les échappements sont désormais décodés ; les noms UTF-8 gardent leurs caractères et les autres octets sont lus dans la page de codes du système
Version 2.766.68
Fixed
- L’export SVG écrivait les noms de polices contenant des séquences d’échappement
#xxtels quels, si bien que des noms de polices CJK stockés en octets UTF-8 (comme le nom de KaiTi_GB2312 en caractères chinois) arrivaient dansfont-familysous la forme#e6#a5#b7...et ne correspondaient jamais à une police installée. Les échappements sont désormais décodés ; un nom UTF-8 valide est conservé, et les octets d’autres encodages sont abandonnés comme avant
Version 2.766.67
Fixed
- L’export SVG ne restaurait pas l’état du texte à
Q: police, taille, espacement, échelle, interligne, élévation et mode de rendu fixés dansq...Qse propageaient au texte suivant. Les pages qui alourdissent un titre avec2 Trdans un état sauvegardé dessinaient tout le texte corps suivant en contour et en gras. L’état du texte est désormais sauvegardé et restauré avec le reste de l’état graphique (ISO 32000-1 9.3.1)
Version 2.766.66
Fixed
- L’export SVG traçait le texte dans les modes de rendu à contour (1, 2, 5 et 6) sans épaisseur de trait, si bien que la valeur par défaut du SVG — une unité de l’espace texte — s’appliquait ; le texte que des producteurs PDF alourdissent avec un trait fin, comme
2 Tr 0.25 w, ressortait bien plus lourd. L’épaisseur de ligne est désormais convertie de l’espace utilisateur vers l’espace de l’élément texte, une épaisseur nulle donne une ligne d’un pixel, et la jointure de lignes est conservée
Version 2.766.65
Fixed
- Les documents dont le trailer donne
/Encryptcomme dictionnaire direct plutôt que comme référence, comme en produisent certains générateurs de PDF, étaient chargés comme non chiffrés : même avec le bon mot de passe, leurs pages se rendaient vides et l’extraction de texte et l’export SVG ne renvoyaient rien, etSaveLoadedDocumentécrivait un fichier endommagé qui perdait/Encrypttout en gardant les flux chiffrés. Ils s’ouvrent, se déchiffrent et s’enregistrent désormais comme les documents à dictionnaire de chiffrement indirect - Le chargeur de références croisées coupait un trailer à la première occurrence de
>>, si bien que les entrées situées après un dictionnaire imbriqué dans le trailer se perdaient ; il lit désormais le trailer jusqu’à son délimiteur fermant correspondant
Version 2.766.64
Fixed
- Le rendu, l’export SVG, le viewer et l’impression montraient la
/MediaBoxentière d’une page chargée. Une page s’affiche et s’imprime via sa/CropBox, rognée à la/MediaBox(ISO 32000-1 14.11.2), si bien que les pages dotées d’une crop box ressortaient trop grandes, décalées et avec du contenu destiné à rester caché RenderLoadedPageToBitmap, les moteurs de rendu tile, band, metafile et device-context,BuildLoadedPageSVG, la géométrie de page du viewer, les surlignages et les instantanés de région, et l’impression couvrent désormais la boîte visible ; les pages sans/CropBoxrestent inchangées
Added
THotPDF.GetLoadedPageVisibleBoxrenvoie la boîte visible d’une page chargée, c’est-à-dire sa/CropBoxrognée à sa/MediaBoxTHPDFPageDisplayList.CropBoxdonne la même boîte pour une display list compilée
Version 2.766.63
Fixed
- La liste de glyphes intégrée était parcourue jusqu’à un total 13 entrées avant la fin de la table, si bien que les noms de glyphes triés en dernier (
y,z,zero,zeta,yen,ydieresis,zcaronet autres) n’étaient jamais trouvés. L’extraction de texte ignorait les entrées/Differencesd’une police qui les nommaient, et le moteur de rendu dessinait le y, le z et le 0 des polices CFF intégrées enWinAnsiEncodingouMacRomanEncodingdans une police système de substitution - La recherche du nom de glyphe d’un accent comme U+0060 renvoyait le nom petite capitale de MacExpertEncoding (
Gravesmall) au lieu degrave, donc ces accents étaient eux aussi manqués dans les polices CFF intégrées
Version 2.766.62
Fixed
- Le moteur de rendu de pages utilisait l’épaisseur de ligne et les longueurs de tirets comme des pixels de périphérique au lieu d’unités de l’espace utilisateur (ISO 32000-1 8.4.3.2 et 8.4.3.6) ; les lignes gardaient la même largeur en pixels à chaque résolution et ignoraient toute mise à l’échelle
cm. Les diapositives exportées via macOS Quartz, qui trace les formes avec une épaisseur en EMUs sous une échelle de 1/12700, se retrouvaient entièrement recouvertes par la couleur du trait - L’épaisseur du trait et les tirets suivent désormais l’échelle de la CTM en vigueur au moment où le chemin est tracé, y compris pour le texte dessiné dans un mode de rendu à contour
Version 2.766.61
Fixed
- L’export SVG omettait les dégradés Type 1 pilotés par fonction (ISO 32000-1 8.7.4.5.2), qu’ils soient peints avec
shou utilisés dans un motif de dégradé ; il échantillonne désormais la fonction du dégradé sur son/Domaindans une image PNG intégrée, posée via la/Matrixdu dégradé et rognée à sa/BBox, avec la couleur de fond du motif dessous
Version 2.766.60
Fixed
- Le moteur de rendu de pages peignait la couleur
/Backgroundd’un dégradé mesh affiché avec l’opérateursh, ce que le PDF ignore (ISO 32000-1 8.7.4.5.1), si bien que toute la zone de clipping autour du mesh prenait cette couleur - La couleur de fond des motifs de dégradé pilotés par fonction, axiaux et radiaux n’était pas peinte par le moteur de rendu de pages ; il remplit désormais l’aire du motif avant le dégradé, si bien qu’elle apparaît partout où le dégradé n’atteint pas
- L’export SVG peint désormais la couleur de fond des motifs de dégradé de la même façon et, comme le moteur de rendu, l’ignore pour
sh
Version 2.766.59
Fixed
- Le moteur de rendu de pages ignorait la
/BBoxdes dégradés pilotés par fonction, axiaux et radiaux (ISO 32000-1 8.7.4.5.1) ; un dégradé étendu peint avecshou utilisé dans un motif de dégradé couvrait toute la zone de clipping au lieu de s’arrêter à sa boîte. Les dégradés mesh la respectaient déjà
Version 2.766.58
Fixed
- L’export SVG écrivait le texte des polices Type 3 comme du texte SVG dans une police installée, si bien que les pages qui dessinent leur texte ou leurs symboles avec des procédures de glyphes montraient les mauvaises formes ; il dessine désormais la procédure de chaque glyphe, placée via la
/FontMatrixde la police, la taille de police et la matrice de texte (ISO 32000-1 9.6.5) - Les glyphes Type 3 qui commencent par
d1sont peints dans la couleur de remplissage courante, et les glyphes qui fixent leurs propres couleurs les gardent
Version 2.766.57
Fixed
- L’extraction de texte et l’export SVG prenaient les
/Widthsd’une police Type 3 pour des millièmes d’em, alors qu’ils sont en espace glyphe et mis à l’échelle par la/FontMatrixde la police (ISO 32000-1 9.6.5) ; les glyphes d’une police à matrice[0.01 0 0 0.01 0 0]étaient posés au dixième de leur avance les uns des autres, ce qui fusionnait aussi les mots dans le texte extrait
Version 2.766.56
Fixed
- Le rendu d’une page chargée lisait chaque police Type 0 comme si elle utilisait
Identity-H, deux octets par code et chaque code son propre CID. Les polices encodées avec les CMaps UCS2 et UTF16 prédéfinies des collections chinoise, japonaise et coréenne, commeUniGB-UCS2-H, ou avec une CMap intégrée associent désormais leurs codes aux bons CIDs, si bien que les largeurs/Wet les glyphes intégrés sont recherchés aux bons CIDs ; auparavant, par exemple, les lettres latines minuscules d’un texteSTSong-Lightétaient espacées d’un em entier - Les codes sont lus selon les plages de codespace de la CMap, si bien que les codes d’un octet et de quatre octets (paires de substitution) sont lus en entier, et les noms finissant par
-Vsélectionnent l’écriture verticale
Version 2.766.55
Fixed
- Le rendu d’une page chargée dessinait dans une forme de substitution les polices non intégrées dont le nom porte une partie de style ou une orthographe PostScript, comme
TimesNewRoman,Bold,TimesNewRomanPS-BoldMT,Arial,BoldItalicouSegoeUI-Semibold; la partie famille du nom est désormais recherchée parmi les polices installées, avec aussi des espaces entre ses mots (Times New Roman, Segoe UI), et le style vient du nom et du descripteur de police
Version 2.766.54
Fixed
- Les polices standards sans tableau
/Widths, ce que l’ISO 32000-1 9.6.2.2 autorise pour les 14 polices standards, étaient disposées avec une avance fixe d’un demi-em au rendu d’une page chargée, à son export SVG ou à l’extraction de son texte, si bien que les lettres se tassaient ; les familles Helvetica, Times et Courier, y compris sous les noms Arial, TimesNewRoman et CourierNew, prennent désormais leurs largeurs dans les Arial, Times New Roman et Courier New installées, qui partagent leurs métriques - Une police Type 1 standard sans
/Encodingse décode désormais via la StandardEncoding qu’elle implique, si bien que par exemple le code 39 se lit comme une apostrophe typographique fermante
Version 2.766.53
Fixed
- Le rendu d’une page chargée ignorait le tableau
/Widthsd’une police quand c’était un objet indirect, comme beaucoup de producteurs l’écrivent, et disposait le texte avec une avance fixe d’un demi-em ; ce texte est désormais espacé selon ses largeurs - Les descripteurs de police donnés en objets indirects sont désormais lus au rendu, si bien que les drapeaux
ForceBoldetItalicet l’angle italique des polices non intégrées prennent effet - Le drapeau
SmallCapne met plus le texte en gras : le gras suit désormais le drapeauForceBold(ISO 32000-1 Table 123)
Version 2.766.52
Fixed
- Le rendu d’une page chargée rogne désormais sur le texte affiché dans les modes de rendu 4 à 7 (ISO 32000-1 9.3.6) : les glyphes rejoignent le chemin de clipping à la fin de l’objet texte, jusqu’à restauration de l’état graphique. Auparavant, le texte en mode 7 était ignoré et un dégradé ou une image censés transparaître à travers les lettres couvraient toute la zone, et les modes 4 à 6 peignaient le texte sans clipping
- Le texte de clipping provient des mêmes contours de glyphes que le texte peint, polices intégrées et glyphes Type 3 compris
Version 2.766.51
Fixed
- L’export SVG rogne désormais sur le texte affiché dans les modes de rendu 4 à 7 (ISO 32000-1 9.3.6) : les glyphes deviennent un clip path SVG de la fin de l’objet texte à la fin de l’état graphique, si bien qu’un dégradé ou une image dessinés à travers le texte n’apparaissent qu’à l’intérieur des lettres
- Le texte en mode de rendu 7 n’est plus perdu sans produire de clip, et les modes 4 à 6 remplissent ou tracent toujours le texte comme le font les modes 0 à 2
Version 2.766.50
Fixed
- Les dégradés axiaux, radiaux et pilotés par fonction dont la
/Functionest un tableau de fonctions à une sortie, une par composante de couleur (ISO 32000-1 8.7.4.5.1), n’étaient pas dessinés au rendu d’une page chargée ; ils le sont désormais, que les fonctions du tableau soient données directement ou en objets indirects - L’export SVG écrit ces dégradés axiaux et radiaux comme des gradients, y compris quand ils remplissent un chemin via un motif de dégradé
Version 2.766.49
Fixed
- L’export SVG écrivait le texte gras et italique dans le style régulier : le texte reçoit désormais
font-weight="bold"etfont-style="italic"d’après la partie style du nom de police, commeArial-BoldMT,Helvetica-ObliqueouMinionPro-It, et d’après la graisse, les drapeaux et l’angle italique du descripteur de police - Les polices hors des 14 familles standards étaient écrites avec leur partie style dans le nom de famille (
SegoeUI-Semibold), qui ne correspond à aucune police installée ; la famille est désormais nommée seule et avec des espaces entre ses mots (SegoeUI, Segoe UI), suivie d’une famille générique tirée des drapeaux du descripteur ou du nom
Version 2.766.48
Fixed
- L’export SVG dessinait le contenu des Form XObjects en noir au lieu des couleurs de remplissage et de contour en vigueur là où le form est peint (ISO 32000-1 8.10.1) ; un
Qà l’intérieur du form restaure désormais ces couleurs aussi - Les devices de contenu peuvent démarrer un contenu imbriqué à partir des couleurs de l’appelant via la nouvelle interface
IHPDFContentInheritedColorDevice
Version 2.766.47
Added
- L’export SVG remplit désormais les chemins qui utilisent un motif de tuilage avec un
<pattern>SVG qui répète la cellule du motif à ses pasXStepetYStep, rogné à la/BBoxde la cellule ; auparavant, ces chemins étaient remplis en noir ou gardaient la couleur précédente - Les motifs de tuilage non colorés (
PaintType2) peignent la cellule dans la couleur donnée avec le motif, comme les composantes dans/CS0 cs 0 0 1 /P1 scn - Les chemins remplis avec un motif de dégradé reçoivent le dégradé axial, radial ou mesh du motif, rogné au chemin
- La matrice du motif s’applique dans l’espace de la page ou du form qui utilise le motif (ISO 32000-1 8.7.2), si bien que les motifs ne changent ni d’échelle ni de position avec la matrice de transformation courante, et un
Qrestitue un motif sauvegardé par unq - Les devices de contenu peuvent recevoir des sélections de motif via la nouvelle interface
IHPDFContentPatternDevice
Version 2.766.46
Added
- Les images dotées d’un tableau
/Maskde type color key (ISO 32000-1 8.9.6.4) sont désormais masquées au rendu d’une page chargée : les pixels dont toutes les composantes tombent dans les plages de la clé restent non peints, si bien que la page transparaît - L’export SVG applique les mêmes masques color key et écrit ces images comme des PNG avec canal alpha
- La clé est comparée aux échantillons tels que stockés, si bien qu’une image Indexed se masque par indice de palette même quand deux entrées partagent une couleur, et les images à 1, 2 et 4 bits par composante sont couvertes
- La nouvelle méthode
DecodeLoadedImageColorKeyMaskrenvoie le masque d’une image chargée comme un bitmap noir et blanc ; elle couvre les images Flate, LZW et sans filtre, car les codecs avec perte ne conservent pas des valeurs d’échantillon exactes
Version 2.766.45
Changed
CompressDocumentetCompressLoadedDocumentlaissent chaque flux d’objets contenir jusqu’à 250 objets au lieu de 100 ; des conteneurs moins nombreux mais plus gros se compressent mieux et demandent moins de dictionnaires- Les PDF chargés déjà écrits de façon compacte avec des flux d’objets ressortent désormais à peu près à la taille de l’original, la plupart légèrement plus petits, au lieu de légèrement plus gros
- Une limite fixée via
ConfigureAdaptiveObjectStreamPackingest conservée,CompressDocumentrestaure la limite àEndDoc, et les enregistrements ordinaires en flux d’objets gardent 100 objets par conteneur
Version 2.766.44
Changed
- Le flux de références croisées des fichiers écrits avec des flux d’objets utilise la plus petite largeur de champ dont chaque colonne a besoin : les offsets des fichiers de moins de 16 Mo occupent 3 octets au lieu de 4 (ISO 32000-1 7.5.8.2), et son dictionnaire est écrit de façon compacte
- Les fichiers écrits avec un flux de références croisées mais sans flux d’objets restent inchangés
Version 2.766.43
Changed
- Les fichiers non chiffrés écrits avec des flux d’objets rangent désormais aussi le catalogue du document et le dictionnaire d’informations du document dans des flux d’objets, où ils sont compressés ; l’ISO 32000-1 7.5.7 n’exclut que le dictionnaire de chiffrement
- Les fichiers chiffrés gardent les deux dictionnaires au niveau supérieur, comme auparavant
Version 2.766.42
Changed
- Les fichiers écrits avec des flux d’objets, y compris ceux produits par
CompressDocumentetCompressLoadedDocument, écrivent désormais dictionnaires et tableaux de façon compacte, en omettant les espaces et retours à la ligne dont la syntaxe PDF n’a pas besoin (ISO 32000-1 7.2.2) ; les dictionnaires de flux, qui ne peuvent pas entrer dans un flux d’objets et restent non compressés, sont les grands gagnants - Les dictionnaires de signature et le dictionnaire de chiffrement conservent leur mise en forme aérée, si bien que la signature d’un document écrit avec des flux d’objets fonctionne comme avant
- Les fichiers écrits sans flux d’objets restent identiques à l’octet près
Version 2.766.41
Fixed
- Les fichiers PDF écrits avec des flux d’objets ne commencent plus par l’en-tête
%PDF-et la ligne de commentaire binaire en double ; chaque enregistrement avecUseObjectStreams,CompressDocumentouCompressLoadedDocumentétait touché - Les viewers toléraient cet en-tête répété, mais des validateurs stricts pouvaient le signaler, et il coûtait 15 octets par fichier
Version 2.766.40
Fixed
- Les PDF chargés qui conservent un nombre nu dans un flux d’objets — comme beaucoup de producteurs stockent les longueurs de flux — peuvent désormais être édités et enregistrés ; chaque modification stoppait auparavant l’enregistrement avec « Impossible de réécrire l’objet compressé N : le membre source n’a pas pu être chargé »
- Un tel nombre est maintenant lu comme un nombre ; auparavant, l’analyseur cherchait une référence indirecte au-delà de la fin du membre et abandonnait, si bien que le membre ne pouvait pas du tout être chargé
- Enregistrer un tel fichier sans modification n’était pas touché, car un fichier inchangé est copié tel quel
Version 2.766.39
Fixed
- Les annotations de tampon des documents PDF/A-2 et suivants et PDF/X-6 n’affichaient que leur cadre, sans le nom du tampon tel que APPROVED ou CONFIDENTIAL
- Le nom est désormais dessiné dans la police courante de la page, qui est embarquée avec le texte de la page, en capitales et dans la couleur de l’annotation, centré dans le rectangle
- Les noms longs comme NOTFORPUBLICRELEASE sont composés plus petits pour tenir dans la largeur du rectangle
- Les documents passent toujours la validation PDF/A ; les tampons des autres documents sont écrits comme avant
Version 2.766.38
Added
- Nouvelle surcharge de
CompressLoadedDocumentavec options qui réduit un PDF chargé à sa plus petite taille sans changer son apparence : elle supprime les ressources de pages inutilisées, fusionne les polices et formulaires identiques, crée des sous-ensembles des polices embarquées, recomprime les flux en Flate et écrit l’enregistrement suivant avec des flux d’objets - Chaque étape est sans perte et les images ne sont ni rééchantillonnées ni recomprimées ; un document de trois pages embarquant les polices Arial et SimSun complètes passe d’environ 10 Mo à environ 20 Ko, et trois autres PDF d’exemple ont rétréci de 15 à 50 %
- Les documents avec champs de signature sont refusés par défaut et laissés inchangés, car chaque étape réécrit des octets signés ;
AllowSignatureInvalidationles compresse quand même SubsetLoadedFontsgagne une optionCompactTrueTypeSubsets, désactivée par défaut, qui construit des sous-ensembles compacts des polices TrueType utilisées via des polices CIDFontType2 avec la correspondance CID identity ; les polices couleur et les polices avec un/CIDSetgardent le sous-ensemble normal- Le
CompressLoadedDocumentsans paramètre garde son comportement de recompression des seuls flux non filtrés
Version 2.766.37
Added
- Nouvelle propriété
CompressDocument, désactivée par défaut : un seul interrupteur qui écrit le document suivant aussi petit que possible sans changer son apparence - Pour ce document, elle active la compression Flate au niveau maximal, un flux de références croisées avec flux d’objets (ISO 32000-1 7.5.7 et 7.5.8), le sous-ensemblage des polices et les sous-ensembles de polices compacts ; un document de trois pages mêlant texte anglais et chinois passe d’environ 10 Mo à environ 20 Ko
- Les flux d’objets exigent PDF 1.5, si bien qu’une
Versionplus ancienne est relevée à 1.5 sauf version verrouillée ; la sortie PDF/A-1 garde sa table de références croisées classique - Vos propres réglages sont intacts : après
EndDoc,Compression,CompressionLevel,UseXRefStream,UseObjectStreams, les options de sous-ensemblage des polices et la version se relisent telles que vous les avez fixées - Les images ne sont ni rééchantillonnées ni recomprimées
Version 2.766.36
Added
- Nouvelle propriété
CompactFontSubsetting, désactivée par défaut : les sous-ensembles de polices renumérotent les glyphes qu’ils conservent, si bien que la police embarquée ne porte plus une entrée pour chaque glyphe de la police source ; un flux/CIDToGIDMapexplicite fait correspondre les codes de glyphes de la page aux glyphes renumérotés (ISO 32000-1 9.7.4.2) - Les polices CJK sont les grandes gagnantes : deux caractères chinois en SimSun occupent environ 3 Ko de données de police au lieu d’environ 25 Ko, et un document en Microsoft YaHei passe de 114 Ko à 6 Ko
- S’applique aux polices TrueType écrites comme polices Type 0 quand
EnableFontSubsettingest actif, et à la police enregistrée avecRegisterUnicodeTTF, qui jusqu’ici ne recevait des sous-ensembles compacts que sous PDF/A - Le contenu des pages, les largeurs de glyphes et l’extraction de texte restent inchangés ; les polices OpenType-CFF gardent le sous-ensemble normal, et une police qui ne peut pas être compactée retombe dessus
Version 2.766.35
Fixed
- Le texte dessiné avec une avance explicite pour chaque caractère ne se décale plus après un caractère hors du plan multilingue de base, tel qu’un symbole musical ou un emoji, quand la police Unicode enregistrée le couvre. Chaque caractère suivant prenait auparavant l’avance de son voisin ; le caractère avance désormais de la somme de ses deux entrées
- Les boîtes de texte Unicode justifiées contenant de tels caractères s’alignent sur le bord de la boîte, et le soulignement ou le texte barré de ce texte est aussi long que le texte
Version 2.766.34
Added
- L’export SVG dessine désormais les masques d’images (
/ImageMask), en ligne inclus, comme des pochoirs dans la couleur de remplissage courante : les parties non peintes sont transparentes au lieu d’être dessinées comme une image en noir et blanc - Les images avec un soft mask
/SMaskou un pochoir/Maskexplicite sont exportées comme images PNG avec canal alpha, si bien que leurs parties masquées ne recouvrent plus ce qui se trouve derrière - Un
/Decode [1 0]sur un masque ou un masque d’image est honoré, et un masque plus fin que son image garde son détail
Version 2.766.33
Fixed
- Le rendu de pages honore désormais le pochoir
/Maskexplicite d’une image : les parties couvertes par le masque ne sont pas peintes au lieu que toute l’image soit dessinée, y compris quand l’image est tournée ou mise en miroir - Un tableau
/Decode [1 0]sur le masque inverse les parties conservées - Les soft masks et les masques plus fins que leur image sont appliqués à la résolution du masque, si bien qu’un masque 1 bit détaillé sur une photo basse résolution garde ses contours
Version 2.766.32
Fixed
- Le rendu de pages dessine désormais les images à travers la matrice de transformation complète : les images tournées d’un quart de tour ou de tout autre angle, les images en miroir et chaque image sur une page avec
/Rotatene sont plus dessinées droites et sans miroir dans leur rectangle englobant - Les masques d’images (
/ImageMask true) sont désormais peints comme des pochoirs dans la couleur de remplissage courante, avec des bords lissés par anticrénelage quand ils sont réduits, au lieu d’être dessinés comme une image en gris - Les masques d’images avec
/Decode [1 0]peignent désormais les échantillons de valeur 1, comme le spécifie PDF - Les masques d’images en ligne (
BI /IM true) sont de nouveau dessinés, et leur tableau/Dest honoré - Les images à soft mask gardent leur masque quand elles sont tournées ou mises en miroir
Version 2.766.31
Added
- L’export SVG convertit désormais les couleurs posées avec
k/K(DeviceCMYK) et aveccs/sc/scndans n’importe quel espace de couleur nommé : les couleurs ICCBased, calibrées, Lab, Indexed, Separation et DeviceN sortent comme le moteur de rendu de page les montre au lieu de sortir en noir - Sélectionner un espace de couleur avec
cs/CSpose désormais sa couleur initiale, par exemple la teinte pleine pour une couleur spot, et la restauration de l’état graphique avecQramène une couleur posée de cette façon - Les espaces de couleur qui réfèrent à des profils ICC, des tables de correspondance ou des fonctions de teinte par référence sont résolus à travers le document exporté pendant l’export SVG
- L’énumération de chemins rapporte désormais les couleurs de remplissage et de trait CMYK au lieu de garder la couleur précédente
Version 2.766.30
Fixed
- THPDFEmfPatcher.RenderEmfDirect dessine les bitmaps d’un métafichier enhanced à la même taille et à la même position quelle que soit la Resolution. Avec une Resolution autre que 72, ils sortaient à l’échelle 72 / Resolution
Version 2.766.29
Added
- L’export SVG applique désormais les chemins de clipping
WetW*: chacun devient un clip path SVG qui borne ce qui est dessiné après lui jusqu’à la restauration de l’état graphique, si bien que les images, dégradés et chemins qu’un PDF rogne ne sont plus dessinés en entier - Les Form XObjects sont clippés à leur
/BBoxdans l’export SVG, et les dégradés axiaux et radiaux à leur/BBox - Le clipping even-odd (
W*) garde sa règle de remplissage, et un chemin peint en même temps queWest dessiné avant que le nouveau clip ne prenne effet, comme le spécifie PDF
Version 2.766.28
Fixed
- Les graphiques dessinés avec DrawChart gardent leur mise en page quelle que soit la Resolution. Leurs marges, titres, étiquettes d’axes et largeurs de ligne sont des valeurs en points et rétrécissaient avec la Resolution
- La police par défaut d’une nouvelle page, comme celle d’une page redevenue courante, vaut 12 points quelle que soit la Resolution au lieu de 12 unités de dessin
- La superposition de diagnostic de mise en page garde sa largeur de ligne et la taille de ses étiquettes quelle que soit la Resolution
Version 2.766.27
Fixed
- DrawInlineImage et DrawFormXObject dimensionnent l’image ou le formulaire en unités de dessin, à l’image de sa position. Avec une Resolution autre que 72, largeur et hauteur étaient prises pour des points, si bien que l’objet sortait trop grand
Version 2.766.26
Fixed
- Une page qui redevient courante via CurrentPageNumber continue de dessiner dans les unités dans lesquelles elle a été mise en page. Avec une Resolution autre que 72, elle basculait en points, si bien que tout ce qui était dessiné ensuite sortait à la mauvaise taille et à la mauvaise position
- La page garde aussi sa propre Resolution de page quand on y revient
Version 2.766.25
Fixed
- Les images placées avec ShowImage gardent leur taille sur une page dimensionnée via Width et Height quand la Resolution du document n’est pas 72. À une Resolution de 144, elles sortaient à la moitié de leur taille et décalées
- ExtTextOut place chaque caractère aux avances données sur une telle page au lieu d’en ignorer la moitié
- Les séries de glyphes embarqués gardent leurs offsets et avances de glyphes sur une telle page
Version 2.766.24
Added
- L’export SVG honore désormais l’entrée
/Extenddes dégradés axiaux et radiaux : une extrémité non étendue, ce qui est le cas par défaut, reste non peinte comme en PDF au lieu d’étaler sa couleur de fin sur tout le clip - Pour les dégradés radiaux, cela laisse aussi l’intérieur du cercle de départ vide tant que le départ n’est pas étendu
Version 2.766.23
Fixed
- L’aplatissement de la rotation de page entraîne désormais les flux d’apparence des annotations avec la page, si bien que les annotations incrustées ou aplaties ressemblent à ce qu’elles étaient sur la page tournée au lieu d’être écrasées latéralement dans leur rectangle tourné
- La rotation des widgets (
/MK /R) est ajustée de la rotation de la page, si bien que les apparences de champs de formulaire régénérées après aplatissement gardent leur orientation - Les annotations avec le flag NoRotate restent droites et gardent leur taille après aplatissement, ancrées à leur coin supérieur gauche comme les viewers les montrent sur une page tournée
Version 2.766.22
Fixed
- L’aplatissement de la rotation de page sur un PDF balisé ne fait plus tourner deux fois le rectangle d’une annotation quand l’arbre de structure est atteint avant l’arbre des pages
- L’aplatissement de la rotation de page ne fait plus tourner le rectangle englobant des Form XObjects utilisés sur la page ; leur géométrie vit dans l’espace du formulaire et la rotation de page s’applique déjà à eux via la transformation de contenu
- Les rectangles englobants de mise en page des éléments de structure appartenant à une autre page ne sont plus modifiés quand une page est aplatie
Version 2.766.21
Fixed
- La lecture de la bleed box, de la trim box ou de l’art box d’une page chargée ne capte plus un
/BleedBox,/TrimBoxou/ArtBoxposé sur un nœud/Pagesparent ; ces boîtes ne sont pas héritables en PDF, si bien qu’une page sans sa propre entrée rapporte désormais sa crop box comme l’exige la spécification - L’aplatissement de la rotation de page ne copie plus une telle bleed, trim ou art box de niveau parent sur la page
Version 2.766.20
Fixed
- Le texte dessiné sur le Canvas de la page ou dans un métafichier placé avec ShowMetafile garde sa taille quand la Resolution du document n’est pas 72. À une Resolution de 144, il sortait à la moitié de sa taille alors que le reste du dessin était correct
- Le Canvas de page et ShowMetafile dessinent à la bonne taille sur une page dimensionnée via Width et Height, laquelle dessine en points. À une Resolution de 144, le dessin sortait deux fois trop grand
- Le Canvas de page et ShowMetafile honorent aussi une Resolution de page posée sur la page elle-même au lieu de réduire le dessin d’autant
Version 2.766.19
Fixed
- Les boîtes de texte Unicode justifiées s’arrêtent désormais au bord de la boîte quand l’espacement des caractères est réglé. Chaque caractère recevait l’espacement en plus de sa position justifiée, si bien que chaque ligne dépassait le bord droit de l’espacement multiplié par le nombre de caractères
- Les boîtes de texte Unicode justifiées avec mise à l’échelle horizontale remplissent à nouveau toute la largeur de la boîte au lieu de s’arrêter avant du facteur d’échelle
- L’espacement des mots compte désormais dans la largeur naturelle d’une ligne justifiée, la même largeur que celle où la ligne a été coupée
- Le texte dessiné avec une avance explicite pour chaque caractère atterrit à ces positions quel que soit l’espacement des caractères ou la mise à l’échelle horizontale en vigueur
Version 2.766.18
Fixed
- L’aplatissement de la rotation de page tourne désormais les pages en
/Rotate 90et/Rotate 270dans le sens horaire, si bien que la page aplatie ressemble exactement à l’originale tournée au lieu d’être retournée par rapport à elle - Annotations, destinations de liens et géométrie de structure se déplacent avec la page de la même façon
- Aplatir une page sans CropBox n’ajoute plus une crop box qui réduisait la page à un carré ; seules les boîtes de page qu’une page possède réellement sont tournées
Version 2.766.17
Fixed
- Les chaînes de fallback de polices trouvent désormais des faces comme SimSun et Microsoft YaHei sur les systèmes Windows qui les rapportent sous un nom localisé, si bien que le texte CJK mélangé dans
WideTextOutBox,WideTextOutBoxExetTextOutWithFallbackest dessiné dans la face de repli au lieu d’afficher des cadres vides - Le texte dont la police propre est l’une de ces faces n’est plus découpé en segments de repli ni signalé comme non résolu par les diagnostics de glyphes non résolus
- Une face peut figurer dans une chaîne sous n’importe quel nom de famille qu’elle porte, dans n’importe quelle langue ; une face que Windows ne sait remplacer que par une autre police reste sautée
Version 2.766.16
Fixed
- La composition N-up place désormais les pages en
/Rotate 90et/Rotate 270tournées dans le sens horaire dans leurs cellules ; auparavant, elles étaient tournées dans l’autre sens et poussées hors de la cellule, souvent hors de la feuille - Les pages en
/Rotate 180sont désormais tournées sur la feuille au lieu d’être composées droites - La composition N-up honore désormais les boîtes de page et le
/Rotatehérités de l’arbre des pages, si bien que de telles pages ne sont plus sautées ni composées sans rotation - Les pages blanches insérées dans un document chargé, y compris les feuilles N-up composées, ne sont plus tournées ni rognées par un
/Rotateou une/CropBoxhérités de l’arbre des pages
Version 2.766.15
Fixed
HPDFTokenizeContentStreamAppendpeut désormais réutiliser un tableau de tokens après remise à zéro de son compteur : les tokens restés de la passe précédente sont d’abord libérés, si bien que leurs chaînes ne fuient plus et que leurs éléments de tableau ou données d’image en ligne n’apparaissent plus dans les nouveaux tokens- Ajouter beaucoup de petits flux de contenu à un même tableau de tokens fait désormais croître le tableau d’au moins le double au lieu de le réallouer et de le déplacer à chaque ajout, ce qui gardait lentes à compiler les pages construites à partir de milliers de petits flux
Version 2.766.14
Fixed
- Les pages en
/Rotate 90ou/Rotate 270sont désormais rendues tournées dans le sens horaire, comme le définit la spécification PDF, au lieu d’être reflétées en diagonale ; auparavant, le coin supérieur gauche d’une page à 90 degrés se retrouvait en bas à droite - La correction couvre le rendu de pages et de régions, l’export bitmap, métafichier et PNG ou TIFF par bandes, et le backend de rendu SIMD
- Les conversions de coordonnées page-vers-vue et vue-vers-page du viewer, ainsi que ses superpositions de recherche et de surlignage, suivent la même rotation horaire, si bien que les résultats et le hit-testing s’alignent avec la page rendue
Version 2.766.13
Fixed
- L’export SVG de pages écrit désormais le texte en UTF-8, comme le document le déclare, si bien que les caractères accentués et CJK survivent au lieu de devenir des points d’interrogation ou des octets qui rendent le fichier illisible ; les codes de contrôle qu’XML n’autorise pas deviennent U+FFFD
- Le texte après la première série d’une ligne, et le texte après un ajustement de crénage
TJ, est désormais placé correctement quand la matrice de texte met le texte à l’échelle ou le tourne, ce qui est la façon dont beaucoup de producteurs PDF fixent la taille de police - L’élévation du texte et la mise à l’échelle horizontale suivent désormais une matrice de texte mise à l’échelle ou tournée, et les ajustements
TJrespectent la mise à l’échelle horizontale - Le texte dessiné avec les modes de rendu 4 à 6 (peinture et clip) est exporté au lieu d’être abandonné, le texte invisible déplace toujours la position du texte, et le texte avec contour garde son opacité de trait
- L’espacement des mots n’est plus appliqué aux codes de deux octets qui tombent par hasard à 32, et les séries d’espaces sont conservées pour que chaque caractère reste à sa position
- Les glyphes de ligature exportent tous les caractères qu’ils représentent, et les polices mêlant codes d’un et de deux octets sont lues code par code
- Les pages dont la
/MediaBoxne commence pas à l’origine atterrissent désormais sur le canevas SVG au lieu d’être décalées hors de lui
Version 2.766.12
Fixed
- Le dessin sur
THPDFPage.Canvas, et les métafichiers rejoués en graphiques vectoriels avecShowMetafileà une position et une échelle données, ne perdent plus une partie de leurs bords gauche et haut quand ils posent une région de clip. Chaque région de clip était décalée d’une unité vers l’intérieur sur ces deux côtés, si bien qu’une bordure ou un remplissage le long du bord gauche ou haut sortait plus fin que le même à droite ou en bas - Les régions de clip s’alignent désormais avec les mêmes régions quand elles sont remplies, et couvrent la même zone quelle que soit la
THotPDF.Resolution
Version 2.766.11
Fixed
- Les soulignements et textes barrés du texte Unicode dessiné avec
TextOut,UnicodeTextOut,RtLTextOutetExtTextOutcouvrent désormais exactement le texte. Ils étaient mesurés sur le texte converti dans la page de codes du système, si bien que les segments avec cyrillique, hébreu, grec, CJK ou d’autres lettres hors de cette page de codes recevaient des traits qui s’arrêtaient avant le texte ou le dépassaient - Les traits suivent aussi l’espacement des caractères, l’espacement des mots, la mise à l’échelle horizontale et les déplacements passés à
ExtTextOut
Version 2.766.10
Fixed
- Les add-ons d’export de rapports et de grilles (FastReport, QuickReport, ReportBuilder, DevExpress et DBGrid) n’écrasent plus la sortie les uns des autres quand plusieurs exports tournent en même temps, par exemple sur un serveur. Leur fichier temporaire était nommé d’après un timer qui ne change que tous les 10 à 16 ms, si bien que des exports démarrés ensemble écrivaient le même fichier
Version 2.766.9
Fixed
TextWidthmesure désormais le texte comme il est dessiné quand l’espacement des caractères, l’espacement des mots ou la mise à l’échelle horizontale sont réglés. L’espacement n’était pas multiplié par la mise à l’échelle horizontale, un espacement de mots négatif était ignoré et une espace finale ne recevait pas d’espacement de mots, si bien que les continuations de paragraphe, les rectangles de liens et le texte centré ou aligné à droite étaient placés à côté du texte dessinéTextWidthetGetWideTextWidthrenvoient la même largeur pour le même texte
Version 2.766.8
Fixed
- Le device ReportBuilder (
TppHotPDFDevice) dessine désormais le texte natif à l’intérieur de sa boîte de texte. Le texte était positionné comme si sa position était la ligne de base, si bien que chaque objet texte commençait sa ligne trop bas et que sa dernière ligne sortait de la boîte - Le texte natif centré et aligné à droite est mesuré avec les largeurs Unicode avec lesquelles il est dessiné, si bien que le texte avec des lettres hors de la page de codes du système, comme du chinois sur un système occidental, s’aligne correctement
Version 2.766.7
Fixed
- L’export FastReport place désormais le texte des memos à l’intérieur de son memo. Le texte était positionné comme si sa position était la ligne de base, si bien que le texte de chaque memo commençait une hauteur de police trop bas, et le texte aligné en bas était dessiné sous le memo, où le clipping le cachait
- Les alignements verticaux haut, centre et bas se mesurent tous depuis le haut de la première ligne, pour les memos simples et à balises HTML
Version 2.766.6
Fixed
- Le filtre d’export FastReport (
TfrxHotPDFExport) compile à nouveau. La propriétéNotEmbeddedFontslisait un champ d’un autre type, et l’export natif d’images utilisait une propriétéClippedqueTfrxPictureViewn’a pas - L’export natif d’images rogne désormais chaque image à sa vue, comme FastReport le fait, si bien qu’une image plus grande que sa vue ne déborde plus sur les objets voisins
- Une image centrée garde son cadre et son clip sur les bornes de la vue ; seule l’image elle-même est centrée. Le cadre se déplaçait auparavant avec l’image
Version 2.766.5
Fixed
- L’add-on DBGrid mesure désormais le texte des cellules avec les largeurs de texte Unicode avec lesquelles il est dessiné avant de le couper pour tenir dans une colonne. Le texte avec des lettres hors de la page de codes du système, comme du chinois sur un système occidental, était mesuré en points d’interrogation et dépassait la cellule ; le texte double octet sur les systèmes chinois, japonais ou coréens était coupé bien avant que la cellule soit pleine
- Une coupe ne laisse jamais la moitié d’une paire de substitution avant le
...
Version 2.766.4
Fixed
- L’add-on DBGrid (
TDBGridHotPDFExportetDBGridHotPDFExportToFile/ToStream) dessine désormais le texte des cellules à l’intérieur de ses cellules. Le texte était placé comme si sa position était la ligne de base, si bien que le texte de chaque rangée se posait sur la bordure basse de la cellule et était coupé par la ligne de grille de la rangée suivante - Le texte d’en-tête est centré dans la rangée d’en-tête, et le titre ne touche plus le haut du tableau
Version 2.766.3
Fixed
GetLoadedPDFVersionStringrenvoie désormais%PDF-1.7et analogues sur les systèmes dont la locale écrit une virgule décimale ; il y renvoyait%PDF-1,7- Le champ
pdfVersiondeGetLoadedDocumentReportest corrigé de la même façon
Version 2.766.2
Fixed
- L’import HTML (
RenderHTMLetRenderHTML5) produit la même page à n’importe quelleTHotPDF.Resolution. Les longueurs CSS et lesMargin,BaseFontSize,ListIndentetBlockSpacingde l’importateur sont des points, mais avec une Resolution de 144 le texte, les marges, les listes et les tableaux sortaient à la moitié de leur taille - Le texte et les graphiques que vous dessinez avant et après l’import utilisent toujours 1/Resolution de pouce
- Les documents construits à la Resolution par défaut de 72 sortent exactement comme avant
Version 2.766.1
Fixed
- Les formulaires XFA aplatis avec
ApplyXFAAsAcroFormouFlattenLoadedXFAgardent les positions, tailles et tailles de police du gabarit à n’importe quelleTHotPDF.Resolution. Avec une Resolution de 144, tout le formulaire sortait à la moitié de sa taille dans le coin supérieur gauche de la page - Le texte et les graphiques que vous dessinez avant et après l’aplatissement utilisent toujours 1/Resolution de pouce
- Les documents construits à la Resolution par défaut de 72 sortent exactement comme avant
Version 2.766.0
Added
THPDFPage.UserWidthetTHPDFPage.UserHeightrenvoient la taille de page dans les unités avec lesquelles vous dessinez, 1/Resolutionde pouce, si bien que le code de mise en page peut la comparer aux coordonnées, marges etTextWidthà n’importe quelleTHotPDF.Resolution.WidthetHeightrenvoient toujours des points, et le code existant lit les mêmes valeurs qu’avant
Fixed
- Avec
THotPDF.Resolutionréglée à une valeur autre que 72, les paragraphes passent désormais à la ligne à l’espace réel entre leurs marges et passent à la page suivante à la marge basse. Ils mesuraient la page en points, si bien qu’à 144 un paragraphe aux marges larges pouvait couper après chaque caractère et s’étaler sur beaucoup trop de pages - Un paragraphe qui continue sur une nouvelle page garde la même taille de page, les mêmes coordonnées et la même taille de police à toute Resolution. À 144, la page de continuation basculait en coordonnées points et son texte sortait à la moitié de sa taille
THPDFTablene commence une nouvelle page que quand une rangée atteint la marge basse ; à 144, un tableau placé dans la moitié basse de la page mettait chaque rangée sur une page à part- L’import HTML répartit le texte sur toute la largeur de la page à toute Resolution au lieu de la moitié gauche
- Les métafichiers dessinés centrés sur la page, et les régions de clip de métafichiers couvrant toute la page, utilisent la page entière à toute Resolution
- Les diagnostics de mise en page des couches de page et des pages vidées rapportent la taille de page en unités de dessin
- Les documents construits à la Resolution par défaut de 72 sortent exactement comme avant
Version 2.765.52
Fixed
- Les mots de passe AES-256 avec lettres non ASCII fonctionnent désormais dans d’autres lecteurs PDF. HotPDF hachait le mot de passe dans la page de codes du système, alors que l’ISO 32000-2 le définit en UTF-8, si bien que d’autres lecteurs rejetaient un mot de passe chinois ou accentué ; les révisions 5 et 6 sont toutes deux corrigées
- Les mots de passe AES-256 de plus de 127 octets sont désormais coupés à 127 octets comme le définit la norme, si bien que les lecteurs qui la suivent les acceptent
- HotPDF ouvre désormais les fichiers AES-256 d’autres producteurs dont le mot de passe contient des lettres non ASCII
- Les fichiers que des versions antérieures ont chiffrés avec de tels mots de passe s’ouvrent toujours dans HotPDF avec le même mot de passe
Version 2.765.51
Fixed
- Le texte ANSI écrit après du texte Unicode dans la même police n’apparaît plus en cadres vides. Quand une page dessinait du texte Unicode avec
TextOutpuis utilisaitTextBoxouTextOutBoxExdans la même face (par exemple Arial à une autre taille), le texte ANSI était écrit dans la police Unicode et les viewers ne retrouvaient pas ses glyphes ; il reçoit désormais sa propre ressource de police et s’affiche et s’extrait correctement - Les pages qui n’utilisent que du texte ANSI ou que du texte Unicode produisent la même sortie qu’avant
Version 2.765.50
Fixed
- Les documents chiffrés en AES-256 révision 6 (
UseAES256R6, et AES-256 PDF 2.0) s’ouvrent désormais dans d’autres lecteurs PDF. Le hash du mot de passe était calculé avec le sel à chaque round et sans l’entrée utilisateur côté owner, si bien que qpdf, MuPDF et d’autres lecteurs rejetaient les deux mots de passe ; HotPDF n’acceptait que ses propres fichiers - HotPDF ouvre désormais les fichiers révision 6 créés par d’autres producteurs avec leur mot de passe utilisateur ou owner au lieu de signaler un mot de passe incorrect
- L’exemple AES-256 R6 de la démo Security s’ouvre dans d’autres lecteurs
Version 2.765.49
Fixed
- Les boîtes de texte Unicode justifiées n’écartent plus leurs lettres et ne dépassent plus le bord droit de la boîte. Avec une police choisie par nom, comme Arial, chaque ligne justifiée sortait environ deux fois plus large que la boîte et chevauchait ce qui se trouvait à côté ; chaque ligne justifiée s’arrête désormais au bord de la boîte
- Le texte dessiné avec une avance explicite pour chaque caractère atterrit désormais là où il était demandé dans le même cas de figure, au lieu que chaque caractère soit poussé d’une largeur de caractère supplémentaire vers la droite
Version 2.765.48
Changed
- Les démos HelloWorld, CJKAnnotations, TextOut et RtLTextOut pour Delphi et C++Builder n’embarquent plus que les glyphes qu’elles utilisent. Elles embarquaient des polices système entières comme Arial Unicode MS, si bien qu’un hello world d’une page sortait à environ 15 Mo et l’exemple de droite à gauche à environ 30 Mo ; les mêmes pages font désormais entre 80 Ko et 650 Ko et sont visuellement identiques
Version 2.765.47
Fixed
- Le texte de droite à gauche ne sort plus avec des lettres dans le mauvais ordre dans certaines polices. L’hébreu en Arial Unicode MS voyait des lettres voisines échangées dans beaucoup de mots, et l’arabe en Microsoft Sans Serif n’était pas inversé du tout, car les numéros de glyphes de ces polices étaient pris pour des marques d’accent au moment de mettre la ligne en ordre visuel
- Les lignes hébraïques de la démo RtLTextOut se lisent désormais correctement
Version 2.765.46
Fixed
GetWideTextWidthinclut désormais l’espacement des caractères et l’espacement des mots avec lesquels le texte est dessiné, commeTextWidthle fait. Le texte Unicode avec retour à la ligne et centré, avec espacement réglé, était mesuré trop étroitTextOutHTMLmontre désormais l’espacement des mots réglé avecSetWordSpacing: il place chaque segment à sa largeur mesurée, ce qui laissait l’espacement de côté. Lesword-spacingetletter-spacingCSS de l’import HTML passent par la même mise en page
Version 2.765.45
Fixed
SetWordSpacingfonctionne désormais avec les polices embarquées. Le texte dans une police embarquée est écrit avec des codes de caractères de deux octets, et PDF n’applique l’espacement des mots qu’au code espace d’un octet, si bien que l’espacement était ignoré en silence dès queFontEmbeddingétait actif ou que le texte demandait une police Unicode- L’espacement est ajouté après chaque espace comme un ajustement de positionnement de texte, que tout viewer PDF honore ; le texte sans espacement de mots est écrit exactement comme avant
- La rangée d’espacement des mots de la démo TextOut montre désormais l’espace supplémentaire
Version 2.765.44
Fixed
- Les démos AnnotationInteraction pour Delphi et C++Builder font désormais tenir chaque libellé de lien dans son rectangle de lien. Le texte commençait trop bas, si bien que la bordure du rectangle le traversait, et il était plus large que le rectangle
Version 2.765.43
Fixed
- Le texte barré (
fsStrikeOut) est désormais barré au milieu des lettres minuscules. La ligne était dessinée une demi-ligne sous la ligne de base, sous le soulignement, si bien que le texte barré semblait doublement souligné ; cela touchait aussi<s>dansTextOutHTML - Le texte tourné reçoit désormais son soulignement sous la ligne de base au lieu de le long du haut des lettres, et son barré à travers les lettres
- Les lignes de barré sont aussi épaisses que les soulignements sur chaque chemin de texte ; les chemins Unicode et latin simple dessinaient une ligne bien plus fine
Version 2.765.42
Fixed
- La démo HTMLText produit désormais une seule page portant les cinq exemples. Elle ajoutait une deuxième page après celle avec laquelle le document commence déjà, laissant la première page vide, et commençait à écrire près du bas de la page, si bien que l’exemple d’entités et le paragraphe avec retour à la ligne tombaient hors de la page
Version 2.765.41
Fixed
- Les démos Layer pour Delphi et C++Builder montrent désormais le texte de leurs calques. Le texte du calque visible était dessiné dans la couleur du rectangle derrière lui et restait invisible, et le texte du calque caché était presque blanc
- Le libellé des démos Patterns est dessiné en noir au lieu d’être rempli avec le motif de tuilage, qui le brisait en fragments de motif
- Le libellé des démos AlphaTransparency n’est plus dessiné en vert semi-transparent avec le mode de fusion Multiply ; les formes transparentes gardent désormais leur transparence pour elles seules
Version 2.765.40
Fixed
- Les démos GraphicDraw pour Delphi et C++Builder dessinent désormais correctement les tangentes de leurs exemples de courbes. La ligne du premier point de contrôle de la courbe de gauche s’arrêtait avant le point étiqueté, et la courbe de droite montrait un court trait horizontal au lieu des lignes allant de son point de départ par son point de contrôle jusqu’à son point final
- Les titres de sections des pages rectangle et ellipse sont de nouveau noirs au lieu de prendre la couleur de la dernière forme dessinée
Version 2.765.39
Fixed
- Le texte et les formes dessinés après
PrintHyperlinkgardent les couleurs posées avant lui. Un gris revenait en une autre couleur (le blanc virait au bleu), et les couleurs posées en CMYK ou via un espace de couleur revenaient en une couleur RGB plus ancienne - La couleur de l’hyperlien ne s’applique désormais qu’au texte du lien, quel que soit l’espace de couleur utilisé par la page
Version 2.765.38
Fixed
TextOutOutlinedessine désormais les contours de glyphes à la taille de police à touteResolution. Avec uneResolutionautre que 72, les contours étaient une nouvelle fois réduits, par exemple à la moitié de leur taille à 144- Les contours des polices de moins de 1000 unités par em, comme SimHei, ne sont plus dessinés plusieurs fois trop grands
Version 2.765.37
Fixed
- Les démos CJKUnicode pour Delphi et C++Builder affichent désormais leur ligne coréenne sur les systèmes sans Arial Unicode MS. Elles la dessinaient avec la première police chinoise trouvée, qui n’a pas de Hangul, si bien que la ligne restait vide ; elle utilise désormais Malgun Gothic quand la police choisie ne peut pas montrer le coréen
Version 2.765.36
Fixed
- Le texte chinois et japonais écrit avec des polices comme SimHei n’empile plus ses caractères les uns sur les autres. Quand la même police servait à une deuxième série de texte, beaucoup d’idéogrammes recevaient des largeurs de quelques unités au lieu d’un em complet
- Les polices touchées stockent moins de largeurs d’avance que de glyphes ; les glyphes après la dernière largeur stockée utilisent désormais cette largeur, comme le format TrueType l’exige
Version 2.765.35
Fixed
- Le texte Unicode dans les polices dont la grille de conception a moins de 1000 unités par em, comme SimHei et SimSun avec 256, est désormais espacé correctement. Les largeurs de glyphes écrites dans le PDF étaient environ quatre fois trop grandes, si bien que les viewers laissaient de larges blancs après les espaces et les autres caractères nouvellement utilisés
Version 2.765.34
Fixed
- Le scénario d’image scannée de la démo PDFOptimize compresse désormais une vraie page de texte. Son image de test 1 bit sortait entièrement noire, si bien que CCITT G4 et JBIG2 étaient comparés sur un rectangle plein
- Les scénarios d’images de la démo PDFOptimize n’embarquent plus que les glyphes de leur étiquette de page, si bien que les tailles rapportées montrent la différence entre les méthodes de compression d’images au lieu d’être dominées par une police entière embarquée
Version 2.765.33
Fixed
- La démo E-Invoice met désormais en page la facture visible à partir du haut : le titre est en haut de la page et la facture, les parties et les montants suivent en dessous. La page était dessinée à l’envers dans l’ordre, avec le titre près du bord bas et la note de pied de page en haut
Version 2.765.32
Fixed
- Les images JBIG2 encodées strictement sans perte (
LosslessavecLossyLevel = 0) gardent désormais chaque pixel. La suppression par défaut des petits points noirs considérés comme bruit de scan ignorait ces réglages, si bien que les points finaux et les points des i et j dans le petit texte disparaissaient d’images censées être sans perte - Les valeurs par défaut orientées scan (
LossyLevel = 5avecRemoveIsolatedBlackPixels) suppriment toujours les poussières comme avant
Version 2.765.31
Fixed
- L’export de pages chargées vers PNG ou TIFF n’échoue plus avec « received too many rows » aux résolutions où une bande de rendu ne fait pas un nombre entier de points, comme les 150 DPI par défaut de
SaveLoadedPagesAsImagesavec une page Letter. L’arrondi rendait chaque bande d’une rangée de pixels plus haute que prévu, si bien que les bandes totalisaient plus de rangées que l’image
Version 2.765.30
Fixed
TextWidth,TextHeight,GetWideTextWidthetGetWideCharAdvancesrépondent désormais dans les unités de page de laResolution, les unités où le texte est dessiné. Avec uneResolutionautre que 72, ils répondaient en points, si bien que le texte mesuré ne tenait pas dans les coordonnées où il était placé- Avec une
Resolutionautre que 72, le texte dessiné avecTextOutcommence désormais à son Y au lieu de trop haut, et les soulignements et textes barrés couvrent tout le texte à la bonne distance et à la bonne épaisseur au lieu d’une fraction - À toute
Resolution,TextBox,TextOutBoxExetWideTextOutBoxExcentrent et alignent à droite leurs lignes sur la largeur de texte réelle, les cellules de tableaux et les paragraphes coupent le texte sur elle, et les segments stylés deTextOutHTMLne se chevauchent plus - Un segment de fallback de police dans
WideTextOutBoxExgarde la taille de police à touteResolutionau lieu de rétrécir - La sortie à
Resolution72 est inchangée
Version 2.765.29
Fixed
- Quand Windows ne peut pas appliquer lui-même la world transform d’un métafichier EMF, HotPDF combine les transformations lui-même. Le décalage vertical d’une transformation combinée utilisait le mauvais terme, si bien que le contenu de tels métafichiers pouvait être décalé vers le haut ou vers le bas
Version 2.765.28
Fixed
- Afficher un métafichier EMF n’imprime plus de lignes de diagnostic comme
[WMF_DEBUG] EMR_POLYGON16 record foundsur la sortie standard des applications console. La trace des métafichiers était restée activée dans la build release
Version 2.765.27
Fixed
- Le texte des métafichiers EMF affichés avec
ShowMetafilese pose désormais à la hauteur où Windows le dessine. Le texte aligné en haut, le comportement par défaut deTCanvas.TextOut, était dessiné une hauteur de ligne trop haut, et le texte aligné en bas était lui aussi trop haut - Le texte de métafichier aligné sur la ligne de base et le texte tourné restent inchangés
Version 2.765.26
Fixed
ShowMetafileavec position et échelle dessine désormais le métafichier avec son coin supérieur gauche au point donné et à l’échelle demandée. Il ignorait ces arguments et dessinait toujours le métafichier au coin supérieur gauche de la page à sa taille naturelleShowMetafilesans position reste inchangé
Version 2.765.25
Fixed
- Les dessins
AngleArcdans les métafichiers EMF affichés avecShowMetafiledessinent désormais l’arc qu’ils décrivent, dans un sens comme dans l’autre, suivis des lignes qui continuent depuis la fin de l’arc. Un cercle complet était dessiné à la place, et sa taille était fausse dès que le métafichier avait un décalage
Version 2.765.24
Fixed
- Sous PDF/A et PDF/X, les annotations de texte libre au contenu ASCII simple montrent désormais leur texte. Leur apparence ne dessinait que le cadre et le remplissage, car l’Helvetica nommée dans l’apparence par défaut de l’annotation ne peut pas y être utilisée non embarquée
- Le texte est dessiné à 12 pt dans la police courante de la page, qui est embarquée avec le texte de la page, coupé à la boîte de l’annotation et aligné selon la justification choisie, comme déjà fait pour les contenus non ASCII
- Hors PDF/A et PDF/X, les annotations de texte libre au contenu uniquement ASCII sont écrites exactement comme avant
Version 2.765.23
Fixed
- Avec
AutoShapeArabicactivé,TextOutetUnicodeTextOutjoignent désormais les lettres arabes, persanes et ourdoues dans leurs formes initiale, médiane et finale et leurs ligatures, commeRtLTextOutle faisait déjà. Chaque lettre était montrée dans sa forme isolée - Il en va de même pour
AutoShapeSyriac,AutoShapeNko,AutoShapeAdlam,AutoShapeHanifiRohingyaet le réordonnancement des points hébraïques (sfHebrewReorderdansShapingFeatures) - Avec ces options actives, du texte dont les numéros de glyphes tombaient par hasard dans les plages de caractères arabes ou hébraïques pouvait être montré avec les mauvais glyphes ; cela n’arrive plus
- Les annotations de texte libre dessinées dans la police de page sont façonnées de la même façon que le texte de page
- La sortie avec ces options désactivées reste inchangée
Version 2.765.22
Fixed
- Les formes courbes honorent désormais les valeurs de
Resolutionautres que 72.Ellipse,Circle,Arc,DrawArc,Pie,DrawPie,ChordetArcToétaient dessinés au mauvais endroit et à la mauvaise taille, tandis que lignes droites, rectangles et rectangles arrondis étaient corrects - La sortie à la résolution par défaut de 72 est inchangée
Version 2.765.21
Fixed
- Les secteurs de camembert dessinés avec
PieouDrawPiesont désormais des formes fermées uniques, si bien que leur contour reçoit de vrais angles là où les bords droits rejoignent l’arc au lieu de deux bouts de ligne libres - Les segments de cercle (chords) dans les métafichiers EMF affichés avec
ShowMetafilese ferment désormais le long de la ligne droite joignant les extrémités de leur arc. La ligne allait auparavant vers un point bien loin de la forme
Version 2.765.20
Fixed
DrawArcetDrawPiedessinent désormais la partie de l’ellipse que leur documentation décrit : dans le sens antihoraire du point de départ au point final, comme les appels GDI WindowsArcetPie. Ils dessinaient l’autre partie, si bien qu’un quart d’arc sortait en trois quarts- Les parts de camembert, segments et arcs
ArcTodans les métafichiers EMF affichés avecShowMetafilecorrespondent désormais à l’image que Windows dessine, dans les deux sens d’arc. Ils montraient la partie opposée de l’ellipse ; les arcs simples étaient déjà corrects - Les méthodes
Arc,Pie,ChordetArcToà base d’angles restent inchangées
Version 2.765.19
Fixed
- Les rectangles tournés dessinés avec
RectangleRotatesont désormais des formes fermées, comme ceux dessinés avecRectangle. Le tracé du contour omettait le quatrième côté, si bien qu’un rectangle tourné au contour seul ne montrait que trois bords - Les rectangles tournés remplis, ainsi que les traits de soulignement et de barré du texte tourné, restent identiques
Version 2.765.18
Fixed
- Les nombres négatifs écrits dans les PDF générés sont désormais arrondis correctement. Des valeurs comme -50 s’écrivaient -49.99, si bien que coordonnées, décalages et positions négatifs dans le contenu de page, les rectangles d’annotations et entrées similaires pouvaient être faux de jusqu’à 0.01 unité
- Les valeurs négatives sont désormais arrondies au demi en s’éloignant de zéro, en miroir exact des valeurs positives ; une valeur négative qui s’arrondit à zéro s’écrit 0
- La sortie pour zéro et les nombres positifs est inchangée
Version 2.765.17
Fixed
- Les annotations de texte libre au contenu chinois, japonais, coréen, arabe, cyrillique ou autre non ASCII montrent désormais leur texte dans tous les viewers. Elles comptaient sur le viewer pour dessiner le texte en Helvetica, qui ne peut représenter que les caractères occidentaux, si bien que des viewers comme Poppler ne montraient que la ponctuation ASCII
- Ces annotations portent désormais leur propre apparence (ISO 32000-1 12.5.5) : le texte est dessiné dans la police courante de la page, embarquée et mise en sous-ensemble avec le texte de la page, coupé à la boîte de l’annotation (entre les mots, ou entre les caractères pour le texte sans espaces), aligné selon la justification choisie et posé par-dessus le même cadre et remplissage qu’avant
- L’apparence est aussi écrite sous PDF/A, où la police embarquée garde le document conforme et où le texte de l’annotation est désormais visible au lieu d’une boîte vide
- Les annotations de texte libre au contenu uniquement ASCII sont écrites exactement comme avant
Version 2.765.16
Fixed
- Les pages blanches insérées dans les documents chargés avec
InsertLoadedBlankPageemportent désormais le dictionnaire de ressources qu’exige chaque page (ISO 32000-1 Table 30) ; des validateurs comme qpdf ne signalent plus l’arbre des pages comme endommagé et du contenu peut ensuite être ajouté à la page
Version 2.765.15
Fixed
- Dans la démo
Table, le montant du sous-total s’étend désormais sur les colonnes Qty et Price comme prévu ; il utilisait un index de cellule erroné, ce qui laissait la colonne Qty en cellule vide
Version 2.765.14
Fixed
- Les images dans les cellules de
THPDFTablesont désormais dessinées à l’intérieur de leur cellule et respectent l’alignement vertical ; elles étaient placées une hauteur d’image trop bas, sous la cellule et hors du tableau
Version 2.765.13
Fixed
- Les largeurs de texte Unicode (
GetWideTextWidthet la mesure de justification) correspondent désormais à la police ; pour des polices comme Arial, elles sortaient environ deux fois trop grandes - Les tableaux, le texte avec retour à la ligne automatique et le texte aligné à droite, centré ou justifié, construits sur ces largeurs, se remettent en page correctement : le texte court des cellules ne passe plus à la ligne, les valeurs alignées à droite atteignent le bord de la cellule, et le texte HTML dans les cellules de tableau n’affiche plus de grands écarts entre les mots
Version 2.765.12
Fixed
- Les formulaires avec cases à cocher ou boutons radio listent désormais la police ZapfDingbats (
/ZaDb) dans les ressources par défaut du formulaire. Les viewers qui dessinent ces champs eux-mêmes (le comportement par défaut quandAutoFormAppearancesest désactivé) y retrouvent la police pour dessiner la coche ; auparavant, les viewers basés sur Poppler signalaient une police inconnue et n’affichaient aucun marquage
Version 2.765.11
Fixed
- Dans la démo
CJKAnnotations, la première icône de note de chaque rangée de langue s’aligne désormais sur les autres icônes de la rangée ; elle était placée 5 points plus haut
Version 2.765.10
Fixed
- Les polices demandées par leur nom anglais sont désormais trouvées sur les systèmes Windows dans d’autres langues. Une demande de SimSun, Microsoft YaHei ou MS Gothic sur un Windows chinois, japonais ou coréen était traitée comme une police manquante, car Windows rapporte le nom dans la langue du système, et le texte était silencieusement composé en Arial Unicode MS à la place
Version 2.765.9
Fixed
- Les polices que Windows conserve dans des collections TrueType (.ttc), comme SimSun, Microsoft YaHei et MS Gothic, sont désormais embarquées comme polices autonomes valides. Auparavant, chaque table de la police embarquée pointait vers de mauvaises données, si bien que les viewers la rejetaient et retombaient sur une police système, et sur les machines dépourvues de cette police le texte affichait de mauvais glyphes
- Cela touchait aussi les documents dont la police demandée était absente et que Windows faisait correspondre à une police de collection, par exemple du texte Unicode en Arial Unicode MS sur des systèmes où seul SimSun était disponible
Version 2.765.8
Fixed
- Les fichiers sources contenant du texte non ASCII sont de nouveau enregistrés en UTF-8 avec une marque d’ordre des octets. Sans elle, Delphi lit un fichier source dans la page de codes de la machine qui compile, si bien que sur les systèmes Windows chinois, japonais, coréens et autres non occidentaux, le texte CJK, arabe, hébreu et accentué des démos sortait avec des caractères altérés dans les PDF générés, et les messages d’erreur de la bibliothèque affichaient de mauvais caractères
- Les démos
CJKAnnotations,Annotations,HelloWorld,RtLTextOut,PageSizes,TextOut,ShowcaseetViewerPrefproduisent à nouveau le texte voulu, où qu’elles soient compilées
Version 2.765.7
Fixed
- Les informations de document fournies en UTF-8 (
Title,Author,Subject,Keywords, titres des fils d’articles etSetLoadedDocumentInfoavec la familleSetLoadedTitle) sont désormais stockées en Unicode, si bien que les viewers affichent correctement le texte accentué et CJK et que les informations de document correspondent aux métadonnées XMP - Le texte dans la page de codes du système (par exemple un titre chinois sur un système Windows chinois) est également stocké correctement, car les octets qui ne forment pas de l’UTF-8 valide sont lus dans cette page de codes
Version 2.765.6
Fixed
- La vue initiale des nouveaux documents (
InitialZoom) écrit désormais des destinations ajustées à la largeur et à la hauteur complètes ; l’opérande qu’exige ISO 32000-1 Table 151 était absent, si bien que des viewers comme Poppler signalaient un tableau de destination trop court pour chaque document créé avec le réglage par défaut
Version 2.765.5
Fixed
- Les étiquettes de page qui ne commencent pas à la première page couvrent désormais aussi les pages situées avant la première plage, lesquelles gardent des numéros simples ; l’arbre des étiquettes de page doit inclure la première page (ISO 32000-1 12.4.2), faute de quoi les viewers pouvaient afficher de mauvaises étiquettes
SetLoadedPageLabelconserve désormais les plages dans l’ordre des pages et remplace une plage commençant sur la même page, si bien que les viewers affichent les étiquettes voulues ; auparavant, les nouvelles plages étaient ajoutées dans le désordre et pouvaient se répéterSetLoadedPageLabelne jette plus les étiquettes existantes des documents qui les stockent dans un objet séparé, et il met aussi à jour les arbres d’étiquettes répartis sur plusieurs nœuds- Les préfixes d’étiquettes de page fournis en UTF-8 sont désormais stockés en Unicode
Version 2.765.4
Fixed
- Les descriptions de liens fournies en UTF-8 (
AddURILink,AddGoToLink,AddGoToRLink,AddLaunchLink,AddNamedDestinationLinket les liens à destination de structure) sont désormais écrites en Unicode, si bien que les lecteurs d’écran et les viewers affichent le texte accentué et CJK au lieu de caractères altérés - Il en va de même pour le texte et l’auteur des annotations ajoutées aux documents chargés avec les méthodes
AddLoaded...Annotation, à l’image des annotations créées dans les nouveaux documents
Version 2.765.3
Fixed
AddGoToLinkpeut désormais faire un lien vers une page ajoutée plus tard dans un nouveau document, si bien qu’une table des matières sur la première page peut contenir des liens en avant ; de tels liens étaient auparavant abandonnés sans la moindre erreur- Un lien dont la page cible n’est jamais ajoutée garde sa zone mais perd son action, au lieu de pointer vers une page manquante
Version 2.765.2
Fixed
SetLoadedOutlineOpenouvre et ferme désormais les signets des documents chargés ; auparavant, il écrivait une clé que les viewers ignorent et le signet gardait son étatAddLoadedOutline,SetLoadedOutlineURIetSetLoadedOutlineDestinationagissent désormais sur le signet demandé ; pour tout index supérieur à 0, ils modifiaient le mauvais signet ou ne faisaient rien- L’ajout d’un signet à un document chargé met désormais à jour les compteurs d’éléments visibles de son parent, de ses ancêtres et de l’outline, si bien que les viewers n’affichent plus d’états dépliés ou de totaux d’éléments erronés
- Poser un lien web sur un signet chargé supprime désormais sa destination de page, et poser une destination supprime son action, car un signet ne peut porter que l’un des deux
- Les titres de signets fournis en UTF-8 à
AddLoadedOutlineetSetLoadedOutlineTitlesont désormais stockés en Unicode au lieu d’octets altérés
Version 2.765.1
Fixed
- Les signets des nouveaux documents enregistrent désormais combien d’entrées sont visibles, comme l’exige ISO 32000-1 12.3.3 : auparavant, l’outline et chaque signet ouvert comptaient toutes les entrées imbriquées, y compris celles des signets fermés
- Définir
Openedsur un signet après l’ajout de ses enfants l’ouvre désormais dans le viewer ; auparavant, la modification n’arrivait jamais jusque dans le fichier - Affecter
Titleà un signet existant change désormais le titre affiché dans le document - Les titres de signets avec du texte non ASCII fournis en UTF-8 sont désormais écrits en Unicode, si bien que les titres accentués et CJK s’affichent correctement au lieu de caractères altérés
- Les signets portent désormais la référence parent qu’exige la spécification
Version 2.765.0
Added
HPDFTokenizeContentStreamAppendtokenise un flux de contenu directement dans un tableau de tokens existant, si bien que les appelants qui combinent plusieurs flux évitent un tableau temporaire par flux
Changed
- La compilation d’une page pour le rendu n’alloue plus de mémoire pour chaque nombre et chaque opérateur de son flux de contenu, et le contenu de la page est tokenisé directement dans la display list de la page au lieu d’y être copié
- Le rendu parallèle de pages passe beaucoup mieux à l’échelle sur un document froid : sur un document de test vectoriel de 128 pages, 4 workers terminent désormais environ 3 à 3,5 fois plus vite qu’1 worker (auparavant environ 1,4 fois sur les builds 32 bits et 1,7 fois sur les builds 64 bits)
- La compilation et le rendu de pages mono-thread sont aussi environ 35 % plus rapides sur ce document ; tokens, display lists et sortie rendue restent inchangés
Version 2.764.7
Changed
- Le rendu de contenu qui enregistre et restaure souvent le graphics state (
q/Q) n’alloue plus de mémoire à chaque enregistrement, ce qui faisait patienter les threads workers du rendu parallèle de pages les uns sur les autres dans le gestionnaire de mémoire - Le rendu parallèle à froid d’un document de test vectoriel de 128 pages est environ 7 à 10 % plus rapide avec 4 workers et environ 5 % plus rapide avec un seul worker ; la sortie rendue reste inchangée
Version 2.764.6
Fixed
- Le rendu parallèle de pages ne retombe plus à une page à la fois lorsque les pages avaient déjà été rendues et que leurs display lists sont toujours en cache
- Auparavant, chaque page en attente de dessin gardait sa réservation mémoire alors qu’une seule page était dessinée à la fois, si bien que les autres workers s’engorgeaient sur le budget mémoire partagé ; dès qu’il y a autant de pages en attente que de workers, elles sont désormais dessinées en parallèle
- La première page arrive toujours tôt, et la mémoire réservée par un lot reste désormais proportionnelle au nombre de workers au lieu de remplir tout le budget
Version 2.764.5
Fixed
SetStructureClassMapEntrypeut désormais enregistrer un même dictionnaire d’attributs sous plusieurs noms de classe, ou de nouveau sous le même nom, sans le libérer- Auparavant, supprimer ou remplacer l’une de ces entrées libérait le dictionnaire partagé, si bien que les entrées
/ClassMaprestantes pointaient vers de la mémoire libérée et que l’enregistrement du document pouvait écrire des données corrompues ou lever une violation d’accès - Un dictionnaire d’attributs créé directement devient un objet indirect dès son enregistrement, et chaque entrée
/ClassMaps’y réfère ; le document est propriétaire du dictionnaire, et les appelants ne doivent pas le libérer
Version 2.764.4
Fixed
RemoveUnusedLoadedPageResourcesn’écrit plus dans une table de ressources après l’avoir supprimée, quand la table de ressources/Font,/XObjectou autre d’une page est écrite directement dans/Resourceset qu’aucune de ses entrées n’est utilisée- Auparavant, cette écriture allait vers de la mémoire libérée, ce qui passait généralement inaperçu mais pouvait corrompre la mémoire ou lever une violation d’accès plus tard dans la session
- Les tables de ressources vidées sont toujours retirées de
/Resources, et la sortie enregistrée reste inchangée
Version 2.764.3
Fixed
- Ouvrir un PDF chiffré à clé publique (certificat) avec
PubSecKeyMaterial, viaLoadFromFileouBeginIncrementalUpdate, ne lit plus les enveloppes de destinataires dans une mémoire déjà libérée pendant la récupération de la clé du fichier - La défaillance dépendait de la façon dont la mémoire se trouvait réutilisée : le document s’ouvrait généralement, mais pouvait être rejeté comme si aucun matériel de clé n’avait été affecté, ou désencapsuler les mauvais octets
- Les documents à plusieurs destinataires, le callback de sélection de destinataire et les matériels de clé supplémentaires enregistrés avec
AddPubSecKeyMaterialutilisent tous la même liste d’enveloppes corrigée
Version 2.764.2
Fixed
- Les apparences de champs générées pour les formulaires chargés, par
AddLoadedTextField, les autres méthodes de champsAddLoaded*,EnsureLoadedFieldAppearanceStreamouFlattenFormFields, détiennent désormais leur propre référence à la police/DRde l’AcroForm au lieu de partager l’entrée/DR - Remplacer ou supprimer le dictionnaire
/DRde l’AcroForm, ou retirer le dernier champ de formulaire (ce qui supprime aussi l’AcroForm), ne laisse plus ces apparences pointer vers des objets police libérés - Auparavant, libérer ensuite le document pouvait déclencher une violation d’accès masquée qui laissait le reste du document non libéré ou corrompait la mémoire, le plus souvent sur les builds 64 bits
- Une police écrite directement dans
/DRdevient un objet indirect dès la première utilisation par une apparence, si bien que l’apparence du champ et/DRdésignent le même objet police dans le fichier enregistré
Version 2.764.1
Fixed
- Appeler
ProcessObjectStreamsForDecompressionaprèsLoadFromFilene lit plus le flux de fichier que le chargement avait déjà fermé ; la méthode rescanne plutôt le fichier chargé, si bien que les membres des flux d’objets restent disponibles pourExtractObjectFromStream - La défaillance dépendait de la façon dont la mémoire se trouvait organisée : elle passait généralement inaperçue, mais pouvait déclencher une violation d’accès ou scanner de la mémoire sans rapport, le plus souvent sur les builds 64 bits
FindAllObjectStreams,ScanAndLoadReferencedObjectsetForceLoadMissingReferencedObjectsne font plus rien lorsqu’ils sont appelés hors d’un chargement, au lieu de toucher le flux fermé
Version 2.764.0
Changed
- Une instance de
THotPDF, par exemple un composant déposé sur une fiche, peut désormais écrire autant de documents que voulu l’un après l’autre :BeginDocaprèsEndDocdémarre un nouveau document indépendant au lieu de lever une exception EndDocabandonne tout ce qui a été enregistré pour le document écrit, y compris ses images, ses polices, ses champs de formulaire, ses outlines, le JavaScript du document, les destinations nommées, les labels de page, les profils ICC et les output intents, et leBeginDocsuivant libère ses pages et ses objets, si bien que rien de tout cela ne se retrouve dans le fichier suivant ; avecReproducibleOutputactivé, un second document issu d’une instance réutilisée est octet pour octet identique au même document produit par une instance neuve- Les enregistrements effectués entre
EndDocet leBeginDocsuivant, commeAddPDFAOutputIntentou les scripts ajoutés viaNames, appartiennent au document suivant et ne sont plus effacés parBeginDoc - Les réglages de propriétés tels que
FileName,Compression,PDFACompliance,AuthoretTitle, ainsi que les calques de page et les chaînes de fallback de polices, sont reportés au document suivant ; une version PDF augmentée automatiquement pour un document revient à la valeur de la propriétéVersion - Le document écrit reste disponible après
EndDocjusqu’auBeginDocsuivant, si bien queValidatePDFUA2Structure,CurrentPageNumber,PagesCountet les diagnostics de layout continuent de fonctionner sur lui - Comme les mots de passe sont effacés une fois qu’un document protégé a été chiffré,
BeginDoclève une exception lorsqueActivateProtectionreste actif et qu’aucun nouveau mot de passe n’a été défini, au lieu de protéger le fichier suivant avec des mots de passe vides - Démarrer un nouveau document après avoir réécrit un document chargé sur la même instance produit également un fichier propre
Version 2.763.1
Fixed
- Convertir un EPUB, ou importer du HTML avec le profil HTML5, ne risque plus une violation d’accès quand un paragraphe ne tient pas sur la page courante ; le paragraphe est désormais toujours dessiné sur la nouvelle page
- La même correction couvre les paragraphes, les éléments de liste et les lignes horizontales dans le moteur de rendu de blocs compact utilisé par
HPDFRenderHTMLDocument - La défaillance dépendait de la façon dont la mémoire se trouvait organisée, si bien qu’elle n’apparaissait qu’occasionnellement, le plus souvent sur les builds 64 bits, et pouvait laisser une conversion sans sortie ou corrompre son contenu
Version 2.762.1
Fixed
- Appeler de nouveau
BeginDocsur une instance deTHotPDFqui a déjà écrit un nouveau document ne se solde plus par une violation d’accès ; une exception est levée, qui demande une nouvelle instance, car l’instance conserve encore les objets, les images, les polices et les champs de formulaire du document terminé - Au-delà du plantage, le second document aurait transporté les objets du premier, son contenu et ses champs de formulaire compris ; une instance par nouveau document garde chaque fichier limité à son propre contenu
- Charger un document existant avec
LoadFromFilepuis le réécrire n’est pas concerné
Version 2.762.0
Fixed
- Les annotations de texte, de texte libre, de ligne, de rectangle, de cercle, de tampon et de fichier joint sont visibles dans les documents PDF/A-2, PDF/A-3, PDF/A-4 et PDF/X-6 ; elles portaient un flux d’apparence vide qui ne satisfaisait que le validateur, et comme les lecteurs dessinent l’apparence, rien ne s’affichait
- Ces apparences dessinent désormais l’annotation : les cadres du rectangle et du cercle, la ligne, une icône de note et une icône de pièce jointe à la couleur de l’annotation, le cadre du tampon, et la boîte du texte libre remplie avec sa couleur d’arrière-plan
- La sortie PDF 2.0 donne à chacune de ces annotations, aux annotations de balisage étendu et aux nouveaux champs de formulaire un flux d’apparence, comme l’exige ISO 32000-2 Table 166, et écrit
/NeedAppearances false; hors PDF/A et PDF/X, le texte libre et le nom du tampon sont dessinés en Helvetica - En PDF/A et PDF/X, les apparences du texte libre et du tampon ne dessinent aucun texte, car chaque police utilisée doit y être embarquée ; le texte reste dans l’annotation pour que les lecteurs l’affichent
Version 2.761.6
Fixed
- Les annotations de fichier joint (
AddFileAttachmentAnnotation) peuvent de nouveau être ouvertes et enregistrées dans les lecteurs : la spécification de fichier écrivait le flux du fichier embarqué directement comme/EF, là où ISO 32000-1 Table 44 exige un dictionnaire/EFcontenant le flux sous/F, si bien que les lecteurs signalaient l’entrée du fichier comme manquante - Le flux du fichier embarqué d’une telle pièce jointe reçoit le type
/EmbeddedFile, et le texte de l’annotation est également enregistré comme description du fichier
Version 2.761.5
Fixed
- Les destinations nommées, le JavaScript au niveau du document et les pièces jointes au document sont écrits avec leurs clés d’arbre de noms triées, comme l’exige ISO 32000-1 7.9.6 ; ils étaient écrits dans l’ordre d’enregistrement, et les lecteurs qui parcourent l’arbre pouvaient manquer des entrées (qpdf signalait les arbres comme non triés)
- Joindre deux fichiers portant le même nom ne crée plus deux entrées avec une seule clé, ce qui ne laissait qu’une seule pièce jointe accessible ; la seconde reçoit une clé numérotée du type
a (2).txtet conserve son nom de fichier d’origine - Les modifications de
AddLoadedDocumentJavaScriptet deAddLoadedNamedDestinationsont enregistrées ; l’arbre de noms modifié n’était pas réécrit quand il résidait dans un dictionnaire direct, si bien que les nouvelles entrées étaient perdues. Les deux méthodes insèrent à la position triée, y compris dans les arbres découpés en nœuds/Kids, et remplacent une entrée existante de même nom AddLoadedDocumentJavaScriptstocke une action JavaScript comme valeur de l’arbre de noms au lieu d’un simple flux de script, etAddLoadedNamedDestinationécrit l’opérande de zoom de sa destination/XYZRemoveLoadedJavaScriptetRemoveLoadedJavaScriptAllretirent les scripts du document lui-même ; auparavant, seule la liste renvoyée par les getters changeait et les scripts restaient dans le fichier enregistréSetDocumentAttachmentMetadatarenomme la pièce jointe qu’on lui passe ; il renommait la clé de la dernière pièce jointe de l’arbre, et l’entrée renommée rejoint désormais sa position triée
Version 2.761.4
Fixed
- Les nouveaux AcroForms définissent toujours la police Helvetica que les chaînes d’apparence par défaut des champs nomment dans les ressources par défaut du formulaire (
/DR), comme l’exige ISO 32000-1 12.7.3.3 ; sansAutoFormAppearances, la police était absente, si bien que les lecteurs qui construisent les apparences des champs n’avaient aucune police pour le faire AddLoadedComboBoxcrée une véritable combo box ; il positionnait le drapeau Edit au lieu du drapeau Combo, si bien que le champ était une list box que les lecteurs affichaient comme la liste de toutes les options- Les champs ajoutés à un document chargé écrivent
/NeedAppearancescomme booléentrueau lieu du nom/true, et un AcroForm créé pour eux reçoit la chaîne d’apparence par défaut et les ressources par défaut que leurs chaînes/DAmentionnent AddLoadedTextField,AddLoadedCheckBox,AddLoadedComboBox,AddLoadedListBoxetAddLoadedPushButtondonnent au nouveau champ un flux d’apparence, si bien qu’il s’affiche dans les lecteurs qui ne construisent pas les apparences et dans les documents dont le formulaire positionne/NeedAppearances false- Les apparences générées pour les boutons poussoirs chargés (à l’ajout, au redessin ou à l’aplatissement) dessinent la légende, là où elles étaient vides
Version 2.761.3
Fixed
- Changer la valeur d’un champ texte ou d’un champ de choix dans un formulaire chargé redessine désormais le champ :
SetFormFieldValue,ResetLoadedFormFieldet les mises à jour des list box à sélection multiple régénèrent le flux d’apparence, là où le fichier enregistré continuait d’afficher l’ancien texte dans tous les lecteurs et à l’impression, car les lecteurs dessinent l’apparence et non la valeur stockée - Les apparences générées des champs texte de mot de passe affichent un astérisque par caractère au lieu du mot de passe sous forme lisible (ISO 32000-1 Table 228), tant pour les nouveaux champs avec
AutoFormAppearancesque pour les champs chargés redessinés ou aplatis AnalyzeLoadedSignatureRevisionsclasse comme remplissage de formulaire le nouveau dictionnaire d’apparence, le flux d’apparence et ses ressources qu’un remplissage ajoute après signature, comme il le faisait déjà pour le champ lui-même, si bien que remplir un formulaire certifié dans une mise à jour incrémentale n’est plus signalé comme une modification hors des structures reconnues
Version 2.761.2
Fixed
- Les bitmaps à palette 1 bit et 4 bits ajoutés avec la compression Flate conservent leurs couleurs ; ils étaient remappés sur la palette système 256 couleurs, ce qui décalait chaque couleur que cette palette ne contient pas. Ils sont désormais embarqués à leur propre profondeur de bits avec leur propre palette, ce qui rend aussi les données d’image plus petites
- Les bitmaps 1 bit dont la palette liste le blanc avant le noir ne sortent plus en négatif avec les compressions CCITT Group 3, CCITT Group 4 ou JBIG2, y compris les chemins JBIG2 par lot et inter-pages ; la couleur de palette la plus foncée est toujours encodée comme noir
icAutoMonoetAddMonochromeImageAutogardent un bitmap 1 bit à palette colorée en Flate au lieu de le transformer en noir et blanc avec CCITT ou JBIG2- Les images CCITT Group 3 bidimensionnelles (
icCCITT32) suivent désormais leur paramètre/K: la première ligne puis une ligne sur deux sont codées en unidimensionnel et/Kvaut 2, là où chaque ligne était codée en bidimensionnel sous/K 1, ce qui n’autorise aucune ligne bidimensionnelle (ISO 32000-1 Table 11, ITU-T T.4)
Version 2.761.1
Fixed
- Les images JPEG ajoutées avec la compression DCT conservent leur propre espace colorimétrique : les JPEG en niveaux de gris sont écrits en
DeviceGrayet les JPEG CMYK enDeviceCMYK, là où tout JPEG était déclaréDeviceRGB; les lecteurs affichaient alors les fichiers en niveaux de gris corrompus ou tronqués et les fichiers CMYK dans de mauvaises couleurs - Les JPEG CMYK qui portent le marqueur Adobe (la sortie Photoshop habituelle) reçoivent le tableau
/Decodeinversé qu’exigent leurs valeurs d’échantillon (ISO 32000-1 8.9.5.2 et 7.4.8) - Les vérifications d’espace colorimétrique PDF/A voient désormais les images JPEG en niveaux de gris et CMYK comme un usage DeviceGray et DeviceCMYK au lieu de DeviceRGB
StampLoadedPageImageapplique le même espace colorimétrique quand un JPEG est tamponné sur une page chargée- Les noms de fichiers tels que
PHOTO.JPGouscan.jpegse chargent désormais comme JPEG quel que soit le type de compression ; la surcharge fichier deAddImagereconnaît les données JPEG à leur signature au lieu d’une extension.jpgsensible à la casse et ne tente plus de lire ces fichiers comme des bitmaps
Version 2.761.0
Added
- La nouvelle méthode
AddLoadedSignedSignatureFieldajoute à un document chargé un champ de signature prêt à signer, si bien qu’un PDF déjà signé peut recevoir une seconde signature (contre-signature ou approbation) dans une mise à jour incrémentale - Le champ réserve l’espace de signature que
SignPDFWithPFX,PreparePDFForSigningetInsertSignatureHexviennent remplir ; aprèsBeginIncrementalUpdateetSaveIncrementalUpdate, la nouvelle signature couvre tout le fichier tandis que les signatures antérieures restent valides - Le motif facultatif, l’emplacement et les coordonnées de contact, le SubFilter et la taille réservée de la signature se règlent champ par champ ; l’AcroForm est marqué comme signé et append-only, et aucun drapeau de régénération d’apparence n’est ajouté au document signé
Fixed
- Le workflow multi-signatures documenté de
BeginIncrementalUpdatedécrit désormais des étapes qui fonctionnent ; la description précédente s’appuyait sur une page courante qui n’existe plus après chargement et sur un champ de signature sans espace réservé, si bien que la signature échouait
Version 2.760.1
Fixed
DrawQRCode,DrawDataMatrix,DrawPDF417etDrawAztecrestaurent la couleur de remplissage de la page après le tracé, comme documenté ; les formes remplies ensuite se retrouvaient avec la couleur du code-barres- Ces codes-barres se tracent en un seul path, chaque série de modules sombres d’une ligne fusionnée en un rectangle unique, si bien que le contenu de page est plus léger et que les lecteurs n’affichent plus de fines coutures entre modules adjacents
Version 2.760.0
Changed
- Assigner
aes256àCryptKeyLengthfait passer la sortie en PDF 1.7 quand elle est inférieure, à l’image des autres fonctionnalités dépendantes de la version, de sorte que les documents sont réellement protégés en AES-256. Avec la sortie PDF 1.6 par défaut, ils étaient auparavant écrits en AES-128 sans aucun avertissement ; avecStrictVersionLockactif, une version inférieure retombe toujours en AES-128
Fixed
- Les pages d’aide des propriétés de protection affichaient des noms d’autorisations qui n’existent pas ; les exemples et les descriptions de
prPrintetprPrint12bitcorrespondent désormais aux options réelles, et les notes sur le chiffrement à clé publique listent les types de clés pris en charge
Version 2.759.0
Fixed
- Les PDF signés laissent désormais la chaîne
/Contentsentière, délimiteurs<et>compris, hors des plages d’octets signées, comme l’exige ISO/IEC 32000-1 12.8.3.3 ; les délimiteurs étaient auparavant signés, et les validateurs qui confrontent la plage d’octets à la valeur de la signature le signalaient comme une plage d’octets invalide - La validation PDF MAC des signatures portant un MAC attaché accepte aussi bien la plage d’octets standard que celle écrite par les versions antérieures
Security
- La vérification de signature rejette un document dont l’intervalle non signé entre les deux plages d’octets contient autre chose que la chaîne
/Contentsde la signature elle-même, fermant une faille de signature-wrapping où du contenu situé hors des octets signés se voyait rapporté comme couvert ; les signatures produites par les versions antérieures se vérifient toujours
Version 2.758.1
Fixed
- L’apparence par défaut que
AttachSignatureFieldAppearancedonne à un champ de signature non signé trace à nouveau son fond gris clair : le rectangle de remplissage avait deux opérandes manquantes et réglait sa couleur à l’intérieur du path, ce que les lecteurs rejettent - Les annotations FreeText créées sur une nouvelle page emportent la chaîne d’apparence par défaut qu’exige ISO 32000-1, si bien que les lecteurs peuvent mettre en page leur texte au lieu d’afficher une boîte vide
Version 2.758.0
Fixed
- Le décodeur JBIG2 intégré place chaque symbole après le premier dans une bande de texte là où ISO/IEC 14492 le situe ; chaque symbole supplémentaire atterrissait un pixel plus loin à droite, si bien que le texte des scans JBIG2 produits par d’autres encodeurs se dispersait
- Les images JBIG2 écrites avec l’encodeur arithmétique natif et un dictionnaire de symboles ne contenant qu’un seul glyphe se lisent désormais dans les autres lecteurs PDF ; les identifiants de symboles étaient codés sur un bit au lieu d’aucun, ce qui faisait échouer ces lecteurs dès le premier glyphe
- Les dictionnaires de symboles qui combinent des glyphes par raffinement et agrégation se décodent avec l’espacement standard, à l’instar des autres décodeurs JBIG2
- Les images JBIG2 qui partagent un dictionnaire de symboles global écrivent
/DecodeParmssous forme de tableau apparié au tableau/Filter; les autres lecteurs ignoraient le dictionnaire unique et ne trouvaient pas les glyphes partagés, si bien que ces images ne s’affichaient pas
Version 2.757.0
Fixed
DirectDrawBarcodeet les fonctions de code-barresSimple*tracent désormais de vrais codes-barres pour chaque symbologie ; la plupart renvoyaient des barres alternées régulières ne portant aucune donnée. Le GS1-128 en jeu de codes C (type 22) se trace au lieu de retomber sur le Code 39, et les barres courtes POSTNET se tracent à 40 % de la hauteurDirectDrawBarcodemet largeurs et hauteurs de barres à l’échelle du système de coordonnées de la page, si bien que les codes-barres restent lisibles quand l’échelle du document n’est pas d’un point par unité- Code 128, Code 93 et la famille EAN / UPC gardent des largeurs d’éléments d’un à quatre modules exactes quelle que soit la valeur de
Ratio; tout rapport autre que 2 les rendait illisibles - EAN-8, EAN-13, UPC-A et UPC-E auxquels on ne fournit que leurs chiffres de données se voient ajouter le chiffre de contrôle ; le dernier chiffre de données servait auparavant de chiffre de contrôle. Avec
Checksumactivé, UPC-A ne perd plus son dernier chiffre de données, et le chiffre de contrôle UPC-E (qui sélectionne aussi la parité des barres) se calcule depuis le numéro UPC-A développé - Les chiffres de contrôle MSI sont corrects pour les nombres au nombre de chiffres impair, les codes POSTNET reçoivent leur chiffre de correction, et Interleaved 2 of 5 conserve le dernier chiffre d’un nombre de longueur impaire en ajoutant un zéro de tête
- Code 128 A encode les lettres minuscules via SHIFT au lieu de les transformer en espaces ou en caractères de contrôle, Code 39 replie les minuscules en majuscules, et Codabar conserve les caractères de début et de fin fournis
- Les caractères qu’une symbologie ne peut représenter lèvent désormais une exception ; Code 39 et Code 128 les abandonnaient ou les remplaçaient, et Codabar lisait au-delà de sa table de caractères
- GS1-128 avec
Checksumactivé n’ajoute plus un chiffre de contrôle supplémentaire àTextà chaque mesure ou tracé du code-barres
Version 2.756.0
Fixed
- Les QR Codes tracés avec
DrawQRCodeou construits avecTHPDFQRCodese scannent désormais avec les lecteurs standards : l’information de format se place comme le spécifie ISO/IEC 18004, et la structure des blocs de correction d’erreur est correcte pour chaque version de 10 à 40 (et pour la version 7-Q) - La sélection automatique de mode garde le texte en minuscules en mode byte, si bien qu’une URL telle que
https://example.comn’est plus encodée puis relue en majuscules - Un texte dont la longueur se termine par un ou deux chiffres ou par un caractère alphanumérique obtient un symbole assez grand pour l’accueillir ; les derniers caractères étaient auparavant perdus
- Encoder deux fois avec la même instance de
THPDFQRCodene mélange plus le symbole précédent au nouveau EncoderenvoieFalsequand la version explicitement demandée est trop petite ou que le mode numérique ou alphanumérique demandé ne peut représenter les données, au lieu de produire un symbole tronqué- La sélection de masque applique les pénalités de motif de type finder et d’équilibre des modules sombres d’ISO/IEC 18004 7.8.3
- Le décodeur de codes-barres intégré lit les QR Codes standards : symboles multi-blocs avec vérification Reed-Solomon, segments numériques, alphanumériques, byte et ECI, charges utiles UTF-8 et versions à plusieurs motifs d’alignement
Added
HPDFQRFunctionMapetHPDFQRExtractDataWordsexposent la disposition des modules et le désentrelacement des blocs avec détection d’erreur, pour le code qui lit des symboles QR
Version 2.755.9
Changed
- Le rendu des masques doux d’images réutilise les indices d’échantillons horizontaux exacts et recourt à la prémultiplication alpha SSE2 sur les cibles Delphi x86 et x64 prises en charge, en préservant l’arrondi des pixels et l’annulation, avec un stockage temporaire borné et un repli scalaire
Version 2.755.8
Fixed
- Le rendu au premier plan peut reprendre une fois que le prefetch de pages annulé a libéré les ressources du document, sans attendre que le thread worker ait fini de s’arrêter ; l’annulation explicite, le remplacement, le rechargement et la destruction font toujours un join sur le thread, et les plages de pages invalides ne laissent plus fuiter un worker suspendu
Version 2.755.7
Fixed
- Le rendu de pages préserve le tracé courant à travers les restaurations de l’état graphique et isole les tracés des Form XObjects et des glyphes Type3, le clipping et l’état sauvegardé, y compris les restaurations supplémentaires malformées et l’annulation
Version 2.755.6
Fixed
- Le renderer SIMD de rectangles honore désormais les règles de remplissage composées even-odd et nonzero, en préservant les trous, la direction des sous-tracés réfléchis et le placement des bords fractionnaires ; l’annulation pendant la rasterisation abandonne le bitmap partiel et se propage correctement
Version 2.755.5
Fixed
- Les imports de formulaires multi-sélection réservent désormais les valeurs d’options exactes avant d’interpréter les graphies de compatibilité hexadécimales en XFDF, empêchant les valeurs littérales de sélectionner une autre option et gardant les valeurs stockées cohérentes avec les indices de sélection
Version 2.755.4
Fixed
- L’extraction de texte CID vertical (WMode 1) déplace désormais le stylo du déplacement ISO 32000-1 9.4.4, de sorte que l’espacement des caractères raccourcit le pas le long de la colonne comme la spécification le définit au lieu de l’allonger
- Un ajustement de position
TJen texte vertical déplace désormais le stylo vers le bas ou le haut de la colonne au lieu de sur le côté, si bien que les colonnes extraites ne se scindent plus et que l’ordre de lecture reste de haut en bas - Le tableau
/DW2des CIDFonts est lu dans son ordre spécifié[v1y w1y]pendant l’extraction, de sorte que les glyphes qui s’appuient sur les défauts avancent d’un em complet au lieu de 0,88 em - Les origines des glyphes verticaux extraits restent sur l’axe central de la colonne, et les boîtes de glyphes sont placées à l’origine verticale moins le vecteur de position, la composante horizontale valant par défaut la moitié de la largeur du glyphe
- Les entrées de liste
/W2qui décrivent plusieurs CIDs consécutifs appliquent désormais leurs métriques à chaque CID de la série pendant l’extraction au lieu du seul premier - Le renderer de pages et l’interpréteur d’extraction de texte partagent désormais une seule implémentation des règles de déplacement des glyphes et de
TJ, si bien que les positions rendues et extraites ne peuvent plus diverger
Version 2.755.3
Added
THPDFQCStatementInfogagneHasPSD2Statement,PSD2RolesOfPSP,PSD2NCANameetPSD2NCAId; le descripteur au niveau CMS porte les mêmes champsHPDFParsePSD2QcStatementanalyse une déclaration PSD2 déjà détenue sous forme DER et rejette toute entrée malformée
Deprecated
PSD2RolesPayeretPSD2RolesPayeerestent pour la compatibilité source mais sont toujours vides, parce que la spécification ne définit aucune liste de rôles payeur et bénéficiaire ; utilisezPSD2RolesOfPSP
Fixed
- La déclaration de certificat qualifié PSD2 est désormais lue avec sa structure ETSI TS 119 495, rapportant chaque rôle du prestataire de services de paiement avec son OID et son nom de rôle, le nom de l’autorité nationale compétente et l’identifiant de l’autorité ; les vrais certificats PSD2 ne rapportaient auparavant aucun rôle du tout
- Une déclaration PSD2 malformée, y compris des longueurs débordantes ou non minimales, des composants manquants ou superflus, des types de chaînes erronés et des noms qui ne sont pas de l’UTF-8 valide, est ignorée dans son ensemble au lieu d’être partiellement rapportée
Version 2.755.2
Fixed
- Le rendu de pages du texte vertical (WMode 1) avance désormais chaque glyphe du déplacement en espace texte ISO 32000-1 9.4.4 : l’espacement des mots n’est plus multiplié par la taille de police et n’est plus ajouté aux codes CID à deux octets, puisqu’il ne s’applique qu’au code d’espace à un octet
- L’espacement des caractères en texte vertical est appliqué le long de la direction d’écriture exactement comme la spécification le définit, de sorte que les colonnes composées avec un
Tcnon nul se rendent à la même hauteur que dans les autres lecteurs conformes - Le texte invisible (mode de rendu 3 et contenu optionnel masqué) fait avancer les colonnes verticales selon les mêmes règles que le texte peint, gardant les glyphes visibles ultérieurs à leur place
- Le tableau
/DW2des CIDFonts est lu dans son ordre spécifié[v1y w1y], de sorte que les polices qui s’appuient sur les défauts avancent d’un em complet au lieu de 0,88 em - Les glyphes verticaux sont peints à l’origine verticale moins leur vecteur de position, la composante horizontale valant par défaut la moitié de la largeur du glyphe, ce qui centre les colonnes sur la position du stylo
- Les entrées de liste
/W2qui décrivent plusieurs CIDs consécutifs appliquent désormais leurs métriques à chaque CID de la série au lieu du seul premier
Version 2.755.1
Fixed
- ExportLoadedFormToFDF génère désormais le corps FDF complet avant de créer le fichier cible, si bien qu'un échec en cours d'export ne remplace plus la destination par un document tronqué
- Le scanner d'échange de flux FDF suit les chaînes hexadécimales et préserve l'intégrité des dictionnaires de champs quand une valeur hexa se termine directement contre le terminateur du dictionnaire
- La réconciliation des indices de sélection des listes de choix décode avec un seul matcher les orthographes mêlées PDFDocEncoding, UTF-16 et hexadécimal, si bien que des valeurs d'export équivalentes reconstruisent /I de façon cohérente
- L'import XFDF accepte l'orthographe hexadécimale d'une valeur d'export d'option livrée en texte littéral brut, ce qui rétablit les allers-retours écrits par des outils tiers
- L'export FDF saute les champs réservés aux widgets sans nom de champ, à l'image de l'exporteur XFDF et du comportement de tous les importeurs
- La démo Delphi Stamp ancre son filigrane et son annotation tampon à la taille réelle de la page, ce qui les garde visibles sur des entrées paysage ou non A4
- La démo C++Builder DigiPrint libère ses images et ses listes de lignes par page, initialise le facteur d'interligne de l'en-tête et signale un demo.xml absent au lieu de planter
- Les scripts de build de la DLL ABI Win64 et des workers de codecs trouvent dcc64 dans bin64 sur RAD Studio 12 et ultérieur, et les builds complets de la bibliothèque C++Builder détectent et nettoient les résidus d'essai du répertoire de sortie partagé
Version 2.755.0
Added
- Les champs de liste de choix multi-sélection chargés échangent désormais les valeurs sélectionnées individuellement via les API FDF fichier et flux et les callbacks XFDF conscients des tableaux, en préservant les frontières d'options et en synchronisant les indices de sélection à l'import
Version 2.754.6
Fixed
SetLoadedFormFieldExportValueemprunte désormais le chemin normal de mise à jour de la valeur de champ, en préservant les types de valeur des boutons, les indices de sélection, les états d'apparence, les chaînes encodées et le suivi des changements de calcul
Version 2.754.5
Fixed
- Les valeurs de formulaires XFDF et les éléments de texte d'annotations préservent désormais leur contenu exact sans insérer d'espaces de mise en forme, y compris espaces de tête et de fin, tabulations et sauts de ligne
Version 2.754.4
Fixed
- Les helpers de valeur, de valeur par défaut et de longueur maximale des formulaires chargés honorent désormais les entrées héritées et indirectes, tandis que la réinitialisation des champs préserve les types de valeurs par défaut, synchronise les sélections de choix et les états des boutons, et laisse les champs frères inchangés ; les apparences de boutons régénérées retiennent l'état sélectionné et des limites de rendu valides
Version 2.754.3
Fixed
- Les champs enfants nommés chargés restent désormais adressables individuellement quand leur type de champ est hérité, avec type, drapeaux et options hérités accessibles via les helpers de champs, et une suppression qui préserve les champs frères et leurs widgets
Version 2.754.2
Fixed
- Les apparences régénérées des listes de choix chargées affichent désormais les libellés Unicode des options tout en préservant les valeurs d'export, rendent les options non sélectionnées de la liste et mettent en évidence les sélections simples ou multiples en cohérence avec les valeurs et indices du champ
Version 2.754.1
Fixed
- La mise à jour d'une liste de choix chargée maintient désormais la cohérence de ses indices d'options sélectionnées avec la nouvelle valeur, y compris les valeurs d'export d'options et les entrées éditables hors liste d'options, sans modifier les tableaux de sélection partagés
Version 2.754.0
Added
- Les fabriques facultatives HPDFCreateTesseractOCREngine et HPDFCreateRapidOCREngine relient des programmes de reconnaissance locaux et des modèles fournis par l'appelant aux calques de texte consultables, avec texte Unicode, coordonnées de mots, timeouts, annulation et budgets de sortie
Fixed
- Avances de la matrice de texte corrigées, largeurs des polices CID indirectes, restauration du clipping q/Q et des Form, orientation des JPEG réduits, masques doux d'images et palettes des flux Indexed, afin de rétablir la mise en page du texte et le contenu image sur les pages touchées
- Les glyphes remplis TrueType embarqués de petite taille utilisent désormais un antialiasing de couverture locale pour améliorer les traits fins à basse résolution ; les requêtes OCR annulées sont signalées comme annulées même quand le moteur de reconnaissance renvoie un échec
- RenderOutputDither s'applique désormais sur tous les backends de rendu et le rendu parallèle de pages, avec invalidation de cache et annulation cohérentes
Version 2.753.0
Added
- SetLoadedFreeTextPlainText convertit explicitement les annotations FreeText chargées prises en charge en texte brut ASCII Helvetica et reconstruit leur apparence visible pour les réécritures complètes et les enregistrements incrémentaux
Fixed
- La conversion de pages chargées et la validation à l'enregistrement résolvent désormais les page boxes indirectes et héritées, en préservant les dimensions de page partagées au lieu de les remplacer par du A4
Version 2.752.5
Fixed
- L'initialisation des bitmaps de page vérifie désormais l'annulation pendant la purge des blocs bornés, libère les bitmaps inachevés et évite de retarder le rendu au premier plan pendant que le préchargement annulé termine son initialisation
Version 2.752.4
Fixed
- La fermeture ou le rechargement d'un document libère désormais ses graphes d'objets PDF et charges utiles de flux possédés, y compris les propriétés partagées et cycliques, sans libérer deux fois les références liées
Version 2.752.3
Fixed
- Les changements de valeur des cases à cocher chargées synchronisent désormais les états d'apparence même quand le dictionnaire d'apparence normale ne contient que l'état sélectionné
Version 2.752.2
Fixed
- Activer la sortie reproductible après la construction du document fige désormais l'horodatage de création, si bien que des enregistrements équivalents restent identiques à l'octet près d'une horloge à l'autre
Version 2.752.1
Fixed
- Les noms de champs de formulaires chargés décodent désormais les chaînes PDF de façon cohérente, ce qui permet de trouver et de mettre à jour des champs à noms UTF-16 sans changer leur identité
Version 2.752.0
Fixed
- Le déplacement d'une annotation chargée hors widget préserve désormais l'identité de l'objet annotation et met à jour sa référence de page facultative vers la page de destination
Version 2.751.0
Fixed
- La suppression de pages chargées maintient désormais les destinations nommées, destinations d'outlines, arbres de structure, arbres parents et références d'objets d'annotations, éliminant les références nulles atteignables aussi bien dans les réécritures complètes que dans les enregistrements incrémentaux
Version 2.750.0
Fixed
- Les réécritures complètes de PDF déploient désormais les objets compressés non lus avant de remplacer les conteneurs de flux d'objets, en préservant polices, espaces colorimétriques et ActualText tout en corrigeant le texte chinois illisible, l'apparence de page modifiée et le texte extrait altéré
- Les documents chiffrés avec un mot de passe utilisateur vide se chargent désormais et démarrent directement une réécriture, tandis que les flux d'objets verrouillés échouent clairement au lieu de produire un document incomplet
- Les objets numériques non modifiés conservent leur précision d'origine, ce qui évite la dérive subtile des couleurs et de la transparence après une réécriture
- Les pages copiées retiennent leurs noms de ressources validés et leurs références, ce qui corrige les erreurs de dictionnaires de ressources indirectes et les images mal liées
Version 2.748.6
Fixed
- Une sous-section de table de références croisées qui déclare plus d'entrées que la table n'en contient parcourait tout le compte déclaré sans qu'il reste de données à lire : un fichier malformé de quarante octets mettait donc des dizaines de secondes à être rejeté
- Le runner de jobs perdait tous les résultats déjà produits quand une opération levait une exception, et l'import HTML perdait un objet image quand le flux qui l'entoure ne pouvait pas être créé
Version 2.748.5
Fixed
- Les fichiers PKCS#12 avec un mot de passe non ASCII échouaient à s'ouvrir : le mot de passe est une chaîne d'octets UTF-8, mais il était élargi octet par octet au lieu d'être décodé, donc la clé dérivée était fausse pour chaque caractère hors ASCII. Les fichiers protégés par le schéma PBES2 moderne n'étaient pas touchés, d'où la différence de comportement entre les deux
- Le validateur de lots de signatures et le cache de preuves de révocation levaient une access violation au lieu de leur propre erreur quand on les construisait avec une option invalide, car le destructeur s'exécutait avant que les membres qu'il libère aient été créés
- La tâche de téléchargement de preuves échouait dans son destructeur quand ses arguments étaient rejetés, les vérifications s'exécutant avant que le thread lui-même ait été créé
- Le fournisseur de signature cloud encodait un identifiant d'algorithme dont le deuxième arc dépasse 39 ; un identifiant malformé lève désormais l'erreur propre du fournisseur plutôt qu'une erreur de conversion
- Les conteneurs de certificats et de signatures rejettent désormais un élément imbriqué qui déclare une longueur allant au-delà de l'élément qui le contient, donc ce qui est validé et ce que couvre la signature ne peuvent plus diverger
- Les valeurs des clés privées sont effacées de la mémoire après une signature RSA au lieu de rester sur le heap pour la prochaine allocation
Version 2.748.4
Fixed
- Le chargement des polices Type 1 lisait chaque propriété dans la première ligne du programme de la police : la liste de tokens était réremplie sans être vidée, donc les chaînes de version, de famille et de graisse, les stem hints et la longueur de clé charstring venaient tous de tokens périmés. Les polices Type 1 signalent désormais leurs propres métadonnées
- La longueur de clé charstring était conservée comme un pointeur vers une chaîne déjà libérée et utilisée sans contrôle de plage ; elle est désormais stockée comme une valeur et bornée à la plage que le format autorise
- Les polices non incorporées retombaient toujours sur la face par défaut du système : le nom de face demandé était copié octet par octet dans l'enregistrement de police à caractères larges, donc aucune famille installée ne correspondait jamais
- L'analyse des polices TrueType et OpenType incorporées lisait au-delà de la fin d'un programme de police tronqué en décodant les contours de glyphes, les arguments des glyphes composites et la table CFF d'un conteneur OpenType, et une table de caractères malformée ne demande plus un tableau de glyphes négatif
- Les tables et flux de références croisées dont les numéros d'objets déclarés débordent : une entrée revendiquant un numéro proche de la limite entière bouclait en index négatif et s'écrivait hors de la table, et un nombre d'objets déclaré ou une
/Sizebien plus grand que ce que le fichier pouvait contenir dimensionnait les tableaux du loader sur cette seule déclaration
Version 2.748.3
Fixed
- Data Matrix rejetait des entrées valides : la taille du symbole était estimée en divisant par deux le nombre de chiffres, mais seuls les chiffres adjacents partagent un mot de code, donc un texte comme
1a2a3achoisissait un symbole trop petit pour ses propres données et échouait à encoder - Les caractères UTF-8 de quatre octets dans XFDF, comme les emoji, se décodaient vers la mauvaise paire de substitution, et un octet non reconnu n'avale plus les trois caractères qui le suivent
- Les records de région des métafichiers améliorés bornent désormais leur nombre de rectangles par la taille du record au lieu de se fier au compte dans l'en-tête de région, qui pouvait lire bien au-delà du record
- Les images PNG dont la largeur déclarée multipliée par la hauteur dépasse la plage adressable sont rejetées dès l'en-tête au lieu d'allouer un buffer de pixels de longueur négative
- Le rééchantillonnage d'images de haute qualité signale désormais une requête hors plage au lieu de faire déborder la taille de son buffer intermédiaire
- Une image de préfixe méta WebP qui revendique plus de groupes d'entropie qu'elle n'a de pixels est rejetée au lieu d'allouer des centaines de mégaoctets de tables de préfixe à partir de quelques centaines d'octets d'entrée
- Fuites corrigées sur les chemins d'échec de l'encodage Aztec, du décodage de bitmaps WebP et du pool de workers de décodage des flux d'objets, où un objet à moitié construit était abandonné quand une étape ultérieure levait une exception
Version 2.748.2
Fixed
- Les symboles QR Code perdaient les derniers bits de mot de code : le parcours de placement des modules sautait la colonne la plus à gauche, donc la fin du dernier bloc de correction d'erreurs n'était jamais écrite dans le symbole
- Le terminateur QR remplissait de bits à zéro tout le reste du bloc de données, sans laisser de place aux mots de code de bourrage 0xEC / 0x11 qu'exige l'ISO/IEC 18004 ; un symbole de version 1 portait six mots de code nuls à la place
- Un nouveau test relit un symbole généré depuis ses modules, donc le bloc de données, les mots de code de bourrage, le bloc de correction d'erreurs, le masque et le placement sont tous vérifiés contre la norme plutôt que contre la sortie propre de l'encodeur
Version 2.748.1
Fixed
- Trois analyseurs se bloquaient sur une entrée malformée au lieu de la signaler : l'analyseur d'objets sur un
>>dans un tableau ou un]dans un dictionnaire, le lecteur CMap sur un crochet ou une accolade isolée, et le lecteur XFDF sur une construction sans nom de balise (une déclaration de type de document, entre autres) ou un octet isolé entre attributs. Chacun cessait d'avancer son curseur, donc un seul octet inattendu transformait l'analyse en boucle infinie - Les sections CDATA dans XFDF étaient lues comme du balisage : leur contenu est désormais pris comme texte de l'élément, et le marqueur de section est mesuré correctement au lieu d'avaler le premier caractère
- Une longueur de chunk WebP proche de 2 Go faisait déborder la vérification de taille, donc la copie de la charge utile lisait au-delà de la fin du buffer du fichier ; les longueurs de chunk sont désormais contrôlées en arithmétique 64 bits
- Une longueur de chunk PNG de 0xFFFFFFFF libérait le buffer du chunk pendant que le chunk signalait toujours sa longueur déclarée, laissant les lectures suivantes pointer sur de la mémoire libérée ; les chunks trop longs sont rejetés
- Le décodage fax CCITT débordait son calcul de taille de buffer de lignes pour des géométries de page déclarées très grandes, ce qui pouvait écrire au-delà du buffer ; le stockage des lignes est désormais borné et le décodage s'arrête proprement à la limite
- L'encodeur CCITT lisait un octet au-delà de la fin d'une ligne de scan pour les largeurs multiples de huit
- Les records de commentaire des métafichiers améliorés étaient lus via un pointeur tronqué à 32 bits sur les builds 64 bits, ce qui lisait une adresse sans rapport pour chaque EMF portant un commentaire GDI
- Les images 8 bits avec moins de 256 entrées de palette publiaient de la mémoire non initialisée comme fin de leur table de couleurs, et la table déclare désormais son nombre réel d'entrées
- Des structures BER à longueur indéterminée profondément imbriquées épuisaient la pile en analysant un conteneur de signature ou de certificat ; l'imbrication au-delà de 128 niveaux est rejetée
Version 2.748.0
Fixed
- La correction d'erreurs de tous les codes-barres 2D que la bibliothèque dessine était fausse : QR Code, Data Matrix, PDF417 et Aztec construisaient leur polynôme générateur depuis le terme constant mais divisaient comme si le terme de tête venait en premier, donc chaque symbole portait des mots de contrôle qu'aucun lecteur conforme n'accepte. Les mots de contrôle correspondent désormais aux exemples calculés d'ISO/IEC 18004, d'ISO/IEC 16022 et d'ISO/IEC 15438
- Les symboles Aztec perdaient leur charge utile : l'encodeur divise le tableau de mots de code sur place et l'appelant émet ce même tableau, donc les mots du message étaient écrasés par la division et le symbole ne portait ni les données ni un message de mode valide
- Le polynôme générateur de Data Matrix commençait ses racines une puissance trop bas, ce qui produisait un polynôme différent de celui que prescrit l'annexe E d'ISO/IEC 16022
- Le motif de repère de Data Matrix : le L plein est désormais la colonne de gauche et la rangée du bas, et la piste d'horloge alternée est la rangée du haut et la colonne de droite, chacune démarrant sombre au coin qu'elle partage avec le L. Les deux étaient inversées, donc les lecteurs ne pouvaient pas établir l'orientation du symbole
Version 2.747.4
Fixed
- L'édition des documents chargés écrivait les nombres PDF avec le séparateur décimal du système : l'assemblage de pages, le caviardage de rectangles, les stamps de texte et d'image, les formes de filigrane composites et les apparences d'ellipse émettent désormais toujours un point, donc les documents édités sur un environnement décimal à virgule (par exemple un Windows allemand ou français) ne contiennent plus de flux de contenu que les viewers rejettent
- Le chargement des polices Type 1 dépendait de la locale du système : les réels FontMatrix, BlueValues, stem hints et charstring sont désormais analysés comme des nombres PostScript à point, donc les polices PFB conservent leurs metrics et leurs outlines sur les systèmes à virgule décimale au lieu de s'effondrer silencieusement
- L'analyse de la taille et de la couleur des polices de la default appearance (
/DA), les attributs HTML width etsize, les résultats FormCalc et les nombres JSON des jobs suivaient la locale du processus ; ils utilisent désormais le format invariant dans les deux sens - Le dessin intégré des codes-barres écrivait ses rectangles de barres via un format dépendant de la locale, ce qui produisait un flux de contenu invalide sur un système à virgule décimale
- Les builds Free Pascal analysent et formatent désormais les opérandes des flux de contenu, les metrics d'extraction de texte et les nombres JavaScript avec le format invariant, à l'image des builds Delphi, au lieu de retomber sur la conversion dépendante de la locale
- L'écrivain de nombres ne réécrit plus à chaque appel le séparateur décimal des paramètres de format globaux de l'application hôte — cela changeait la façon dont le reste du programme formatait ses propres nombres et n'était pas sûr quand plusieurs threads produisaient des documents en même temps
Version 2.747.3
Fixed
- Les modifications qui disparaissaient des pages compressées sont corrigées : le caviardage de rectangles, l'assemblage de pages, les formes de filigranes composites et l'aplatissement d'annotations ajoutaient leurs opérateurs à un flux de contenu de page encore compressé, si bien que la barre de caviardage, la page assemblée, la forme de filigrane ou l'annotation cuite était silencieusement absente du fichier enregistré. Le contenu de la page est désormais développé avant tout ajout
- Le contenu ajouté ne fusionne plus avec le dernier opérateur déjà présent sur la page quand celle-ci ne se terminait pas par une espace, ce qui produisait un jeton illisible tel que
Q0.5et pouvait amener un viewer à rejeter toute la page ; une fin de ligne est désormais insérée là où c'est nécessaire
Version 2.747.2
Added
- Prise en charge de Free Pascal Win32 : le package Lazarus se compile désormais pour
i386-win32etx86_64-win64via des points d'entrée de build dédiés, les smoke suites acceptent un argument d'architecture, et les problèmes de compilateur 32 bits et d'édition de liens des symboles C sont corrigés ; la création de PDF, le chargement, la compression Flate, le chiffrement AES et la manipulation de documents CBZ sont couverts sur les deux cibles
Version 2.747.1
Fixed
- Le retry de masque pivoté du décodeur de code-barres intégré laissait des octets résiduels dans les cellules non touchées du masque pivoté, ce qui inventait de l'encre fantôme et rendait illisibles les symboles Code 39 tournés d'un quart de tour ; le tampon pivoté est désormais explicitement remis à zéro, donc les photos et scans de Code 39 pivotés passent bien par le retry de rotation
Version 2.747.0
Added
- Import d'images WebP :
AddImageFromFileaccepte désormais les fichiers.webpvia un décodeur sans perte (VP8L) intégré qui implémente la RFC 9649 — codes de préfixe canoniques, méta codes de préfixe spatiaux, références arrière LZ77 avec la distance map de voisinage, cache de couleurs et les quatre transformations inverses (prédicteur, couleur, subtract-green, indexation de couleurs avec groupement de pixels) ; les frames VP8 avec perte sont rejetées avec un message clair
Version 2.746.0
Added
- Le décodeur de code-barres intégré lit désormais les symboles QR dans n'importe laquelle des huit orientations dans lesquelles une page photographiée ou scannée peut arriver : les finder patterns identifient le coin manquant et la matrice de modules échantillonnée est pivotée ou mise en miroir vers la disposition attendue avant décodage, donc les captures à quart de tour ou en miroir se lisent sans pré-traitement
Version 2.745.0
Added
- Évaluation des certificats qualifiés eIDAS pour les signatures chargées : GetLoadedSignatureQCStatements remonte les QCStatements ETSI EN 319 412-5 du certificat du signataire — valeurs QcCompliance, QcSSCD, QcType, devise/montant/exposant du QcLimitValue et emplacements PDS — plus les rôles payeur/bénéficiaire PSD2 de la TS 119 495, et déclenche une heuristique de signature qualifiée quand QcCompliance et QcSSCD sont tous deux présents (la décision de confiance QTSP reste du ressort de l'appelant)
Version 2.744.0
Added
- Imposition N-up pour les documents chargés : ComposeLoadedPagesNUp repositionne chaque page sur des feuilles composées en grille au format papier source (2-up, 4-up, 6-up, jusqu'à 16x16) pour une sortie prête à imprimer, en absorbant le
/Rotatede chaque page dans la matrice de placement, en partageant les ressources de page avec la forme composée, et en traçant en option des cadres de cellules filaires avec une gouttière réglable
Version 2.743.0
Added
- FlattenLoadedAnnotations aplatit désormais les annotations dépourvues de flux d'apparence au lieu de les ignorer silencieusement : les widgets voient d'abord leur apparence de champ générée à partir de la valeur du champ (le cas
/NeedAppearancesclassique des formulaires imprimés depuis un navigateur), donc la valeur saisie survit dans le contenu de la page - Les annotations markup sans
/APreçoivent une apparence synthétisée à partir de leurs propres propriétés — texte FreeText et Stamp avec style/DAet justification/Q, formes Square et Circle avec couleur/C//ICet épaisseur/BS, traits Line et Ink, et markup quad Highlight / Underline / StrikeOut / Squiggly respectant/QuadPointset l'opacité/CA - Les annotations masquées (flag hidden de
/F) restent des annotations quand elles n'ont pas d'apparence, car aplatir une note invisible la rendrait visible
Version 2.742.0
Fixed
- Les builds du package Free Pascal échouaient depuis 2.738.0 : les déclarations des membres LTV evidence et seed-value étaient placées dans un bloc conditionnel réservé à Delphi alors que leurs implémentations étaient inconditionnelles, donc le package Free Pascal ne compilait plus ; les implémentations portent maintenant le même conditionnel et le package compile à nouveau
Added
- L'import HTML résout désormais les tableaux sur une grille d'occupation complète, donc les cellules
rowspanetcolspanrevendiquent correctement leurs colonnes et les lignes suivantes sautent les emplacements déjà pris au lieu de se décaler vers la gauche - Les hauteurs de lignes des tableaux proviennent du renvoi à la ligne du texte de cellule dans la police de la cellule elle-même plutôt que d'une estimation par comptage de caractères, donc un contenu mêlant étroit et large ne produit plus de cellules qui débordent ou surdimensionnées
- Les largeurs de colonnes suivent les indications de largeur
<col>et les attributs de largeur par cellule, et les lignes d'en-tête balisées avec<thead>(ou les premières lignes composées uniquement de<th>) se répètent en haut de chaque page de continuation quand un tableau traverse une fin de page - Un groupe rowspan reste entier d'une page à l'autre : les lignes reliées par une cellule étendue passent ensemble à la page suivante, donc la cellule étendue n'est jamais coupée
Version 2.741.0
Fixed
- Les builds Free Pascal se terminaient au lieu de signaler une erreur quand un document nécessitait l'un des codecs que ces builds ne lient pas : ouvrir un TIFF, décoder une image JPEG 2000 ou JBIG2, lire un JPEG progressif ou à échelle réduite, appliquer une transformation de couleurs ICC ou demander une recompression Zopfli tuait le process net
- Chacune de ces opérations échoue désormais comme son appelant s'y attend déjà, donc un document qui en utilise une se charge avec cette fonctionnalité ignorée au lieu de faire planter l'application
Added
- Extraction de texte dans l'ordre de la structure : ExtractLoadedPageStructureText parcourt l'arbre de structure du document dans l'ordre de création (ISO 32000-1 14.8.4) et concatène les runs de marked-content d'une page par MCID, donc les documents tagués comme les formulaires administratifs et les publications accessibles extraient leur ordre de lecture de référence au lieu d'une supposition géométrique ; les glyphes que l'arbre ne revendique jamais tombent dans une queue géométrique et sont comptés dans le rapport des non-tagués
Version 2.740.0
Fixed
- Les glyphes couleur perdaient leur transparence dans les builds Free Pascal : les bitmaps couleur incorporés étaient lus par un chemin qui jette le canal alpha, donc chaque emoji ou glyphe de police couleur était dessiné comme un rectangle opaque. Les bitmaps conservent désormais leur alpha par pixel
Fixed
- Accord de clés ECDH P-384 activé : la soustraction conditionnelle finale de la multiplication Montgomery CIOS comparait à P limb plus borrow, ce qui bouclait à zéro sur les high limbs tous à un des nombres premiers P-384 / P-521 et faisait un faux emprunt en silence ; la comparaison détecte maintenant le borrow sans l'addition qui déborde et le secret partagé P-384 correspond aux vecteurs de référence OpenSSL octet pour octet
Version 2.739.0
Added
- Les builds Free Pascal chiffrent et déchiffrent désormais des documents : les points d'entrée AES sont servis par l'implémentation FIPS-197 de la bibliothèque elle-même au lieu de renvoyer une erreur d'opération non supportée, donc les fichiers protégés AES-128 et AES-256 peuvent y être créés et ouverts
- Le chiffrement et le déchiffrement AES-GCM, y compris le contexte de streaming utilisé pour les gros payloads, sont disponibles dans les builds Free Pascal
- Le smoke test Free Pascal vérifie maintenant le chiffrement contre la réponse connue FIPS-197, exerce des allers-retours PKCS#7 et GCM, et crée puis recharge un document protégé AES-256 avec rejet de mot de passe
Added
- Typographie de paragraphe CSS2.1 dans le moteur d'import HTML5 : text-align (avec l'attribut legacy align et la balise center), letter-spacing et word-spacing via les opérateurs PDF Tc / word-space, text-indent pour les retraits de première ligne, et règles text-decoration underline / line-through, donc les imports HTML web et email existants conservent leurs titres centrés, leurs retraits et leurs soulignements
- Le décodeur QR intégré va désormais au-delà de la version 1 : la version du symbole se déduit de la géométrie des finders par divisibilité de la grille (les versions 2-40 avec une grille de modules propre se décodent), le plafond de longueur du mode byte suit la capacité par version de la Table 7 de l'ISO/IEC 18004, et la fonction-module map couvre les alignment patterns et les blocs d'information de version des symboles supérieurs
Version 2.738.0
Added
- Les builds Free Pascal compressent et décompressent désormais les documents en natif : le codec deflate est fourni par un backend intégré s'appuyant sur l'implémentation Pascal zlib livrée avec Free Pascal, donc le contenu FlateDecode ne renvoie plus d'erreur d'opération non supportée
- Les documents compressés peuvent être créés et rechargés sous Free Pascal avec le réglage de compression par défaut, et les flux de références croisées, object streams, fichiers incorporés et contenus de page compressés s'y décodent tous
- Le backend couvre les wrappers zlib et deflate brut, le wrapper gzip et la détection automatique d'en-tête, donc les imports SVG et le fallback de décompression multi-tailles de fenêtre se comportent comme sous Delphi
- Le smoke test Free Pascal vérifie maintenant le codec via un self test de wrapper et de checksum plus un aller-retour sur document compressé
Added
- Complétion de chaîne AIA caIssuers : HPDFFetchAIAIntermediates parcourt les endpoints d'access-method 1.3.6.1.5.5.7.48.2 d'un ensemble de certificats CMS via le transport fourni par l'appelant (les corps DER nus et PEM se décodent tous les deux), et l'option de validation FetchMissingIntermediates alimente le path building avec les intermédiaires récupérés, donc les signatures de signataires cloud avec un seul certificat end-entity se valident au lieu d'échouer en path building
- Activation LTV en un appel : PopulatePAdESLTVEvidence parcourt chaque signature chargée, récupère en ligne ses intermédiaires plus les preuves OCSP/CRL, et écrit le tout dans le DSS du document, faisant passer un document de signature B-B tout frais en B-LT sans tableaux de preuves assemblés à la main
- Respect des seed values à la signature : CheckLoadedSignatureSeedValue lit le dictionnaire /SV d'un champ de signature et vérifie un SubFilter, DigestMethod, Reason et profil DocMDP candidats contre ses contraintes avec la sémantique force-bit de l'ISO 32000-1 12.7.5.5, donc les contraintes de l'auteur du formulaire sont respectées avant de poser une signature
Version 2.737.0
Added
- Vérification stricte à la sauvegarde via la propriété VerifySavedOutput : après écriture, une instance de reader neuve avec récupération de références croisées désactivée recharge le fichier, donc une sérialisation corrompue lève à l'endroit de l'appel au lieu de remonter chez le consommateur suivant
- ReproducibleOutput étendu aux documents chiffrés : les flux AES-CBC utilisent la convention d'IV statique 14*(1+i), le key material et les sels sont dérivés de façon déterministe, et l'ID de document canonique normalise les horodatages Info volatils, pour des sauvegardes chiffrées identiques octet pour octet dans les pipelines de régression
Version 2.736.0
Added
- Rééchantillonnage haute qualité et dithering monochrome via une nouvelle unité HPDFResample : des kernels séparables Catmull-Rom bicubique et Lanczos3 remplacent la sémantique d'étirement GDI pour le downsampling d'images via la propriété ImageDownsampleKernel, et RenderOutputDither applique une diffusion d'erreur Floyd-Steinberg après la composition de page, donc la sortie d'aperçu avant impression garde le détail photographique en pur noir et blanc
Version 2.735.2
Fixed
- Les flux de décompression Flate passaient l'adresse de leur variable tampon au lieu du tampon lui-même lors du remplissage depuis le flux source, ce qui corrompait la mémoire à chaque lecture et pouvait crasher le process ; le chargement de documents compressés, les classes de flux inflate et les helpers de flux de compression et décompression sont tous concernés
Version 2.735.1
Fixed
- Les champs XFA growables sans source de données s'effondraient sur une seule ligne à l'aplatissement : leur hauteur est maintenant mesurée à partir du texte que le template déclare lui-même, qui est ce qu'un tel champ affiche. Un champ lié à des données vides reste mesuré comme vide
Version 2.735.0
Added
- Les builds Free Pascal couvrent désormais toute la bibliothèque : chaque unité compile avec FPC 3.2.2 et Lazarus, alors qu'auparavant seul le chemin de création et de chargement du cœur le faisait
- Les conteneurs XPS, EPUB et CBZ peuvent être importés sous Free Pascal, via un lecteur ZIP en lecture seule intégré qui gère les tailles ZIP64, les entrées stored et deflated, la vérification CRC et les entrées chiffrées de manière traditionnelle avec le même callback de mot de passe que le chemin Delphi
- L'aplatissement de formulaires XFA, le moteur de calcul FormCalc, le runtime de widgets, les composants de visionneuse de documents, les gestionnaires de polices Type 1, l'import HTML, la vérification de signatures et le job runner compilent tous dans les builds Free Pascal ; aplatir les packets XFA d'un document chargé nécessite en plus le codec deflate, que ces builds ne lient pas
Fixed
- Le byte swapping 64 bits de l'unité d'assistance PNG renvoyait des valeurs incorrectes sur Win64 et avait fait sortir l'unité du build entièrement
Added
- Détection des glyphes manquants au moment du dessin : la propriété TrackUnresolvedGlyphs enregistre chaque code point qui serait rendu en tofu .notdef par la face Unicode active, déclenche l'événement OnUnresolvedGlyph pour chaque cas détecté, et laisse intacts les documents pure-GDI non enregistrés
- Support des tables kern historiques : RegisterUnicodeTTF capture la table kern de l'époque Apple/GDI et l'émission du kerning retombe sur sa recherche binaire de paires format 0 quand une police n'a pas de lookups kern GPOS, restaurant l'espacement classique des paires dans des polices comme l'Arial d'origine
- Fallback de police par run dans la mise en page des paragraphes : WideTextOutBox scinde désormais chaque ligne renvoyée aux code points que la police courante ne peut pas mapper et dessine chaque run dans sa police de fallback résolue, donc les paragraphes mêlant Latin, emoji et CJK se rendent sans tofu quand des chaînes de fallback sont enregistrées
Version 2.734.0
Added
- Plomberie de requête d'horodatage RFC 3161 : HPDFRFC3161BuildRequest émet le TimeStampReq DER avec un nonce positive-INTEGER neuf, un OID de policy optionnel et certReq, et HPDFRFC3161ParseResponse décode l'en-tête PKIStatusInfo et extrait le jeton, donc les callbacks de transport TSA tiennent en trois lignes au lieu d'une étude DER
- Déclaration d'extension développeur ISO/TS 32002 (THotPDF.EnsureISO32002Extensions) couvrant les algorithmes de signature EdDSA et les courbes ECDSA supplémentaires des documents PDF 2.0, idempotente et conditionnée à la version comme la déclaration SHA-3 du 32001
Version 2.733.0
Added
- Accord de clés portable X25519 et X448 par échelle de Montgomery, plus ECDH sur courbes NIST P-256 / P-521 avec multiplication Montgomery CIOS, qui permet de créer et de déballer des destinataires à clé publique key-agreement (KARI) entièrement in-process ; la RFC 7748 et des vecteurs de référence générés par OpenSSL verrouillent le comportement de l'échelle dans la suite de régression
- HPDFUnwrapKeyAgreementRecipientEnvelope, avec les points d'entrée AddPubSecAgreementKeyMaterial et AddPubKeyAgreementRecipientWithSecret, donc les documents chiffrés avec des destinataires ECDH / X25519 / X448 peuvent être ouverts avec le scalaire privé du destinataire et chiffrés sans outillage ECDH externe
Version 2.732.0
Changed
- Les sauvegardes font maintenant passer la sortie du sérialiseur par un flux d'écriture tamponné de 1 MiB, regroupant les appels Write par jeton des en-têtes d'objets, des clés de dictionnaires et des lignes xref en poussées par lots vers les destinations adossées à un fichier
- Les payloads des flux de références croisées appliquent la prédiction PNG Up (/DecodeParms /Predictor 12) avant FlateDecode et compactent les trous de free-list via des sous-sections /Index, réduisant les conteneurs xref sur tout document PDF 1.5+ et sur les plages d'objets clairsemées
- La propriété CompressionLevel sélectionne aussi désormais l'effort Flate des conteneurs de flux de références croisées et d'object streams, donc clMaximum produit des flux structurels plus petits à la sauvegarde
Fixed
- Les largeurs de champs /W des flux de références croisées s'adaptent maintenant à la plage d'offsets réelle au lieu d'une disposition fixe [1 4 2] dont le cast Cardinal tronquait silencieusement les offsets au-delà de 4 GiB, endommageant la sortie
Version 2.731.0
Changed
- Refonte de l'OCR intégré par template matching avec extraction de glyphes par composantes connexes, scoring de couverture en niveaux de gris contre des templates multi-polices mis en cache, binarisation Otsu avec fallback par fenêtre locale, découpage des mots par écarts bimodaux, lignes de base par mot, rejet du bruit de spékles, et un alphabet étendu de 62 caractères qui reconnaît du texte ASCII à casse mixte via un clustering de hauteurs au niveau ligne et une préférence de contexte de casse
Version 2.730.0
Added
- Support Win64 pour Free Pascal 3.2.2 et Lazarus 4.6, avec package runtime, script de build reproductible, couche de compatibilité et smoke test non-GUI de création-rechargement ; les intégrations natives statiques de codecs restent réservées à Delphi et signalent une erreur explicite d'opération non supportée dans les builds Free Pascal
Version 2.729.0
Added
- Runtime de widgets XFA dynamique et neutre côté hôte, avec édition Unicode, focus et hit testing, binding conscient des instances, validation et calcul atomiques, reflow borné, et une factory en lecture seule pour documents chargés qui préserve le XFA source
Version 2.728.0
Fixed
- Mesure intrinsèque XFA et continuation de texte corrigées pour préserver les valeurs explicites vides et calculées, utiliser le contexte de binding de chaque champ ou de chaque ligne répétée, conserver les actions breakAfter, éviter les collisions de noms synthétiques et imposer un budget global de mesures mis en cache
Version 2.727.0
Changed
- La mise en page XFA applique désormais les dimensions intrinsèques minimales et maximales, mesure les champs growables à partir de leur texte lié, et découpe atomiquement le contenu textEdit éligible sur plusieurs zones de contenu et pages avec des champs de continuation en lecture seule et des budgets bornés pour le texte, les fragments et les mesures
Version 2.726.0
Added
- Attributs process et spot NChannel complets, mixing hints, flux d'encres spectrales CxF/X-4 PDF 2.0 bornés, et vérifications de cohérence au niveau document pour les définitions de teintes spot et les tables de colorants des output intents externes
Version 2.725.0
Added
- Backend de rendu SIMD par scanlines, déterministe et thread-safe, qui pré-vole les display lists de rectangles supportées, écrit la surface bitmap finale en blocs vectoriels sans copie bitmap intermédiaire, et renvoie les motifs exacts de refus par requête via le fallback logiciel et le pipeline de télémétrie existants
Version 2.724.0
Changed
- Évaluateur FormCalc natif borné étendu avec des agrégats généraux de node-sets SOM, des arguments mixtes scalaire/node-set, des appels numériques et chaînes imbriqués, et des fonctions déterministes de sélection, de chaînes, trigonométriques, logarithmiques et de conversion, sous les budgets existants d'opérations, de tableaux, de profondeur, de temps et de sortie
Version 2.723.0
Changed
SubsetLoadedFontseffectue désormais proprement le subsetting des programmes Type 1 PFB incorporés et des PFA binaires et hexadécimaux séparés, conserve les dépendances composites TrueType récursives et clôt les dépendances d'outline COLR v0/v1 tout en préservant les tables couleur, bitmap, variation et shaping
Version 2.722.0
Added
- Callbacks de mot de passe bornés pour les entrées XPS, EPUB et CBZ chiffrées ZIP classiques, avec limites de retry par entrée, vérifications d'annulation, gestion d'identifiants en mémoire seule et rejet fail-closed des chiffrements indisponibles, invalides ou non supportés
Version 2.721.0
Changed
DownsampleLoadedImagesredimensionne désormais les échantillons d'images Separation et DeviceN 8 bits supportés directement dans l'espace composantes et préserve le graphe d'espaces de couleurs d'origine, la tint transform, les colorants, les plages/Decodeet la sémantique overprint entre sauvegarde et rechargement
Version 2.720.0
Added
- Overloads de reconnaissance intégrées bornées pour l'OCR ASCII majuscule à fort contraste, le Code 39 horizontal et les symboles QR version 1 mode byte propres et alignés aux axes, ce qui permet des couches de texte cherchables et du décodage de code-barres de pages chargées sans moteur fourni par l'appelant, tandis que les entrées ambiguës ou non supportées échouent proprement
Version 2.719.0
Added
- Affinage JPEG 2000 borné par résolution et couche de qualité via
THPDFJpeg2000Decoder.LoadProgressiveFromByteArray, plus encodage multi-couches viaTJpeg2000Bitmap.QualityLayers, avec des pixels finaux identiques pour les ordres de progression LRCP, RLCP, RPCL, PCRL et CPRL
Version 2.718.0
Changed
- CMaps UniJIS, UniGB, UniCNS et UniKS UCS2 et UTF16 horizontales et verticales incorporées en entier, y compris les scalaires complémentaires et les valeurs verticales standard par défaut, donc l'extraction et la géométrie du texte CJK ne dépendent plus de fichiers de mapping Unicode externes ni d'approximations à un demi-em
Version 2.717.0
Added
- Plages de dépendances d'objets partagés linearized explicites et un planificateur de redraw à l'arrivée des plages, pour que les pages puissent se peindre avant l'arrivée de toutes les dépendances optionnelles et se redessiner exactement quand les données nouvellement disponibles changent le résultat
Version 2.716.0
Added
- Réparation bornée du graphe d'objets pour les constats de preflight actionnables xref, trailer, catalog, page-tree et name-tree, avec commit de transaction validé et rollback complet sur entrée dangereuse ou ambiguë
Version 2.715.0
Added
- Wrappers de payload chiffré PDF 2.0 dont le contenu visible du document reste lisible avant authentification, tandis que les noms, descriptions et octets des fichiers incorporés restent protégés jusqu'à un déverrouillage explicite par mot de passe
Version 2.714.0
Changed
- L'export SVG de pages chargées émet désormais des gradients axiaux et radiaux, des représentations PNG bornées des mesh shadings Type 4 à Type 7, et les images inline décodées, sans incrémenter les compteurs de skip correspondants
Version 2.713.0
Changed
- Les glyphes couleur OpenType SVG utilisent maintenant le pipeline Form XObject borné pour les arcs, gradients vectoriels, opacité, masques géométriques et réutilisation locale de
#id, tout en rejetant toujours les scripts, ressources externes, images et contenus actifs non supportés
Version 2.712.0
Changed
ReplaceLoadedPageTextremplace désormais les correspondances s'étendant sur des items de chaînes et tableauxTJvia des glyph source spans, en préservant les nombres de kerning, les préfixes et suffixes non concernés, les opérandes sans rapport et la structure originale du content stream
Version 2.711.0
Added
- Résolution du
SyntheticBasede CFF FontSet avec valeurs Top et Private DICT héritées, CharStrings, charset, Encoding et Local Subrs, plus une sémantique d'override déterministe et un rejet borné des héritages invalides, cycliques ou trop profonds
Version 2.710.0
Added
- Sélection déterministe et bornée du prédicteur Flate via
HPDFSelectFlatePredictor, avec échantillons de lignes distribués, coût en octets estimé, pondération CPU configurable et budgets explicites en octets, lignes et travail
Version 2.709.0
Added
- Sortie native JBIG2 par dictionnaire de symboles et région de texte Huffman sur activation via
THPDFJBIG2Options.UseHuffmanEncoding, avec tables standard DH, DW, BMSIZE, FS, DS et DT, bitmaps collectifs bruts, tables de symbol-ID, routage natif déterministe et allers-retours décodeur exacts au pixel près, tout en conservant les valeurs par défaut arithmétique et MMR
Version 2.708.0
Changed
- Mise en cache des mappings cmap inverses des formes de présentation arabes et combinées par génération de police enregistrée, remplaçant les scans répétés U+FB00..U+FDFF et U+FE70..U+FEFF dans
ApplyArabicGSUBRefinement,ApplyArabicGSUBContextualRefinementet le chemin GSUB contextuel générique, tout en préservant la précédence des code points et la sortie façonnée
Version 2.707.0
Added
- Encodeur de code-barres 2D Aztec (ISO/IEC 24778) via
THPDFPage.DrawAztecet l'unité autonomeTHPDFAztec: encodage haut niveau par programmation dynamique avec latches de mode, shifts et runs binary-shift, bit stuffing, correction d'erreurs Reed-Solomon sur GF(16) à GF(4096), sélection automatique de symboles compacts 15x15..27x27 ou full 19x19..143x143, et contrôle des couches forcées pour des tailles de symboles fixes - Assemblage du texte de page vertical :
THotPDF.ExtractLoadedPageTextet les APIs d'agrégation range/stream regroupent désormais les glyphes WMode 1 en colonnes sur le X d'origine du glyphe, ordonnent les colonnes de droite à gauche et parcourent chaque colonne de haut en bas au lieu de hacher le texte CJK vertical en lignes par glyphe
Fixed
- L'export parallèle par bandes échouait avec une incohérence de largeur de bande PNG sur les pages aux dimensions pixel fractionnaires (A4 à 96 DPI) : la taille du raster est maintenant arrondie avec
Ceiluniformément avec les band writers, donc les tuiles livrées correspondent toujours à la largeur de l'encodeur
Version 2.706.0
Added
- Export PNG en streaming de pages chargées et export TIFF multipage par bandes via
THotPDF.SaveLoadedPageToPng,SaveLoadedPageToPngStream,SaveLoadedPagesToTiffBandedetSaveLoadedPagesToTiffStreamBanded, qui écrivent les données d'image compressées ligne par ligne via des band encoders, pour que les très grandes pages n'exigent pas un framebuffer complet ;THPDFBandImageExportInforemonte la télémétrie page, bande, ligne, worker, mémoire, sortie, timing et annulation
Version 2.705.0
Added
- Finalisation PDF/A dans les chemins de sauvegarde des documents chargés :
THotPDF.SaveLoadedDocumentetSaveLoadedDocumentToStreamvalident désormais le OutputIntentGTS_PDFA1(hérité du catalog source ou fraîchement enregistré) et émettent l'identification XMPpdfaid:part/pdfaid:conformancequandPDFAComplianceest activé, tout en préservant à l'octet près un packet pdfaid existant lors d'une ré-sauvegarde - Prise en charge de l'écriture verticale (WMode 1) côté chargement : les métriques de cellule
/W2et/DW2des CIDFont pilotent maintenant l'extraction de texte et le rendu de page, en descendant les colonnes le long de l'axe y de l'espace texte avec le vecteur de positionnement v1x/v1y au lieu des avances horizontales/W
Version 2.704.0
Added
- Rendu parallèle par tuiles et bandes des pages chargées via
THotPDF.RenderLoadedPageTilesParalleletTHotPDF.RenderLoadedPageBandsParallel, avec callbacks dans le thread appelant en parcours ligne par ligne, bitmaps empruntés, annulation coopérative, mémoire en vol contrôlée par l'appelant, admission selon le pic mémoire, et un cache immuable borné de glyphes Type 3 et halftone screens partagé entre contextes de rendu isolés
Version 2.703.0
Added
- Lots de hash multisign CSC bornés via
THPDFCSCSignatureProvider.SignHashBatch, avec un seul SAD épinglé au hash et une seule requêtesignatures/signHashpour un lot ordonné de même algorithme, tout en imposant les limitesmultisignlocales et liées aux identifiants, une cardinalité de réponse stricte, un ordonnancement synchrone ou asynchrone des résultats, des clés d'idempotence adressées par contenu SHA-256 et le rejeu des lots terminés
Version 2.702.0
Added
THotPDF.RenewPAdESLTATimestampétendu avec des preuves certificat, OCSP et CRL fournies par l'appelant, fusionnées dans le DSS existant avant le nouvel horodatage de document RFC 3161, en préservant chaque révision antérieure à l'octet près et en déduplicquant exactement les flux de validation entre renouvellements successifs
Version 2.701.0
Added
- Preflight des profils PAdES baseline et extended adressables par clause via
THotPDF.PreflightLoadedPAdES, qui remonte chaque exigence applicable avec ID de règle stable, profil, niveau normatif, clause du standard, chemin PDF, numéro d'objet, révision signée ou courante et statut de réussite, tout en validant les cardinalités CMS, les références ESS du certificat du signataire, les contraintes du dictionnaire de signature, la couverture byte-range, le temps de confiance, les preuves DSS et la couverture d'horodatage de document
Version 2.700.0
Added
- Chargement de clés privées PFX / PKCS#12 et signature de documents CMS ECDSA, Ed25519 et Ed448 de bout en bout, avec ECDSA CNG sur courbes nommées, PureEdDSA OpenSSL 3 optionnel, décodage de clés RFC 8410, règles d'empreinte et de paramètres RFC 8419, SHAKE256 à sortie 512 bits pour Ed448, sélection automatique de l'algorithme de clé et appariement strict certificat-clé
Version 2.699.0
Added
- Sélection déterministe des identifiants multiples PFX / PKCS#12 via
HPDFEnumeratePFXIdentities,HPDFParsePFXByLocalKeyIDetTHPDFCMSSignOptions.PFXLocalKeyID, avec attributs de baglocalKeyIdetfriendlyNamestrictement mono-valeur, appariement par clé publique, bags safe-content récursifs, diagnostics d'ambiguïté et de cycles bornés, et intégration automatique de la chaîne de certificats intermédiaire et racine correspondante avec déduplication DER exacte
Version 2.698.0
Added
- Déchiffrement PBES2 PFX / PKCS#12 in-process étendu avec AES-128-CBC et AES-192-CBC plus les PRF PBKDF2 HMAC-SHA-384 et HMAC-SHA-512, avec validation optionnelle de
keyLengthpropre au chiffrement et vérifications bornées du sel, des itérations, de l'IV et du padding, tout en conservant la compatibilité AES-256-CBC et HMAC-SHA-1 / SHA-256
Version 2.697.0
Added
- Héritage
FixedPage.NavigateUriconforme à la spécification pour les Canvas XPS et OpenXPS, pour que les visuels descendantsPath,Glyphset Canvas imbriqués reçoivent l'URI scopée sauf s'ils la surchargent, en préservant les actionsLinkTargetexternes, mail, page de package et percent-decodées à travers les transformations, les clips imbriqués, les groupes d'opacité isolés, la suppression des visuels réutilisables, la restauration après surcharges imbriquées, et les limites existantes de liens, URI, annulation et schemes dangereux
Version 2.696.0
Added
- Groupes de transparence Canvas natifs bornés pour XPS et OpenXPS, pour que les valeurs
OpacityetCanvas.OpacityMasksolides, gradient ou image compositent une seule fois les visuels enfants qui se chevauchent via des Form XObjects DeviceRGB isolés, avec alpha uniforme replié, soft masks à alpha variable partagés, groupes imbriqués, clips transformés, transfert de ressources, liens préservés et échec propre sur contenu malformé, non supporté, singulier ou surdimensionné
Version 2.695.0
Added
- Conversion native bornée de
Canvas.ClipXPS et OpenXPS pour la géométrie abrégée, les valeursPathGeometryStaticResourcelocales ou distantes, les éléments de propriété directs, les figures structurées ligne, Bézier, quadratique et arc, les transformations de géométrie, les clips vides et le clipping imbriquéEvenOddouNonZerovia PDFW*ouW, avec bornes de navigation clippées, limites de parsing à 100 000 valeurs et échec propre sur transformations malformées ou singulières
Version 2.694.0
Added
- Navigation native bornée XPS et OpenXPS pour les visuels
PathetGlyphstransformés, qui préserve les liens HTTP, HTTPS et mail en annotations URI PDF et résout les pages relatives au package plus les fragmentsLinkTargetpercent-decodés en actions PDF GoTo avant ou arrière une fois toutes les pages créées, avec bornes de clic sensibles aux métriques, limites de 65 536 liens et 8 192 caractères, suppression de la capture VisualBrush, annulation et diagnostics fail-closed des schemes dangereux
Version 2.693.0
Added
- Conversion native bornée de
VisualBrushXPS et OpenXPS pour les visuelsCanvas,PathetGlyphsinline ou adossés à des ressources, recherche hiérarchique et distante dans lesResourceDictionary,Viewboxabsolu,Viewportabsolu ou relatif, modes de tuileNone,Tileet réfléchi, transformations, opacité, Form XObjects réutilisables, tiling patterns partagés, transfert de ressources conscient des jetons et budgets fail-closed de cycles, entrées malformées, récursion, contenu, cache et placement
Version 2.692.0
Added
- Intégration native des polices de package XPS et OpenXPS pour les programmes TrueType et OpenType, fragments de membres TTC, ressources obfusquées par GUID, glyph IDs directs ou dérivés du cmap, clusters Unicode un-vers-plusieurs, avances et offsets explicites, origines RTL correctes en largeur, ressources de police partagées, permissions embedding et no-subsetting, subsetting de glyphes optionnel, maps
ToUnicodebornées et sortie de runs positionnés en coût amorti linéaire sans substitution de face GDI
Version 2.691.0
Added
- Mise en page bornée des
IndicesdeGlyphsOpenXPS pour des comptages stricts d'unités de code et de glyphes par cluster, avances explicites en centièmes d'em, offsets horizontaux et verticaux, progression inversée desBidiLevelimpairs, remplissages solides par attribut ou élément de propriété, opacité, batching PDFTJnatif, fallback de clusters Unicode positionnés, extraction de texte préservée, diagnostics fail-closed d'entrées malformées et tampons en coût amorti linéaire plafonnés à 65 536 mappings
Version 2.690.0
Added
- Support d'
Path.OpacityMaskOpenXPS pour les masques solides, gradients linéaires multi-stops à alpha variable et radiaux elliptiques, etImageBrushPNG ordinaires, tuilés ou réfléchis, via alpha uniforme replié, groupes de transparence DeviceGray natifs bornés, shading patterns et flux de soft masks d'image partagés, gestion fail-closed des contenus non supportés, et le builder réutilisableRegisterLuminositySoftMaskStateavec binding de ressources d'images alpha
Version 2.689.0
Added
- Modes
Tile,FlipX,FlipYetFlipXYd'ImageBrushOpenXPS via des tiling patterns PDF natifs avec un, deux ou quatre placements clippés indépendamment, ressources d'images et de soft masks PNG partagées, matrices composées de fixed-page, path et brush, et l'API bornéeRegisterImageTilingPatternpour des patterns adossés à des images réutilisables
Version 2.688.0
Added
- Support d'
ImageBrush.TransformOpenXPS pour les matrices d'attributs à six paramètres finies et les éléments de propriétéMatrixTransform, concaténées après le clipping natif dePathet avant le clipping de viewport et le placement d'image, pour que le brush puisse pivoter, changer d'échelle, être incliné ou translaté sans changer la géométrie vectorielle qui le contient ;RelativeTransformnon standard et ressources de matrices non résolues restent des diagnostics explicites
Version 2.687.0
Added
- Placement d'images XObjects contrôlé par matrice via
THPDFPage.ShowImageMatrixet import XPS fixed-page étendu avec remplissagesImageBrushJPEG, PNG, TIFF et JPEG XR de package, mappingViewboxetViewportabsolu ou relatif aux bornes, clipping natif de path et de viewport unique, opacité d'image et de path, alpha de soft mask PNG, dimensionnement 96 DPI conscient du DPI, cache partagé de ressources décodées, et diagnostics fail-safe pour tuilage, transformations, conversion de couleurs et traits d'image non supportés
Version 2.686.0
Changed
- Enregistrement réutilisable borné de gradients radiaux multi-stops et import XPS de paths vectoriels natifs étendu avec des valeurs elliptiques
RadialGradientBrushpar éléments de propriété, spread Pad, alpha uniforme des stops, opacité du brush, mapping du centre, de l'origine et du rayon relatif ou absolu, shading Type 3 PDF natif, et restauration des coordonnées qui laisse la géométrie du path inchangée
Version 2.685.0
Changed
- Import XPS de paths vectoriels natifs ordonné étendu avec parsing d'éléments de propriété conscient des guillemets et borné, brushes de gradients linéaires solides et multi-stops, shading patterns PDF natifs, alpha du brush et des stops, coordonnées de gradient relatives aux bornes par défaut ou absolues explicites, interpolation des stops hors plage, et diagnostics fail-safe pour transformations, modes de spread, interpolation de couleurs, alpha variable et axes dégénérés non supportés
Version 2.684.0
Changed
- Import XPS de paths vectoriels natifs ordonné avec géométrie abrégée bornée, règles de remplissage, remplissages et traits solides RGB et ARGB, opacité du path, épaisseur de trait, transformations à six paramètres et diagnostics fail-safe pour les fonctionnalités de dessin non supportées
Version 2.683.0
Changed
- Validation PDF/X-6 du contenu réellement peint renforcée avec graphics state des shading patterns à la définition, sémantique ExtGState des patterns non stroking, vérifications fail-closed du sous-type de soft mask et du backdrop, métriques exactes des glyphes Type 3 et règles de couleur héritée, classification stricte de l'alpha des peintures combinées, inférence de couleurs JPX bornée et compositing d'annotations conscient des apparences
Version 2.682.0
Added
- Support producteur et vérificateur pour les signatures ECDSA
brainpoolP256r1,brainpoolP384r1etbrainpoolP512r1, avec la matrice d'empreintes SHA-2 et SHA3 propre aux courbes, validation de signature fail-before-provider, paramètres de certificats à courbes nommées stricts, identifiants d'algorithme ECDSA sans paramètres, valeurs de signature DER canoniques, import Windows CNG de courbes nommées et diagnostics déterministes pour paramètres explicites, traînants, inconnus ou incohérents
Version 2.681.0
Changed
- Exécution unifiée du contenu bitmap non progressif, direct-DC, Form et display-list via
HPDFInterpretContentTokensDeviceet l'extension optionnelle complèteIHPDFContentOperatorDevice, avec un checkpoint d'annulation par opérateur, un cache d'index d'opérateurs à la compilation pour un replay de display-list sans scan d'opérandes, des métriques publiquesOperatorCount, une compatibilité semantic-device préservée, une sémantique corrigée des opérateurs",vety, et une gestion légale du terminateurEIsans faux diagnostics de fallback
Version 2.680.0
Added
- Overloads transactionnelles bornées de
RepairPDFA4avec options typées, rapports de réparation détaillés, provenance partagée des constats, normalisation sûre de l'en-tête PDF 2.0, du trailer ID, des métadonnées, du Catalog et de la présentation, réparation de l'identification PDF/A consciente des namespaces, politique de commit configurable partielle ou pleine conformité, détection de régression d'erreurs, rollback exact à l'octet du graphe et du XMP, et une frontière stricte qui préserve le contenu des pages, les polices, les couleurs, la transparence, les images, les opérateurs graphiques et le texte extrait
Version 2.679.0
Added
- Validation PDF/X-6 du contenu réellement peint avec règles sélectionnables ISO 15930-9:2020 ou errata résolus 2025, vérifications réelles de l'en-tête et des canaux ICC, parcours conscient des ressources des tableaux de contenu, Form XObjects, tiling et shading patterns, images, glyphes Type 3, soft masks et apparences d'annotations, diagnostics de transparence overprint-mode et peinture combinée, provenance stable des règles, et travail borné en octets décodés, jetons, objets, problèmes, récursion et graphics state
Version 2.678.0
Added
- Validation PDF/A-4 bornée approfondie avec vérifications d'en-tête et de composantes ICC mises en cache, cohérence des output intents du document et des pages, analyse réelle des couleurs device peintes et de la transparence à travers les tableaux de contenu, Form XObjects imbriqués, images, image masks, shadings et apparences d'annotations, graphics state hérité, incorporation des polices de rendu, relations CIDFont et CMap, flags d'annotations et états d'apparence stricts, validation des packets XMP UTF-8 et des namespaces, emplacements logiques dans l'arbre de pages, diagnostics stables conscients des clauses, et plafonds configurables d'octets décodés et de jetons de contenu
Version 2.677.0
Added
- Validation bornée PDF/UA-2 complétée pour les documents, chaînes lisibles par l'humain, contenus optionnels, annotations, AcroForm, destinations de structure, outlines, fichiers incorporés et labels de page imbriqués, avec propriété physique du ParentTree, enfants de structure scalaires, restrictions des flux d'apparence, propriétés XMP par namespace URI, détection des plages Unicode private-use et diagnostics conscients des clauses ; l'export structuré HTML, XHTML, XML et JSON partage désormais un modèle de lecture accessible tagué en priorité avec langue, titre, navigation, labels de page, liens sûrs, annotations, contrôles de formulaire non sensibles, remplacements de marked-content, artefacts, alternatives d'images, fallback géométrique, limites indépendantes, annulation et publication atomique
Version 2.676.0
Added
- Planification bornée et minimale des byte ranges de chaque page d'un PDF linearized via
PlanProgressiveLinearizedPageRanges, avec décodage des hints principaux et d'overflow bruts ou Flate, layouts de hints combinés alignés sur les octets et de split continu Annexe F interopérables, dépendances exactes de bootstrap, de page, de groupe partagé et de références croisées traditionnelles ou stream préfixées LF ou CRLF, accumulation légale de lectures courtes, plafond mémoire par défaut du planner de 256 MiB avec désambiguïsation d'encodage fail-closed, fusion consciente des chevauchements, vérifications structurelles croisées strictes, limites typées et diagnostics de disponibilité, et un chemin de première page unifié[0, /E)
Version 2.675.0
Added
- Politiques de crypt filters indépendantes et conformes aux standards pour les chaînes, les flux normaux et les fichiers incorporés via
ConfigureCryptFilterDefaultsetSetStreamCryptFilter, avec filtres réservés password et clé publique,/Identity, pipelines/EFFde sécurité par mot de passe et/Crypten tête corrects côté writer, bornes de destinataires propres aux streams à clé publique fail-closed, chargement et inspection sensibles à la casse des named filters externes,/CFM /None, remontée de longueur de clé V2, fallback Direct File à politiques mixtes, politiques séparées pour conteneurs d'object streams et chaînes membres, et mises à jour incrémentales chiffrées préservant les politiques
Version 2.674.0
Added
- Mises à jour incrémentales chiffrées Standard et à clé publique préservant les identifiants via une surcharge de
BeginIncrementalUpdateconsciente des mots de passe et du key material de destinataires assigné, avec clés de fichier ou FEKs retenues de façon sûre, politiques de crypt filters séparées pour chaînes, flux, métadonnées et Identity, dérivation legacy des clés d'objets consciente des générations, références/Encrypthéritées exactes, révisions sources identiques à l'octet près, accès utilisateur, owner ou destinataire d'origine, et rejet fail-closed des changements de chiffrement et des filtres hétérogènes non supportés
Version 2.673.0
Security
- Validation bornée du graphe de segments JBIG2 avant décodage pleine page, région, natif ou externe et avant partage du dictionnaire global, avec vérifications indexées des doublons et des références manquantes, détection itérative des cycles et de la profondeur de dépendances, imposition des associations de pages des streams incorporés, rejet des segments interdits, budgets de références longues et d'arêtes agrégées, garde-fous d'allocation des dictionnaires de symboles et télémétrie précise des échecs
Version 2.672.0
Added
- Génération et validation stricte du
signature-policy-identifierPAdES E-EPES avec OIDs de policy explicites, hash connus ou inconnus ETSI, qualificateurs SPuri, SPUserNotice et SPDocSpecification, parsing Unicode et de collections borné, hachage du document de policy, épinglage de l'OID et du hash du signataire principal avant tout travail cryptographique, statuts dédiés de mismatch et reporting JSON complet
Version 2.671.0
Added
- Conteneurs RFC 5652 déterministes avec jusqu'à 256 enregistrements
SignerInfoprimaires indépendants viaHPDFCMSBuildMultiSignedDataetHPDFCMSMergeSignedData, avec prévalidation du lot entier avant les effets de bord des signataires, attributs, algorithmes, certificats et providers par signataire, validation stricte des conteneurs à longueur définie, ensembles triés DER et déduplicqués, résultats de vérification indépendants, compatibilité octet avec signataire unique et dimensionnement de placeholders d'agrégat sans effets de bord
Version 2.670.0
Added
- Identités de signataires RFC 5652
SubjectKeyIdentifieroptionnelles viaTHPDFCMSSignOptions.SignerIdentifier, avec encodage SID IMPLICIT compact, sélection automatique des versionsSignerInfoetSignedData, extraction stricte des extensions X.509, support provider et dimensionnement de placeholders, et appariement SID, certificat et version fail-closed lors de la vérification
Version 2.669.0
Security
- Diagnostics fail-fast de cohérence des algorithmes d'empreinte CMS à travers
SignedData.digestAlgorithms,SignerInfo, les paramètres du mécanisme de signature et leCMSAlgorithmProtectionRFC 6211, avec statut de vérification dédié, code d'échec de validation, propagation d'horodatage, motifs détaillés et sortie JSON
Version 2.668.0
Added
- Génération et vérification SHA3-256, SHA3-384 et SHA3-512 à travers les CMS détachés, les contrats de providers RSA PKCS#1 v1.5, RSA-PSS et ECDSA, les horodatages de contenu et de signature RFC 3161, le renouvellement PAdES-LTA, les dictionnaires Seed Value et les déclarations d'extension développeur ISO 32001 PDF 2.0, avec hachage borné en une passe des byte ranges partagé avec les politiques PDF MAC correspondantes
Version 2.667.0
Added
THotPDF.ValidatePDFMACChainavec validation des révisions incrémentales du plus ancien au plus récent, indexation cumulative classique ou xref-stream, localisation exacte des échecs de révision et de xref, détection du remplacement historique de MAC, application stable duKDFSalt, rejet des rétrogradations de force d'empreinte, vérifications authentifiées de/Pet/Perms, reporting preflight et parsing de révisions borné sans copies PDF temporaires
Version 2.666.0
Added
THotPDF.SignPDFWithPFXAndAttachedPDFMACet validation attachée à la signature avecAuthCodedirect du trailer actif,SigObjRefindirect, couverture complète de la révision signée, binding du hash de la valeur de signature brute, politiques PDF MAC SHA-2 ou SHA-3, hachage en une passe des plages de signature et de MAC, reporting preflight et remplacement atomique de la sortie
Version 2.665.0
Fixed
THotPDF.RegisterNChannelColorSpacecorrigé pour émettre la formeDeviceNà cinq éléments de l'ISO 32000-2 avec/Subtype /NChannelet métadonnées de composantes process, minimum de version PDF relevé à 1.6, et les soft masks de luminosité résolvent désormais la peinture NChannel via son espace alternatif, tout en conservant la compatibilité de lecture avec les jetons de la famille/NChannellegacy
Version 2.664.0
Added
- Rendu des modes de fusion PDF complété avec des implémentations de hot path en entiers pour Hue, Saturation, Color et Luminosity, et correction du fast path à opacité pleine pour que chaque mode de fusion séparable ou non séparable actif se compose contre son backdrop
Version 2.663.0
Security
- Authentification des conteneurs PKCS#12 avant d'exposer les contenus safe chiffrés, en vérifiant le
MacDataexterne optionnel avec itérations KDF PKCS#12 bornées, HMAC SHA-1 ou SHA-256, comparaison d'empreintes en temps constant et gestion fail-closed des mauvais mots de passe et des altérations
Version 2.662.0
Added
- Trois commandes HotPDFCLI :
renderrastérise chaque page sélectionnée en<prefix>-page<N>.pngvia le pipeline bitmap des pages chargées (plage--pages,--dpi10..2400, 150 par défaut),tablesextrait les tableaux typés en CSV ou JSON viaExportLoadedTypedTables(--json,-ofichier ou console) etcompareaffiche le rapport de comparaison JSON de deux documents viaHPDFDocCompareDocuments(--mode0..5 couvrant page-count, page-text, object-count, rendered-image, full et structural)
Fixed
- Le pipeline de transformations ICC Win64 produisait une sortie tout-zéro pour les transformations de lot 8 bits (
TransformBytes) : le fast path 1D-LUT optimisé des objets lcms2 Win64 renvoie des zéros alors que le pipeline générique de rééchantillonnage est correct, donc la transformation 8 bits compile désormais aveccmsFLAGS_NOOPTIMIZEsur Win64 uniquement ; le chemin 16 bits mono-couleur et toutes les transformations Win32 gardent le fast path optimisé (les primaires sRGB en lot font maintenant des allers-retours corrects sur les deux plateformes)
Version 2.661.0
Added
- Vraie compression Flate à haut ratio Zopfli avec budget, en plus de la baseline zlib à quatre stratégies existante, avec sélection stricte sans croissance, limites d'entrée, d'itérations, de blocs, de sortie et de temps écoulé, télémétrie détaillée des flux et des images parallèles, et seuils d'économies déterministes sur corpus fixe
Version 2.660.0
Added
- Rapports preflight XML lisibles par machine et déterministes et plugins de confiance versionnés par ABI pour l'extraction de fonctionnalités et les règles de validation personnalisées, avec ordre stable, intégration des policy bundles, propagation de l'annulation, vérifications de capacités fail-closed et budgets finis de plugins, constats, fonctionnalités, chaînes, sortie et temps écoulé
Version 2.659.0
Added
- FormCalc XFA borné étendu avec logique conditionnelle, agrégats numériques répétés et callbacks d'instances dynamiques validés, et ajout de scripts de formulaires QuickJS sandboxés désactivés par défaut, avec flux de contrôle complet, typed arrays natifs, accès aux données isolé, budgets finis d'instructions, de temps, de mémoire, de pile, de valeurs et d'opérations par instance, et télémétrie d'exécution
Version 2.658.0
Added
- DOMs de packets XFA éditables et bornés pour les flux XDP complets et les tableaux de packets ordonnés, avec requêtes de chemins par local-name, mutation de packets et de nœuds, préservation exacte des octets intacts, réécriture sélective par packet, sortie déterministe des namespaces et attributs, découpage CDATA sûr, échappement des entités et budgets finis d'entrée, sortie, packets, nœuds, profondeur, attributs, texte et requêtes
Version 2.657.0
Added
- Signature à distance CSC API v2 via le pipeline de providers CMS existant, avec transport possédé par l'application, refresh des jetons OAuth, découverte bornée de la chaîne d'identifiants, gestion explicite de l'autorisation et du SAD, signature d'empreintes synchrone ou asynchrone, paramètres RSA-PSS, polling, horodatages RFC 3161, annulation, clés d'idempotence stables et cache fini des opérations terminées
Version 2.656.0
Added
- Gestionnaires de documents XPS, EPUB et CBZ optionnels scorés par contenu, avec enregistrement remplaçable et thread-safe, un seul scan d'archive validé, ordonnancement fixed-page, spine et images naturel, cache de conversion PDF immuable, budgets partagés d'archive, ressources, reflow, pages, pixels, DPI, sortie et annulation, et publication PDF sans risque au rollback
Version 2.655.0
Added
- Extraction bornée de tableaux typés et export atomique CSV ou JSON avec colonnes canoniques, fusion des fragments de même page et des pages consécutives, spans de cellules fusionnées, en-têtes répétés, géométrie de page, confiance, provenance et inférence d'entiers, nombres, booléens, dates, date-times, devises et pourcentages contrôlée par la locale
Version 2.654.0
Added
- Export structuré atomique des pages chargées vers HTML, XHTML, XML et JSON via un modèle unique d'ordre de lecture avec blocs, spans stylés, tableaux détectés, coordonnées, ordre source, images PNG bornées optionnelles, échappement sûr pour Unicode, annulation et budgets de ressources finis
Version 2.653.0
Added
- Réécriture atomique des couleurs des pages chargées vers DeviceGray, DeviceRGB ou DeviceCMYK, avec préservation du vectoriel cherchable, conversion raster sans perte avec gestion des couleurs pour les images et ressources complexes, sortie sûre en rotation, budgets explicites de fidélité de rendu et de ressources, et politiques preserve, process-convert ou reject pour les plaques spot
Version 2.652.0
Added
- Détection de caviardage review-first des pages chargées, avec motifs PII sensibles au checksum, détecteurs d'entités et de visages enfichables, constats scorés par confiance en espace page, télémétrie de travail bornée, identité de relecteur obligatoire, staging atomique des annotations approuvées, et une frontière de burn-in séparée et explicite
Version 2.651.0
Added
- Décodage borné de codes-barres sur pages chargées et régions, avec moteurs enfichables, rendu progressif en basse résolution, scans fallback par quart de tour, payload texte et brut validés, bornes et orientation en espace PDF, filtrage par score de confiance, déduplication des chevauchements, annulation et télémétrie des ressources
Version 2.650.0
Added
- Couches de texte OCR cherchables, bornées et annulables, avec moteurs de reconnaissance enfichables, validation par confiance et géométrie, texte Unicode invisible aligné sur la rotation, groupement par optional content, télémétrie des ressources, et publication multi-pages atomique
Version 2.649.0
Added
- Aller-retours complets de graphes d'objets via du JSON versionné, avec exports snapshot et incrémentaux en streaming, payloads embarqués et sidecar atomiques bruts ou décodés, import borné compatible schéma, validation structurelle et des longueurs de flux, et publication transactionnelle
Version 2.648.0
Added
- Réparation bornée des documents QDF de diagnostic édités à la main : préservation des octets d'objets et de flux, correction des longueurs de flux directes, indirectes, manquantes ou périmées, reconstruction des offsets de tables de références croisées classiques et des trailers, rejet des structures dangereuses, et vérification de la sortie via le loader habituel
Version 2.647.0
Added
- Registre thread-safe de filtres de flux personnalisés, avec contrats push et pull bornés, budgets de décodage partagés, annulation coopérative, exigences de seek explicites, échecs personnalisés isolés, et télémétrie d'exécution
Version 2.646.0
Added
- API visiteur et événements d'opérateurs de contenu bornées, avec vues d'opérandes en lecture seule, callbacks d'état déterministes, actions inspect, measure, replace, delete, stop et reject, annulation coopérative, sortie validée, et mises à jour atomiques des pages chargées
Version 2.645.0
Added
- Contrat de backend de rendu enfichable pour les pages chargées, avec accès aux display lists compilées, implémentation GDI native, dispatch parallèle thread-safe, politique de fallback déterministe, invalidation de cache, et télémétrie d'exécution
Version 2.644.0
Added
- Détection bornée des chevauchements de mise en page, chemins d'éléments, mapping source en opt-in, overlays vectoriels natifs de débordement et de chevauchement, callbacks de diagnostic en direct, et statistiques de travail
Version 2.643.0
Added
- Graphiques vectoriels natifs bornés, avec séries line, bar, area, pie et scatter, axes automatiques ou manuels, thèmes, légendes, libellés, alternatives Figure PDF/UA, et statistiques de rendu
Version 2.642.0
Added
- Pagination RichEdit et RTF bornée sur le thread GUI, avec sortie vectorielle EMF, images, présentations OLE supportées en opt-in, annulation, préservation de la position de flux, et budgets explicites d'entrée, de caractères, de pages et de sortie
Version 2.641.0
Added
- Import SVG 2 borné sous forme de Form XObjects PDF réutilisables, avec géométrie et arcs natifs, cascade CSS, gradients vectoriels, support clip et mask, texte Base 14, ressources d'opacité, annotations de liens conscientes du placement, et statistiques d'import
Version 2.640.0
Added
- Profil d'import HTML5 paged-media versionné, avec parsing DOM tolérant, cascade CSS print, mise en page paginée de blocs et de tableaux, contrôles AcroForm optionnels, ressources bornées pilotées par callbacks, et statistiques par opération
Version 2.639.0
Changed
- Les mappings de fichiers locaux volumineux adaptent désormais le plafond d'octets mappés configuré entre des fenêtres séquentielles plus grandes et jusqu'à 16 fenêtres d'accès aléatoire MRU plus petites, conservent une option de géométrie fixe explicite, et rapportent la géométrie active, les transitions, les comptages de patterns d'accès et le pic d'octets mappés
Version 2.638.0
Added
- Entraînement JBIG2 de symboles inter-pages borné, avec backends externes et natifs, un dictionnaire global partagé, réutilisation exacte des pages dupliquées, insertion directe de lots d'images PDF, télémétrie par backend et par taille, et 78,8 % d'économies de compression mesurées sur le corpus de régression de 100 pages
Version 2.637.0
Changed
- Le rendu parallèle des pages chargées réduit désormais les workers demandés à partir du budget mémoire global du processus, réserve chaque page revendiquée, conserve les réservations de sortie ordonnée jusqu'à la livraison par callback, réveille les waiters du budget en cas d'annulation ou d'échec, et rapporte en télémétrie la concurrence, les réservations, les admissions, les délais et l'attente
Version 2.636.0
Changed
- Le prefetch des pages chargées compile et rend désormais hors du verrou de cache, s'annule de façon coopérative à travers la tokenisation et le playback, cède la place au rendu de pages au premier plan, et expose une télémétrie de progression, d'échec, de préemption et de latence d'annulation
Version 2.635.0
Added
- Rendu parallèle de pages en streaming ordonné, avec callbacks sur le thread appelant, file de bitmaps terminés bornée, backpressure du producteur, annulation coopérative, durées de vie de bitmaps empruntés, et télémétrie de file, d'octets, d'attente, de complétion et de livraison
Version 2.634.0
Added
- Pipeline parallèle en deux étapes pour les pages chargées, qui compile les display lists hors du verrou du cache de rendu, démarre le playback avant que le jeu complet de pages soit compilé, équilibre dynamiquement des workers bornés, préserve l'ordre d'entrée, réduit l'allocation de tokens de contenu, et expose une télémétrie d'étape, de cache, de complétion et de latence
Version 2.633.0
Added
- Handles de bitmaps décodés immuables à comptage de références, avec hits de cache sans copie, dessin direct thread-safe par le renderer, copies mutables isolées à la demande, durées de vie indépendantes de l'éviction, et télémétrie cumulée des handles et des copies
Version 2.632.0
Changed
- L'exécution QuickJS passe désormais par des objets statiques comme par une DLL de pont ABI-neutre sur Win32 et Win64, avec valeurs Unicode-safe, reporting de statut déterministe, limites configurables de mémoire, de pile, de script, de temps et d'interruption, découverte sûre de la DLL, reprise après scripts rejetés, et builds runtime multiplateformes reproductibles
Version 2.631.0
Changed
- La validation des règles métier Factur-X et ZUGFeRD exécute désormais toute la surface Schematron XPath 2 revue, avec bases de codes externes, bindings séquentiels, quantificateurs, sommes FLWOR, identifiants de règles fallback stables, parsing XML borné et sûr, constats explicites d'erreurs d'évaluation, zéro skip silencieux, et validation combinée fail-closed
Version 2.630.0
Added
- Instanciation intégrée des polices variables TrueType, avec axes mappés, tuples
gvarpartagés et privés, interpolation IUP, mises à jour de contours simples et composites, métriques de phantom points, bakingHVAR,VVARetMVAR, reconstruction compacte de glyphes statiques, sortie avec checksums corrects, et enregistrement de polices Unicode sans callbacks
Version 2.629.0
Added
- Estimation sans effets de bord des placeholders CMS à partir des tailles de signature explicites, fournisseur ou certificat RSA, façonnage exact du conteneur statique, réserves conservatrices de payload dynamique, rebuilds avant signature, retries fournisseur conditionnés aux capacités, garanties strictes d'invocation unique du signer externe, dimensionnement borné, et diagnostics détaillés des tentatives
Version 2.628.0
Added
- Subsetting par atteignabilité des polices embarquées dans les PDF chargés, couvrant le contenu des pages, les Form XObjects imbriqués, les états d'apparence des annotations, les programmes de polices partagés, les formats TrueType et CFF, la sélection par taille encodée, les mappings CID et ToUnicode stables, des résultats détaillés, et un refus par défaut en présence de signatures
Version 2.627.0
Added
- Génération automatique de structure PDF/UA pour les arbres de mise en page déclaratifs : titres, listes, tableaux, figures, métadonnées de langue et de texte alternatif, artefacts de pagination, références marked-content sûres en continuation, préservation de l'ordre de lecture, validation sémantique, et statistiques de structure
Version 2.626.0
Added
- DOM de document déclaratif, avec styles héritables, fabriques de composants réutilisables, texte, spacers, stacks, conteneurs, sections, en-têtes et pieds répétés, tableaux pondérés à lignes d'en-tête répétées, profondeur de continuation bornée, statistiques de pagination, fragments de texte et de tableaux sans copie, traversal linéaire du niveau racine, flush immédiat des pages, et surfaces Delphi et C++Builder correspondantes
Version 2.625.0
Added
- Performance gate statistique reproductible sous Win32 et Win64, qui isole load, save, rendu et extraction de texte, enregistre warmups et 30 échantillons bruts avec p50, p95, variance d'échantillon, RSS, I/O processus, environnement et identité déterministe des fixtures, puis évalue des seuils JSON stables et renvoie un code de sortie en échec à la moindre régression
Version 2.624.0
Changed
- Refonte du parsing des dictionnaires et tableaux simples autour de spans source immuables, de conversion numérique directe, de conteneurs imbriqués en une seule passe et d'insertion indexée dans les dictionnaires, avec télémétrie publique de matérialisation ; une fixture Win32 de 30 000 paires réduit de 64,7 % les octets alloués en cinq passes et fait passer le temps écoulé de 3 656 ms à 46 ms
Version 2.623.0
Added
- Limites de parsing configurables pour les octets d'un token individuel, les tokens agrégés, les entrées de tableaux ou de dictionnaires et les tokens malformés, plus un preset strict pour les entrées non fiables, des exceptions de limites typées et une télémétrie par chargement ; les gates de régression rejettent un token de 2 MiB et un conteneur d'un million de tokens en moins de 250 ms et sous un pic processus de 37 MiB
Version 2.622.0
Added
- APIs explicites de libération du graphe d'objets des pages chargées et de télémétrie, qui jettent les racines propres possédées par les pages et les caches de rendu tout en préservant les ressources partagées indirectes et les métadonnées de rechargement ; le traitement séquentiel de 100 000 pages reste à un pic stable de 69,3 MiB et les pages ordinaires ou compressées libérées se matérialisent à nouveau avec leur identité d'objet d'origine
Version 2.621.0
Changed
- Les conteneurs object-stream décodés utilisent désormais un cache LRU configurable plafonné en octets, avec éviction immédiate par conteneur, rechargement depuis la source après éviction, un mode zéro-rétention, et une télémétrie de pic d'octets, d'éviction et de rechargement
Version 2.620.0
Changed
- Les grands arbres de pages ordinaires s'ouvrent désormais en placeholders compacts, résolvent les pages accédées aléatoirement via un traversal guidé par
/Countet un index de hachage d'objets indirects, mettent en cache les pages résolues, exposent une télémétrie et des contrôles de matérialisation, et s'étendent automatiquement avant toute mutation structurelle ou sauvegarde
Version 2.619.0
Changed
- Les champs AcroForm chargés, noms qualifiés, widgets, annotations et pages partagent désormais un cache de relations bidirectionnel lazy, avec recherche inverse d'annotations, recherche de page par widget, télémétrie d'activité, invalidation explicite pour les éditions brutes du graphe d'objets, et maintenance automatique sûre face aux mutations
Version 2.618.0
Changed
- La recherche d'objets page utilise désormais un index inverse reconstruit en lazy et conscient des mutations pour les numéros d'objets et les pointeurs de pages résolues, remplaçant les scans répétés de la table des pages à travers copie de pages, outlines, destinations nommées, actions, formulaires, accessibilité et réconciliation de l'arbre des pages, tout en exposant une télémétrie de validité et d'activité
Version 2.617.0
Changed
- La comparaison de documents rendus prend désormais en charge un DPI choisi par l'appelant, une tolérance de couleur RGB ou luminance, des gates de similarité par ratio de pixels modifiés et type SSIM, des régions modifiées connexes déterministes, des overlays PNG de différences optionnels, et des budgets de pixels par page et globaux fail-closed avec diagnostics de rendu explicites
Version 2.616.0
Changed
- La comparaison de documents traverse désormais les graphes d'objets indirects par des chemins déterministes basés sur le catalog, hache valeurs et flux dans des limites de ressources explicites, aligne les pages avant de classer insertions, suppressions, déplacements et changements, distingue les objets déplacés des ajouts et retraits, et signale les comparaisons incomplètes au lieu de traiter comme identiques des résultats limités par le budget
Version 2.615.0
Changed
- Le décodage des images chargées utilise désormais 16 shards de métadonnées de cache et une coordination singleflight exacte par clé, exécute en concurrence les décodages coûteux indépendants tout en gardant un seul décodage owner pour les requêtes dupliquées, applique les budgets d'octets et d'entrées configurés sur tous les shards, et expose des points d'entrée de décodage en cache plus une télémétrie de concurrence ; quatre requêtes JPEG indépendantes de 12 000 pixels passent à l'échelle 3,72 fois sur quatre workers Win64 tandis que huit requêtes de même clé ne décodent qu'une fois
Version 2.614.0
Changed
- Le rendu JPEG basse résolution en niveaux de gris et RGB sélectionne désormais une échelle inverse-DCT bornée 1/2, 1/4 ou 1/8, streame les scanlines mises à l'échelle via un resampler en virgule fixe directement dans le bitmap cible exact, préserve budgets de décodage, annulation et isolation des workers de codec, et expose une télémétrie source, scaled, cible, scanline et mémoire via
GetLastJPEGReducedDecodeInfo; la fixture de régression 12 000 par 12 000 vers 300 par 300 s'exécute 24,05 fois plus vite qu'un décodage complet sans allouer son raster source de 432 MB
Version 2.613.0
Changed
- Les tableaux
/Contentsdes pages chargées exposent désormais un flux concaténé lazy et seekable, retiennent les segments non filtrés dans un stockage adossé à la source, décodent au plus un segment filtré à la fois, utilisent une accumulation de tokens et d'octets amortie-linéaire, préservent les flux d'origine lors des éditions en ajoutant un nouveau segment, et maintiennent une séquence de 10 000 segments de 1 GiB sous 64 MiB de mémoire de travail additionnelle
Version 2.612.0
Changed
- Les mises à jour incrémentales gardent désormais le fichier source verrouillé en écriture et adossé au fichier au lieu de retenir tous les octets source, ne visitent et n'émettent que les objets modifiés, nouveaux et supprimés dans des sous-sections xref creuses, streame le préfixe d'origine vers une nouvelle cible, et append directement avec rollback pour les sauvegardes vers la même cible ; une révision d'un objet de 4 GiB reste sous 128 MiB de mémoire de travail additionnelle
Version 2.611.0
Added
- Cache de décodeurs de polices chargées borné et scopé au document, avec limite LRU de 32 MiB et 128 entrées, réutilisation singleflight du parsing à travers pages, extraction de texte chargée, export SVG et remplacement de texte, résultats deep-copy indépendants de
GetLoadedFontDecoder, APIs configurables de budget mémoire et de télémétrie, et invalidation automatique graphe, page, reload, JSON Patch et configuration CMap ; l'usage répété d'une police indirecte partagée ne parse plus son encoding, ses widths,ToUnicode,CIDToGIDMapet mappings descendants qu'une seule fois tant qu'elle est retenue