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 ResolveFontForCodePoint et AnalyzeUnresolvedGlyphs sensibles 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

  • THPDFTable garde désormais sur une même page les lignes liées par un RowSpan : 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
  • TotalHeightRendered reflète le groupe déplacé sur la dernière page

Version 2.770.150

Fixed

  • Les cellules THPDFTable avec un ColSpan ou un RowSpan infé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 EHPDFXFAError au 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

  • RecalculateLoadedFormFieldsIncremental traite 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 (THPDFBarcode type 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 (THPDFBarcode types 18 et 19) n’ajoutent plus un chiffre calculé à Text quand Checksum est 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 Checksum est 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 ImportLoadedFormFromXFDF et ImportLoadedAnnotationsFromXFDF, 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"
  • ValidateVisualXmlConsistency ne 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

  • GetLoadedInvoiceSummary signale 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 balisage DateTimeString imbriqué
  • HPDFFacturXXMLElementText renvoie 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 DecodeLoadedPageBarcodes ré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 documente AttemptRotationDegrees
  • 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.pdf généré utilise vraiment des flux de contenu compressés, comme le promettent les commentaires de la démo ; il règle Compression sur cmFlateDecode au lieu de s’appuyer sur l’argument BeginDoc, qui ne contrôle pas la compression

Version 2.770.102

Fixed

  • Les images dessinées avec AlphaBlend dans un métafichier amélioré gardent désormais leur opacité enregistrée quand le métafichier est converti avec THPDFEmfPatcher.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 /BBox au 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’EOverflow sur 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 q ne perdent plus l’état graphique englobant : les sauvegardes plus profondes étaient ignorées tandis que leur Q correspondant restaurait quand même, si bien que le texte et les graphismes après le bloc imbriqué utilisaient l’état d’avant un q externe
  • 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 sh et 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-1 et chapter-2 ouvrent 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 /C1 utilise 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 à /Range que 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 if ou ifelse profondé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 THotPDF dans 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 : -d sur 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 -o que dans le tableau de bord
  • Démo PreflightCLI : -f json et -f csv produisent 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
  • THPDFDiskPageCache prend 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 /BBox telle que placée par sa /Matrix et 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 Td sont 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 --open est 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, HPDFDocRunJob et HPDFDocRunJobWithCallbacks se lit désormais en UTF-8 de bout en bout : les échappements \uXXXX ne 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 \u mal 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 RenderLoadedPageToBitmap et 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

  • ImportLoadedInterchangeFromFDF correspond désormais à des noms de clés entiers quand il lit les annotations et le statut FDF : /T ne s’arrête plus à /Type ou /Text, /F plus à /FreeText, et /Status plus à 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 \ddd et les continuations de ligne par antislash, en plus de \n, \r et 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 TJpeg2000Bitmap place 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 TJpeg2000Bitmap 32 bits par SaveToStream et LoadFromStream, 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_destroy pendant 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_destroy retourne ; 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_HANDLE au 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

  • RenderLoadedPageToDC ne 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’appelant
  • GetLoadedPageMetafile n’é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 à RenderLoadedPageToDC quand 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 W ou W* 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* et b* 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 / \x5C pré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 \uXXXX et 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 DecodeLoadedPageBarcodes sur les pages avec /Rotate 90 ou /Rotate 270 signalent 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 ApplyLoadedOCRTextLayer sur 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é RenderColorimetricLuminosityMasks choisit 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, Lab ou ICCBased)
  • La mettre à true prend 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 /BC d’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
  • DecodeLoadedImageRegionAtResolution renvoie 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 false sont 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 false gardent 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 ProcessObjectStreamsForDecompression sur un document chargé n’abandonne plus les flux d’objets que le chargement avait lus : les objets compressés restent accessibles ensuite à ExtractRawObjectFromStream et ExtractObjectFromStream, 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
  • ExtractRawObjectFromStream dé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

  • EncryptFile et DecryptFile en AES-256 n’endommagent plus les fichiers de polices intégrées dont le dictionnaire liste /Length1 avant /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

  • BuildLoadedPageSVG et SaveLoadedPageAsSVG acceptent un paramètre EmbedFonts facultatif ; 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 /Differences et 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 à Tf et 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

  • LoadFromFile et LoadFromStream ont des surcharges avec un paramètre AutoDecrypt. Avec AutoDecrypt à 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 avant sans-serif et Courier New avant monospace. 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_GB2312 ou 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

  • THPDFGlyphRecord gagne GlyphEndX et GlyphEndY, 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 en PDFReference
  • 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, trademarksans et 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 arrowright ou spade, face à un nom ZapfDingbats

Version 2.766.74

Fixed

  • HPDFExtractGlyphsViaDevice n’é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 dans q ... Q restaient en vigueur pour le texte qui suivait
  • Quand la police sélectionnée dans q ... Q utilisait des codes sur deux octets et la police extérieure des codes sur un octet, le texte après Q é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 RestoreState a 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 que RestoreState (l’opérateur Q) ramène le lecteur à la police en vigueur avant SaveState. Le texte affiché après RestoreState dans 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 SaveState et RestoreState de la même façon, si bien qu’une valeur redéfinie après RestoreState est é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 /ToUnicode dé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 — avec 1 Tf et un Tm mis à 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 #xx avec 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 #xx tels 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 dans font-family sous 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 dans q ... Q se propageaient au texte suivant. Les pages qui alourdissent un titre avec 2 Tr dans 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 /Encrypt comme 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, et SaveLoadedDocument écrivait un fichier endommagé qui perdait /Encrypt tout 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 /MediaBox entiè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 /CropBox restent inchangées

Added

  • THotPDF.GetLoadedPageVisibleBox renvoie la boîte visible d’une page chargée, c’est-à-dire sa /CropBox rognée à sa /MediaBox
  • THPDFPageDisplayList.CropBox donne 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, zcaron et autres) n’étaient jamais trouvés. L’extraction de texte ignorait les entrées /Differences d’une police qui les nommaient, et le moteur de rendu dessinait le y, le z et le 0 des polices CFF intégrées en WinAnsiEncoding ou MacRomanEncoding dans 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 de grave, 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 sh ou utilisés dans un motif de dégradé ; il échantillonne désormais la fonction du dégradé sur son /Domain dans une image PNG intégrée, posée via la /Matrix du 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 /Background d’un dégradé mesh affiché avec l’opérateur sh, 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 /BBox des dégradés pilotés par fonction, axiaux et radiaux (ISO 32000-1 8.7.4.5.1) ; un dégradé étendu peint avec sh ou 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 /FontMatrix de la police, la taille de police et la matrice de texte (ISO 32000-1 9.6.5)
  • Les glyphes Type 3 qui commencent par d1 sont 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 /Widths d’une police Type 3 pour des millièmes d’em, alors qu’ils sont en espace glyphe et mis à l’échelle par la /FontMatrix de 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, comme UniGB-UCS2-H, ou avec une CMap intégrée associent désormais leurs codes aux bons CIDs, si bien que les largeurs /W et les glyphes intégrés sont recherchés aux bons CIDs ; auparavant, par exemple, les lettres latines minuscules d’un texte STSong-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 -V sé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,BoldItalic ou SegoeUI-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 /Encoding se 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 /Widths d’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 ForceBold et Italic et l’angle italique des polices non intégrées prennent effet
  • Le drapeau SmallCap ne met plus le texte en gras : le gras suit désormais le drapeau ForceBold (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 /Function est 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" et font-style="italic" d’après la partie style du nom de police, comme Arial-BoldMT, Helvetica-Oblique ou MinionPro-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 pas XStep et YStep, rogné à la /BBox de la cellule ; auparavant, ces chemins étaient remplis en noir ou gardaient la couleur précédente
  • Les motifs de tuilage non colorés (PaintType 2) 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 Q restitue un motif sauvegardé par un q
  • 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 /Mask de 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 DecodeLoadedImageColorKeyMask renvoie 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

  • CompressDocument et CompressLoadedDocument laissent 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 ConfigureAdaptiveObjectStreamPacking est conservée, CompressDocument restaure 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 CompressDocument et CompressLoadedDocument, é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 avec UseObjectStreams, CompressDocument ou CompressLoadedDocument é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 CompressLoadedDocument avec 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 ; AllowSignatureInvalidation les compresse quand même
  • SubsetLoadedFonts gagne une option CompactTrueTypeSubsets, 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 /CIDSet gardent le sous-ensemble normal
  • Le CompressLoadedDocument sans 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 Version plus 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 /CIDToGIDMap explicite 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 EnableFontSubsetting est actif, et à la police enregistrée avec RegisterUnicodeTTF, 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 /SMask ou un pochoir /Mask explicite 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 /Mask explicite 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 /Rotate ne 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 /D est 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 avec cs/sc/scn dans 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/CS pose désormais sa couleur initiale, par exemple la teinte pleine pour une couleur spot, et la restauration de l’état graphique avec Q ramè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 W et W* : 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 /BBox dans 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 que W est 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 /Extend des 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, /TrimBox ou /ArtBox posé sur un nœud /Pages parent ; 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 90 et /Rotate 270 dans 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, WideTextOutBoxEx et TextOutWithFallback est 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 90 et /Rotate 270 tourné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 180 sont 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 /Rotate hé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 /Rotate ou une /CropBox hérités de l’arbre des pages

Version 2.766.15

Fixed

  • HPDFTokenizeContentStreamAppend peut 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 90 ou /Rotate 270 sont 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 TJ respectent 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 /MediaBox ne 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 avec ShowMetafile à 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, RtLTextOut et ExtTextOut couvrent 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

  • TextWidth mesure 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é
  • TextWidth et GetWideTextWidth renvoient 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é NotEmbeddedFonts lisait un champ d’un autre type, et l’export natif d’images utilisait une propriété Clipped que TfrxPictureView n’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 (TDBGridHotPDFExport et DBGridHotPDFExportToFile/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

  • GetLoadedPDFVersionString renvoie désormais %PDF-1.7 et analogues sur les systèmes dont la locale écrit une virgule décimale ; il y renvoyait %PDF-1,7
  • Le champ pdfVersion de GetLoadedDocumentReport est corrigé de la même façon

Version 2.766.2

Fixed

  • L’import HTML (RenderHTML et RenderHTML5) produit la même page à n’importe quelle THotPDF.Resolution. Les longueurs CSS et les Margin, BaseFontSize, ListIndent et BlockSpacing de 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 ApplyXFAAsAcroForm ou FlattenLoadedXFA gardent les positions, tailles et tailles de police du gabarit à n’importe quelle THotPDF.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.UserWidth et THPDFPage.UserHeight renvoient la taille de page dans les unités avec lesquelles vous dessinez, 1/Resolution de pouce, si bien que le code de mise en page peut la comparer aux coordonnées, marges et TextWidth à n’importe quelle THotPDF.Resolution. Width et Height renvoient toujours des points, et le code existant lit les mêmes valeurs qu’avant

Fixed

  • Avec THotPDF.Resolution ré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
  • THPDFTable ne 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 TextOut puis utilisait TextBox ou TextOutBoxEx dans 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

  • GetWideTextWidth inclut désormais l’espacement des caractères et l’espacement des mots avec lesquels le texte est dessiné, comme TextWidth le fait. Le texte Unicode avec retour à la ligne et centré, avec espacement réglé, était mesuré trop étroit
  • TextOutHTML montre désormais l’espacement des mots réglé avec SetWordSpacing : il place chaque segment à sa largeur mesurée, ce qui laissait l’espacement de côté. Les word-spacing et letter-spacing CSS de l’import HTML passent par la même mise en page

Version 2.765.45

Fixed

  • SetWordSpacing fonctionne 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 que FontEmbedding é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> dans TextOutHTML
  • 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 PrintHyperlink gardent 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

  • TextOutOutline dessine désormais les contours de glyphes à la taille de police à toute Resolution. Avec une Resolution autre 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 (Lossless avec LossyLevel = 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 = 5 avec RemoveIsolatedBlackPixels) 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 SaveLoadedPagesAsImages avec 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, GetWideTextWidth et GetWideCharAdvances répondent désormais dans les unités de page de la Resolution, les unités où le texte est dessiné. Avec une Resolution autre 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 Resolution autre que 72, le texte dessiné avec TextOut commence 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, TextOutBoxEx et WideTextOutBoxEx centrent 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 de TextOutHTML ne se chevauchent plus
  • Un segment de fallback de police dans WideTextOutBoxEx garde la taille de police à toute Resolution au lieu de rétrécir
  • La sortie à Resolution 72 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 found sur 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 ShowMetafile se pose désormais à la hauteur où Windows le dessine. Le texte aligné en haut, le comportement par défaut de TCanvas.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

  • ShowMetafile avec 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 naturelle
  • ShowMetafile sans position reste inchangé

Version 2.765.25

Fixed

  • Les dessins AngleArc dans les métafichiers EMF affichés avec ShowMetafile dessinent 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 AutoShapeArabic activé, TextOut et UnicodeTextOut joignent désormais les lettres arabes, persanes et ourdoues dans leurs formes initiale, médiane et finale et leurs ligatures, comme RtLTextOut le faisait déjà. Chaque lettre était montrée dans sa forme isolée
  • Il en va de même pour AutoShapeSyriac, AutoShapeNko, AutoShapeAdlam, AutoShapeHanifiRohingya et le réordonnancement des points hébraïques (sfHebrewReorder dans ShapingFeatures)
  • 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 Resolution autres que 72. Ellipse, Circle, Arc, DrawArc, Pie, DrawPie, Chord et ArcTo é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 Pie ou DrawPie sont 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 ShowMetafile se 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

  • DrawArc et DrawPie dessinent 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 Windows Arc et Pie. Ils dessinaient l’autre partie, si bien qu’un quart d’arc sortait en trois quarts
  • Les parts de camembert, segments et arcs ArcTo dans les métafichiers EMF affichés avec ShowMetafile correspondent 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, Chord et ArcTo à base d’angles restent inchangées

Version 2.765.19

Fixed

  • Les rectangles tournés dessinés avec RectangleRotate sont désormais des formes fermées, comme ceux dessinés avec Rectangle. 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 InsertLoadedBlankPage emportent 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 THPDFTable sont 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 (GetWideTextWidth et 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 quand AutoFormAppearances est 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, Showcase et ViewerPref produisent à 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 et SetLoadedDocumentInfo avec la famille SetLoadedTitle) 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
  • SetLoadedPageLabel conserve 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éter
  • SetLoadedPageLabel ne 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, AddNamedDestinationLink et 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

  • AddGoToLink peut 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

  • SetLoadedOutlineOpen ouvre et ferme désormais les signets des documents chargés ; auparavant, il écrivait une clé que les viewers ignorent et le signet gardait son état
  • AddLoadedOutline, SetLoadedOutlineURI et SetLoadedOutlineDestination agissent 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 à AddLoadedOutline et SetLoadedOutlineTitle sont 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 Opened sur 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

  • HPDFTokenizeContentStreamAppend tokenise 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

  • SetStructureClassMapEntry peut 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 /ClassMap restantes 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 /ClassMap s’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

  • RemoveUnusedLoadedPageResources n’écrit plus dans une table de ressources après l’avoir supprimée, quand la table de ressources /Font, /XObject ou autre d’une page est écrite directement dans /Resources et 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, via LoadFromFile ou BeginIncrementalUpdate, 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 AddPubSecKeyMaterial utilisent 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 champs AddLoaded*, EnsureLoadedFieldAppearanceStream ou FlattenFormFields, détiennent désormais leur propre référence à la police /DR de l’AcroForm au lieu de partager l’entrée /DR
  • Remplacer ou supprimer le dictionnaire /DR de 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 /DR devient un objet indirect dès la première utilisation par une apparence, si bien que l’apparence du champ et /DR désignent le même objet police dans le fichier enregistré

Version 2.764.1

Fixed

  • Appeler ProcessObjectStreamsForDecompression après LoadFromFile ne 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 pour ExtractObjectFromStream
  • 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, ScanAndLoadReferencedObjects et ForceLoadMissingReferencedObjects ne 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 : BeginDoc après EndDoc démarre un nouveau document indépendant au lieu de lever une exception
  • EndDoc abandonne 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 le BeginDoc suivant libère ses pages et ses objets, si bien que rien de tout cela ne se retrouve dans le fichier suivant ; avec ReproducibleOutput activé, 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 EndDoc et le BeginDoc suivant, comme AddPDFAOutputIntent ou les scripts ajoutés via Names, appartiennent au document suivant et ne sont plus effacés par BeginDoc
  • Les réglages de propriétés tels que FileName, Compression, PDFACompliance, Author et Title, 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 EndDoc jusqu’au BeginDoc suivant, si bien que ValidatePDFUA2Structure, CurrentPageNumber, PagesCount et 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é, BeginDoc lève une exception lorsque ActivateProtection reste 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 BeginDoc sur une instance de THotPDF qui 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 LoadFromFile puis 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 /EF contenant 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).txt et conserve son nom de fichier d’origine
  • Les modifications de AddLoadedDocumentJavaScript et de AddLoadedNamedDestination sont 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
  • AddLoadedDocumentJavaScript stocke une action JavaScript comme valeur de l’arbre de noms au lieu d’un simple flux de script, et AddLoadedNamedDestination écrit l’opérande de zoom de sa destination /XYZ
  • RemoveLoadedJavaScript et RemoveLoadedJavaScriptAll retirent 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é
  • SetDocumentAttachmentMetadata renomme 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 ; sans AutoFormAppearances, la police était absente, si bien que les lecteurs qui construisent les apparences des champs n’avaient aucune police pour le faire
  • AddLoadedComboBox cré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 /NeedAppearances comme booléen true au 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 /DA mentionnent
  • AddLoadedTextField, AddLoadedCheckBox, AddLoadedComboBox, AddLoadedListBox et AddLoadedPushButton donnent 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, ResetLoadedFormField et 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 AutoFormAppearances que pour les champs chargés redessinés ou aplatis
  • AnalyzeLoadedSignatureRevisions classe 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
  • icAutoMono et AddMonochromeImageAuto gardent 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 /K vaut 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 DeviceGray et les JPEG CMYK en DeviceCMYK, 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 /Decode inversé 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
  • StampLoadedPageImage applique le même espace colorimétrique quand un JPEG est tamponné sur une page chargée
  • Les noms de fichiers tels que PHOTO.JPG ou scan.jpeg se chargent désormais comme JPEG quel que soit le type de compression ; la surcharge fichier de AddImage reconnaît les données JPEG à leur signature au lieu d’une extension .jpg sensible à la casse et ne tente plus de lire ces fichiers comme des bitmaps

Version 2.761.0

Added

  • La nouvelle méthode AddLoadedSignedSignatureField ajoute à 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, PreparePDFForSigning et InsertSignatureHex viennent remplir ; après BeginIncrementalUpdate et SaveIncrementalUpdate, 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 BeginIncrementalUpdate dé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, DrawPDF417 et DrawAztec restaurent 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 à CryptKeyLength fait 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 ; avec StrictVersionLock actif, 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 prPrint et prPrint12bit correspondent 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 /Contents entiè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 /Contents de 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 AttachSignatureFieldAppearance donne à 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 /DecodeParms sous 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

  • DirectDrawBarcode et les fonctions de code-barres Simple* 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 hauteur
  • DirectDrawBarcode met 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 Checksum activé, 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 Checksum activé 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 DrawQRCode ou construits avec THPDFQRCode se 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.com n’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 THPDFQRCode ne mélange plus le symbole précédent au nouveau
  • Encode renvoie False quand 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

  • HPDFQRFunctionMap et HPDFQRExtractDataWords exposent 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 TJ en 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 /DW2 des 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 /W2 qui 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

  • THPDFQCStatementInfo gagne HasPSD2Statement, PSD2RolesOfPSP, PSD2NCAName et PSD2NCAId ; le descripteur au niveau CMS porte les mêmes champs
  • HPDFParsePSD2QcStatement analyse une déclaration PSD2 déjà détenue sous forme DER et rejette toute entrée malformée

Deprecated

  • PSD2RolesPayer et PSD2RolesPayee restent 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 ; utilisez PSD2RolesOfPSP

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 Tc non 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 /DW2 des 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 /W2 qui 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

  • SetLoadedFormFieldExportValue emprunte 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 /Size bien 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 1a2a3a choisissait 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 et size, 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.5 et 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-win32 et x86_64-win64 via 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 : AddImageFromFile accepte désormais les fichiers .webp via 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 /Rotate de 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 /NeedAppearances classique des formulaires imprimés depuis un navigateur), donc la valeur saisie survit dans le contenu de la page
  • Les annotations markup sans /AP reçoivent une apparence synthétisée à partir de leurs propres propriétés — texte FreeText et Stamp avec style /DA et justification /Q, formes Square et Circle avec couleur /C / /IC et épaisseur /BS, traits Line et Ink, et markup quad Highlight / Underline / StrikeOut / Squiggly respectant /QuadPoints et 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 rowspan et colspan revendiquent 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

  • SubsetLoadedFonts effectue 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

  • DownsampleLoadedImages redimensionne 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 /Decode et 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 via TJpeg2000Bitmap.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

  • ReplaceLoadedPageText remplace désormais les correspondances s'étendant sur des items de chaînes et tableaux TJ via 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 SyntheticBase de 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, ApplyArabicGSUBContextualRefinement et 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.DrawAztec et l'unité autonome THPDFAztec : 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.ExtractLoadedPageText et 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 Ceil uniformé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, SaveLoadedPagesToTiffBanded et SaveLoadedPagesToTiffStreamBanded, 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 ; THPDFBandImageExportInfo remonte 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.SaveLoadedDocument et SaveLoadedDocumentToStream valident désormais le OutputIntent GTS_PDFA1 (hérité du catalog source ou fraîchement enregistré) et émettent l'identification XMP pdfaid:part / pdfaid:conformance quand PDFACompliance est 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 /W2 et /DW2 des 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.RenderLoadedPageTilesParallel et THotPDF.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ête signatures/signHash pour un lot ordonné de même algorithme, tout en imposant les limites multisign locales 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, HPDFParsePFXByLocalKeyID et THPDFCMSSignOptions.PFXLocalKeyID, avec attributs de bag localKeyId et friendlyName strictement 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 keyLength propre 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.NavigateUri conforme à la spécification pour les Canvas XPS et OpenXPS, pour que les visuels descendants Path, Glyphs et Canvas imbriqués reçoivent l'URI scopée sauf s'ils la surchargent, en préservant les actions LinkTarget externes, 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 Opacity et Canvas.OpacityMask solides, 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.Clip XPS et OpenXPS pour la géométrie abrégée, les valeurs PathGeometry StaticResource locales 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é EvenOdd ou NonZero via PDF W* ou W, 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 Path et Glyphs transformés, qui préserve les liens HTTP, HTTPS et mail en annotations URI PDF et résout les pages relatives au package plus les fragments LinkTarget percent-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 VisualBrush XPS et OpenXPS pour les visuels Canvas, Path et Glyphs inline ou adossés à des ressources, recherche hiérarchique et distante dans les ResourceDictionary, Viewbox absolu, Viewport absolu ou relatif, modes de tuile None, Tile et 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 ToUnicode borné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 Indices de Glyphs OpenXPS 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 des BidiLevel impairs, remplissages solides par attribut ou élément de propriété, opacité, batching PDF TJ natif, 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.OpacityMask OpenXPS pour les masques solides, gradients linéaires multi-stops à alpha variable et radiaux elliptiques, et ImageBrush PNG 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éutilisable RegisterLuminositySoftMaskState avec binding de ressources d'images alpha

Version 2.689.0

Added

  • Modes Tile, FlipX, FlipY et FlipXY d'ImageBrush OpenXPS 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ée RegisterImageTilingPattern pour des patterns adossés à des images réutilisables

Version 2.688.0

Added

  • Support d'ImageBrush.Transform OpenXPS 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 de Path et 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 ; RelativeTransform non 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.ShowImageMatrix et import XPS fixed-page étendu avec remplissages ImageBrush JPEG, PNG, TIFF et JPEG XR de package, mapping Viewbox et Viewport absolu 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 RadialGradientBrush par é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, brainpoolP384r1 et brainpoolP512r1, 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 HPDFInterpretContentTokensDevice et l'extension optionnelle complète IHPDFContentOperatorDevice, 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 publiques OperatorCount, une compatibilité semantic-device préservée, une sémantique corrigée des opérateurs ", v et y, et une gestion légale du terminateur EI sans faux diagnostics de fallback

Version 2.680.0

Added

  • Overloads transactionnelles bornées de RepairPDFA4 avec 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 ConfigureCryptFilterDefaults et SetStreamCryptFilter, avec filtres réservés password et clé publique, /Identity, pipelines /EFF de sécurité par mot de passe et /Crypt en 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 BeginIncrementalUpdate consciente 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 /Encrypt hé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-identifier PAdES 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 SignerInfo primaires indépendants via HPDFCMSBuildMultiSignedData et HPDFCMSMergeSignedData, 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 SubjectKeyIdentifier optionnelles via THPDFCMSSignOptions.SignerIdentifier, avec encodage SID IMPLICIT compact, sélection automatique des versions SignerInfo et SignedData, 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 le CMSAlgorithmProtection RFC 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.ValidatePDFMACChain avec 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 du KDFSalt, rejet des rétrogradations de force d'empreinte, vérifications authentifiées de /P et /Perms, reporting preflight et parsing de révisions borné sans copies PDF temporaires

Version 2.666.0

Added

  • THotPDF.SignPDFWithPFXAndAttachedPDFMAC et validation attachée à la signature avec AuthCode direct du trailer actif, SigObjRef indirect, 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.RegisterNChannelColorSpace corrigé pour émettre la forme DeviceN à cinq éléments de l'ISO 32000-2 avec /Subtype /NChannel et 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 /NChannel legacy

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 MacData externe 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 : render rastérise chaque page sélectionnée en <prefix>-page<N>.png via le pipeline bitmap des pages chargées (plage --pages, --dpi 10..2400, 150 par défaut), tables extrait les tableaux typés en CSV ou JSON via ExportLoadedTypedTables (--json, -o fichier ou console) et compare affiche le rapport de comparaison JSON de deux documents via HPDFDocCompareDocuments (--mode 0..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 avec cmsFLAGS_NOOPTIMIZE sur 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 gvar partagés et privés, interpolation IUP, mises à jour de contours simples et composites, métriques de phantom points, baking HVAR, VVAR et MVAR, 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 /Count et 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 /Contents des 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, CIDToGIDMap et mappings descendants qu'une seule fois tant qu'elle est retenue