Journal des modifications
Historique des versions
« Retour à l’index de la documentation
Historique des versions de la bibliothèque PDF Library for Delphi. Les entrées sont listées de la plus récente à la plus ancienne ; chaque version suit le versionnage sémantique conformément à la politique de publication du projet.
Dernière version publiée
- Dernière version: v3.555.0; Date de publication: 2026-10-10
Version 3.555.0
Ajouté
- Windows 11 on ARM prend en charge les builds de sources natifs Free Pascal ARM64 et Delphi ARM64EC, avec des sorties de build distinctes pour la bibliothèque et la DLL
Modifié
- Windows ARM utilise les fournisseurs système AES CBC/GCM et JPEG, une compression portable et une bibliothèque partagée OpenJPEG adaptée à l’architecture pour le JPEG 2000
- La DLL Windows ARM expose des exports C ABI nommés et des handles d’instance opaques positifs sans tronquer les pointeurs 64 bits
Corrigé
- Le XMP de Delphi ARM64EC utilise des interfaces MSXML conscientes des espaces de noms avec une analyse XML bornée pour éviter les échecs lors des appels OLE à liaison tardive
Version 3.554.0
Ajouté
- La prise en charge headless native s’étend à Linux ARM64 et macOS x64, avec des builds FPC adaptés à chaque architecture et des dylibs Delphi pour macOS Intel
- Les outils de vérification natifs prennent en charge Linux et macOS en x64 comme en ARM64
Corrigé
- macOS Intel sélectionne les bons emplacements de fournisseurs natifs OpenSSL, Cairo, Fontconfig et OpenJPEG au lieu des chemins prévus pour Apple silicon
- L’édition de liens Delphi pour macOS Intel résout les bibliothèques système et frameworks référencés par chemin absolu par rapport au cache du SDK Windows sélectionné avec LLVM LLD
Version 3.553.1
Ajouté
- Delphi macOS ARM64 prend en charge l’édition native des métadonnées XMP et les allers-retours, y compris les propriétés personnalisées, les identifiants de normes et la préservation des espaces de noms sans rapport
Corrigé
- La signature PFX native Delphi macOS et les horodatages RFC 3161 sélectionnent le fournisseur OpenSSL macOS ; les signatures PDF RSA et EC, les chaînes de confiance explicites, les horodatages de signature et les horodatages de document sont vérifiés en ARM64
- Les cycles natifs de chargement et d’enregistrement XMP préservent une seule enveloppe de paquet au lieu d’accumuler des instructions de traitement
Version 3.553.0
Ajouté
- Delphi peut désormais builder la bibliothèque dynamique headless macOS ARM64, avec les mêmes 880 points d’entrée C que le build Free Pascal natif
- Le backend Delphi macOS utilise les polices natives, le rendu Cairo, le chiffrement et les condensats OpenSSL, zlib et libcurl système, OpenJPEG, ainsi que l’encodage et le décodage JPEG via ImageIO
Corrigé
- L’accès aux fichiers macOS, la recherche de ressources, les structures binaires à largeur fixe et les bindings des codecs natifs utilisent désormais des déclarations correctes pour la plateforme
- Le rendu en arrière-plan utilise un événement de pause portable sur macOS
- Delphi macOS déchiffre correctement les chaînes PDF chiffrées et les flux d’objets sans libérer leurs tampons d’entrée pendant le décodage
Version 3.552.2
Corrigé
- Compatibilité rétablie avec les compilateurs Delphi plus anciens pour la validation de factures et les fournisseurs OCR, y compris les builds de bibliothèque d’essai Win32 et Win64
Version 3.552.1
Corrigé
- Les tampons de la bibliothèque dynamique macOS exposent désormais leurs données réelles, préservent les octets zéro incorporés et signalent correctement les libérations réussies
- Les handles d’instance de la bibliothèque dynamique restent valides sur les cibles 64 bits, sans tronquer les adresses d’objets ni réutiliser des handles libérés
- Le déchargement de la bibliothèque libère les instances et les tampons en cours d’utilisation
Version 3.552.0
Ajouté
- Génération de PDF headless, chargement, workflows de texte et rendu bitmap Cairo en Free Pascal natif sur Linux x86_64 et macOS arm64, avec les polices système et des fournisseurs natifs PNG, JPEG et JPEG 2000
- Chiffrement OpenSSL natif, condensats, signature PKCS12 et vérification CMS, avec des ancrages de confiance de certificats explicites et des durées de vérification contrôlées
- Accès par plages HTTP via le libcurl intégré et workflows d’horodatage RFC 3161 sur les cibles Free Pascal natives, y compris les attributs d’horodatage de signature et la vérification de l’horodatage de document
- L’analyse et l’écriture natives des métadonnées XMP préservent les propriétés fondées sur les espaces de noms et rejettent les DTD et le XML surdimensionné ou profondément imbriqué avant la construction du DOM
Corrigé
- Le rendu bitmap natif par bandes initialise la transformation de page et conserve l’anticrénelage Cairo aux limites de bandes
- Les déclarations partagées d’horodatage, de validation et de balisage ne requièrent plus un build PDFium optionnel
Version 3.551.0
Ajouté
- Le remplacement exact de contenu Unicode préserve les caractères environnants, l’espacement TJ existant et les ancres du texte qui suit, prend en charge la suppression et des polices de remplacement vérifiées, et signale les mappages non pris en charge avant de remplacer le texte des pages sélectionnées
- L’extraction structurée suit l’ordre de lecture balisé, résout les rôles sémantiques et les espaces de noms, détecte les colonnes et les habillages de page, et conserve les cellules de tableau vides, fusionnées et à cheval sur plusieurs pages dans les exports JSON, CSV, Markdown et DOCX
- Les adaptateurs OCR Tesseract optionnels prennent en charge les résultats hOCR et TSV, la confiance d’orientation et les lignes de base, avec des limites explicites et des diagnostics par étape
- Les calques de texte OCR peuvent ignorer le texte existant ou ne remplacer que les calques précédemment détenus par la bibliothèque, en préservant les pixels de la page et le contenu partagé
- Les nouveaux contrôles Delphi, DLL et ActiveX exposent les options d’analyse structurée, la configuration OCR et les diagnostics de remplacement exact
Modifié
- Le JSON structuré utilise la version 2 du schéma, avec des identifiants de nœuds sémantiques stables, les sources d’ordre de lecture, les étendues de tableaux et la confiance d’inférence
- Le remplacement Unicode rejette les mappages incomplets, les clusters de glyphes partiels et les sources non prises en charge sans deviner les octets des polices
Corrigé
- L’espacement numérique TJ applique désormais la mise à l’échelle horizontale une seule fois, dans le rendu comme dans la géométrie du texte
- La mesure des polices resélectionne la ressource réelle lorsque les collections sont partagées et réutilise l’analyse de police directe dans chaque portée de ressource
- Les empreintes de contenu conservent leurs valeurs de hachage avec les contrôles de plage et de débordement activés
Version 3.550.0
Modifié
- L’export SVG préserve désormais l’ordre de peinture de la page, le contenu de Form imbriqué, les chemins de découpe exacts et la géométrie de trait transformée
Ajouté
- Un repli raster natif borné gère les opérations de peinture non prises en charge lorsque les paramètres d’export autorisent une capture d’arrière-plan
- GetLastSVGExportDiagnostics signale les pixels omis, les approximations et le repli raster, y compris les apparences d’annotations visibles hors de l’export du contenu de page
Version 3.549.0
Ajouté
- Le schéma XML de factures versionné et la validation Schematron acceptent des fournisseurs optionnels et renvoient l’avancement des étapes, les identifiants de règles, les chemins de champs, la sévérité et les diagnostics du moteur
- La validation métier des factures incorporées lit la pièce jointe sélectionnée avec un décodage borné et rejette les noms de fichiers manquants ou ambigus
- Delphi, DLL et ActiveX peuvent exécuter la validation xmllint et SaxonJ avec des fichiers de règles explicites, des limites de temps et de sortie
Version 3.548.0
Ajouté
- Les contrôles de lecteur PDF/UA-2 valident l’identification, la version PDF, les références d’espaces de noms, les mappages de rôles, les racines de document et les parents de structure, via une sélection de profil explicite ou automatique
- Les API Delphi, DLL et ActiveX sélectionnent une cible PDF/UA dans un pipeline de validation réutilisable et exposent une couverture de validation contrôlée, non vérifiée et bornée
Modifié
- Les rapports de validation et de préflight identifient PDF/UA-2 indépendamment de PDF/UA-1 et indiquent que la réussite des contrôles implémentés ne constitue pas une certification d’accessibilité complète
Version 3.547.0
Ajouté
- Comparaison visuelle des pages rendues avec tolérance par canal, régions ignorées, zones modifiées, comptages de pixels, masques de différence et superpositions
- La comparaison visuelle de documents aligne les images de pages identiques autour des pages insérées et supprimées, et signale les paires de pages modifiées ou redimensionnées
- La comparaison visuelle de fichiers via Delphi, DLL et ActiveX renvoie un rapport JSON structuré
Version 3.546.0
Ajouté
- Les rapports de couverture de validation Arlington distinguent les réussites complètes, les échecs connus, la prise en charge partielle des règles et les erreurs d’opération via les API Delphi, DLL et ActiveX
Corrigé
- Les expressions de modèle non prises en charge produisent désormais des diagnostics explicites au lieu de contribuer silencieusement à un résultat de validation réussi
Version 3.545.0
Ajouté
- Les exemples DLL WorkflowWorkbench en C# et VB.NET illustrent la génération de rapports multipages, l’extraction de texte, la découpe et la fusion de pages, les transferts mémoire binaires et la possession explicite des ressources natives
- DocumentInspectionWorkbench fournit désormais des inventaires de pages et des seuils de sévérité de diagnostic configurables sous Delphi, C++Builder et Lazarus, avec des entrées générées pour une première exécution autonome
Modifié
- LinkDemo, l’exemple DLL C++, crée désormais un document de navigation complet avec liens de page et signets, accepte des chemins de DLL et de sortie explicites, vérifie le document enregistré et signale les échecs via les codes de sortie du processus
- WorkflowGallery vérifie son document enregistré et le corps de la réponse HTTP par des contrôles aller-retour, et publie un rapport de vérification
- La visite guidée de DocumentLab inclut l’inspection de documents, et les introductions des portfolios natifs et du package renvoient vers un catalogue dédié des workflows DLL
Corrigé
- L’inspection de documents Delphi initialise les compteurs par fichier avant l’analyse, y compris les rapports pour les entrées qui ne peuvent pas être chargées ; Delphi et C++Builder écrivent des nombres JSON indépendants de la locale
- L’exemple de diagnostic DLL C++ libère les instances natives avant de décharger la bibliothèque, y compris sur son chemin de réussite
Version 3.544.0
Ajouté
- Neuf labs métier natifs proposent une sélection de scénarios, des visites guidées, des journaux par scénario et des expériences HTML hors ligne qui s’ouvrent automatiquement quand le lab démarre sans arguments
Modifié
- Les portfolios d’exemples Delphi, C++Builder et Lazarus se concentrent désormais sur Showcase, HelloWorld et neuf labs, Delphi conservant son Reader interactif
- Les démonstrations spécialisées et les tutoriels ciblés sont intégrés comme modules de scénarios locaux dans chaque lab, en préservant leurs opérations d’origine sans projets d’exemple séparés ni répertoire source de démo commun
- Les visites des labs exécutent leurs propres scénarios avec des dossiers de sortie isolés et des timeouts, et ne dépendent donc plus d’exécutables d’exemples voisins compilés séparément
- Les notes des scénarios sont liées depuis les guides métier, et les intégrations optionnelles du framework de rapports Delphi sont regroupées sous ContentLab
- Les matrices de codecs de scan Lazarus marquent comme ignorés les chemins d’encodage qui ne peuvent pas terminer le fixture généré, et ne publient les mesures JBIG2 que lorsque l’encodeur externe demandé est disponible
Corrigé
- Les scénarios de caviardage génèrent désormais des documents PDF 1.7 afin que la suppression de contenu passe les contrôles de version requis
- Les scénarios de capture de page préservent une page de document temporaire pendant la capture de la dernière page de contenu, ce qui évite les captures en échec sur les documents d’une seule page
- La galerie de codes-barres C++Builder accepte désormais les handles de document et de page non nuls obtenus avec succès au lieu de rejeter les handles dont la valeur est supérieure à un
- Le scénario de navigation Lazarus signale désormais les écritures PDF en échec avant de publier les rapports de succès, y compris pour son document compagnon à cible distante
Version 3.543.0
Modifié
- Le portfolio de démos natif met désormais en avant les visites phares et les workbenches de fonctionnalités, les tutoriels d’API ciblés étant regroupés dans le dossier Miscellaneous de chaque plateforme
Supprimé
- Suppression de l’adaptation de métadonnées du Reader C++Builder, de l’exécutable ReportBridges limité aux prérequis, de l’exemple Lazarus TextExtract en doublon et de l’entrée Delphi AddWebLinkConsole redondante ; utilisez plutôt les exemples réels de visionneuse, de pont de rapports, d’inspection, d’extraction et AddWebLink
Corrigé
- LoggerDemo C++Builder ferme désormais son journal avant de lire le journal de session complet et l’affiche en UTF-8, ce qui évite les erreurs de partage de fichiers et les plantages console sur les longs journaux après la création PDF
Version 3.542.0
Modifié
- Showcase et AdvancedWorkflowMatrix contiennent désormais leurs unités d’implémentation dans chaque dossier d’exemple Delphi, C++Builder et Lazarus, si bien que copier un projet ne requiert plus de répertoire d’unités de démo commun
- Le guide source de Showcase pointe vers son générateur local tout en conservant le document de neuf pages, les formulaires modifiables, les calques commutables et les exports hors ligne
Corrigé
- La suite de workflows C++Builder écrit la liste complète des workflows et le rapport console avant de se terminer
Version 3.541.0
Ajouté
- Le Showcase de neuf pages inclut un brief de projet modifiable et un plan d’étage en calques, avec des valeurs de formulaires enregistrées et des notes de conception optionnelles
- C++Builder inclut désormais le même Showcase phare que Delphi et Lazarus
- Les exécutions console de Showcase créent une page d’expérience hors ligne avec des aperçus PNG pleine page, le PDF interactif et des exports de texte UTF-8
Modifié
- Le Showcase Delphi s’ouvre sur un aperçu guidé, une édition directe des formulaires, un contrôle de visibilité des notes de conception, l’enregistrement du PDF modifié et des actions d’export d’images et de texte
- Les trois entrées natives de Showcase partagent leur générateur de document et leur implémentation d’export hors ligne
Corrigé
- Les sections de tableaux du Showcase, les exemples d’annotations et les symboles de codes-barres tiennent dans leurs zones prévues, et les libellés de page restent lisibles
- Le Showcase Delphi écrit dans un répertoire de sortie appartenant à l’utilisateur et traite explicitement les échecs d’aperçu, d’export et d’enregistrement
Version 3.540.0
Modifié
- AdvancedWorkflowMatrix partage un lanceur de workflows unique entre Delphi, C++Builder et Lazarus, exécute les démos spécialisées avec des sorties isolées, prend en charge la sélection et les timeouts, et consigne les binaires manquants et les échecs enfants dans des rapports CSV et HTML
- TextExtract et ExtractText Lazarus partagent une session d’extraction unique en lecture seule, acceptent les mots de passe, écrivent une sortie UTF-8 et conservent l’entrée console minimale et la comparaison des modes d’extraction
- HelloWorld ActiveX C# est un point de départ ciblé créer-et-enregistrer, avec une option de sortie headless, un nettoyage COM explicite et des diagnostics de déploiement clairs
Corrigé
- Table2PDF C# évite une page blanche supplémentaire, utilise les IDs de police renvoyés et localise la DLL selon l’architecture de son processus
- Le starter DLL Visual Basic inclut le binding natif dont il a besoin pour se compiler et gère le chargement de la DLL propre à l’architecture
- Le guide du moteur de rapports C++Builder signale l’intégration manquante et ne présente plus un PDF d’espace réservé comme un vrai résultat de pont
- Le Reader C++Builder échoue explicitement pour un PDF fourni illisible au lieu de le remplacer par son exemple généré
Version 3.539.53
Corrigé
- La démo TextPaging s'arrête avec une erreur quand les polices requises ne peuvent pas être chargées ou quand sa limite de pages laisse du texte non affiché, ce qui évite qu'un PDF partiel soit enregistré puis ouvert comme un résultat réussi
Version 3.539.52
Corrigé
- La démo console ActionNavigationMatrix vérifie l'écriture du PDF principal et du PDF compagnon ainsi que l'export FDF avant de signaler le succès, et s'arrête avec un code de sortie non nul quand une opération de sortie échoue
Version 3.539.51
Corrigé
- Les recherches dans les arbres de noms et les arbres numériques ignorent les bornes inversées au lieu de masquer des entrées filles valides dans les PDF mal formés
Version 3.539.50
Corrigé
- Le tri d'entiers couvre toute la plage signée sans que sa comparaison déborde
- Les listes triées vides d'entiers et de positions de fichier renvoient zéro pour les requêtes de successeur ; l'appartenance à un ensemble d'entiers creux évite d'allouer chaque plage intermédiaire tout en conservant l'ordre d'insertion et les entrées dupliquées
Version 3.539.49
Corrigé
- L'import PNG rejette les chunks tronqués, les en-têtes et palettes mal formés, les valeurs d'entrelacement non prises en charge et les chunks de fin absents ou mal formés avant de considérer l'image comme exploitable
- Recharger un PNG efface les données d'image et les métadonnées précédentes tout en conservant les options du lecteur ; les lectures de métadonnées seules sautent les données utiles de l'image sans allouer leurs buffers
Version 3.539.48
Corrigé
- Les flux de fichiers respectent la longueur demandée lors d'un redimensionnement, et les noms de fichiers longs sont développés en chemins absolus complets
- L'insertion dans un flux préserve les longueurs et curseurs 64 bits, rejette les points d'insertion situés hors du flux avant de modifier les données, et signale les lectures ou écritures incomplètes
- Les noms de fichiers à numéro de page insèrent le numéro avant l'extension, en préservant les noms de répertoires et en gérant aussi les noms sans extension
Version 3.539.47
Corrigé
- Le rendu et la continuation du texte HTML préservent les chevrons échappés et l'orthographe littérale des entités au lieu d'interpréter une seconde fois le texte décodé
- Les spans et blocs de code Markdown préservent les esperluettes et l'orthographe des entités dans le HTML généré et le PDF rendu ; les exports de datasets conservent le même texte littéral dans les valeurs de cellules
Version 3.539.46
Corrigé
- La démo Delphi ExtractImage ignore les images non sélectionnables, compte les écritures réussies et signale l'extraction incomplète au lieu d'afficher un message de succès inconditionnel
- ExtractImage crée le répertoire de sortie et ne retire que l'extension du fichier d'entrée pour nommer les images extraites ; ExtractAnnotAttach s'arrête quand le chargement renvoie un résultat autre que le succès
Version 3.539.45
Corrigé
- Les requêtes sur les arbres de noms et les arbres numériques ignorent les nœuds filles cycliques ou répétés, poursuivent avec les frères valides et gèrent les arbres profondément imbriqués sans faire déborder la pile d'appels
- L'énumération des arbres de noms ignore les clés de noms invalides, et la recherche et la suppression conservent l'offset complet de l'entrée dans les feuilles comptant plus de 32 768 paires nom/valeur
Version 3.539.44
Corrigé
- Les requêtes de boîtes de page et la capture ignorent les boîtes bleed, trim et art non héritables sur les nœuds parents de l'arbre de pages, et utilisent à la place la boîte de la page feuille ou sa crop box effective
HasPageBoxsignale de façon cohérente avec les tableaux indirects les boîtes media et crop héritées directement
Version 3.539.43
Corrigé
- L'import vectoriel EMF démarre avec le stylo noir et la brosse blanches par défaut, si bien que les enregistrements de dessin sans sélection explicite d'objet restent visibles
- Les polylignes 32 bits et 16 bits préservent les figures indépendantes à l'intérieur des crochets de tracé, et les multi-polylignes 16 bits diffèrent le rendu jusqu'au tracé du chemin et respectent un stylo nul
Version 3.539.42
Corrigé
- CapturePageEx avec l'option de boîte bleed, trim ou art sur une page qui ne définit pas cette boîte capture désormais la crop box, comme documenté, au lieu du media box entier ; la boîte renseignée sur la page suit la même valeur par défaut ISO 32000-1
Version 3.539.41
Corrigé
- L'import EMF trace les enregistrements PolyBezier 32 bits à partir de leur premier point au lieu de l'utiliser comme point de contrôle, de sorte que les courbes correspondent à celles des enregistrements 16 bits
- Les enregistrements Polyline EMF sont tracés comme des lignes ouvertes avec le seul stylo, au lieu de formes fermées et remplies
- Les enregistrements PolylineTo EMF commencent à la position courante et ne sont plus fermés, et un enregistrement dont les deux premiers points sont sur une ligne horizontale ne désactive plus le stylo pour toutes les formes dessinées ensuite
- Les enregistrements PolyPolyline EMF 32 bits tracent chaque polyligne ; les enregistrements comptant plus d'une polyligne étaient auparavant ignorés et une polyligne unique ne dessinait rien
Version 3.539.40
Corrigé
- ImportAnnotationsFromFDFString et ImportAnnotationsFromFDF renvoient le nombre d'annotations réellement ajoutées, comme l'import XFDF ; les entrées ignorées parce que leur page est hors du document ou parce qu'elles n'ont pas de /Subtype ne sont plus comptées
Version 3.539.39
Corrigé
- L'import EMF trace intégralement les enregistrements PolyDraw : les points qui ferment une figure en traçant une ligne ou une courbe ne sont plus abandonnés, de sorte que les formes fermées gardent leur dernier segment et que les courbes suivantes restent synchronisées ; un enregistrement PolyDraw 16 bits comportant plusieurs figures les conserve toutes, et une figure qui ne commence pas par un déplacement démarre à la position courante
- L'import EMF ignore les enregistrements Polyline, PolyBezier, Polygon, PolyDraw ainsi que les PolyPolyline et PolyPolygon 16 bits qui déclarent plus de points qu'ils n'en contiennent, au lieu de lire au-delà de l'enregistrement, ce qui traçait des lignes parasites à partir des enregistrements suivants ou pouvait casser la conversion
Version 3.539.38
Corrigé
- Les régions de demi-teintes JBIG2 dont la grille commence à gauche ou au-dessus de la région, ou dont la grille pivotée place des cellules à coordonnées négatives, se décodent correctement : ces cellules sont rognées au bord de la région au lieu d'être abandonnées ou déplacées, l'origine de la grille n'est plus rabattue sur le coin de la région, et les cellules entièrement à l'extérieur sont ignorées exactement comme le spécifie ITU-T T.88
Version 3.539.37
Corrigé
- Les images JBIG2 comportant une région de demi-teintes qui ignore les cellules de grille hors de la région se décodent désormais correctement quand la grille de demi-teintes n'est pas carrée ; le masque d'ignorance était construit avec lignes et colonnes inversées, si bien que des cellules qui auraient dû être ignorées étaient décodées et le reste de la région sortait corrompu
Version 3.539.36
Corrigé
- Une page déplacée avec MovePage reçoit ses propres copies des boîtes de page, de la rotation et des ressources qu'elle héritait de son ancien nœud Pages, de sorte qu'appeler SetPageBox ou dessiner du texte et des images sur la page déplacée ne modifie plus l'ancien nœud ni les pages qui en héritent toujours
- SetPageBox donne à la page sa propre boîte quand la boîte existante est un objet indirect partagé avec d'autres pages ou avec un nœud Pages, au lieu de redimensionner chaque page qui s'y réfère
- CopyPageRanges ne laisse plus les pages sources copiées partager leurs boîtes de page avec le nœud Pages ni leur CropBox avec leur MediaBox, de sorte que modifier une boîte sur une page source après la copie ne redimensionne plus ses pages sœurs ou les deux boîtes d'un coup
Version 3.539.35
Corrigé
- TransformPageElement écrit la partie échelle et rotation de la matrice dont il enveloppe un tracé ou une image avec six décimales au lieu de quatre ; les petites rotations et les facteurs d'échelle fins ne sont donc plus visiblement décalés sur les grandes pages. La translation conserve quatre décimales
Version 3.539.34
Modifié
- Les éditions de pages qui réécrivent un calque de contenu — ScalePage, TransformPageElement, DeletePageElement, RedactRegion, ConvertTextToPaths et les programmes issus de ParsePageContentLayer et réécrits avec WritePageContentLayer — conservent le texte d'origine de chaque opérande numérique qu'elles ne modifient pas, au lieu d'arrondir tout le calque à quatre décimales
- TPDFContentProgram possède une nouvelle propriété CanonicalNumbers ; définissez-la avant l'analyse pour réécrire chaque nombre sous forme canonique, comme le fait NormalizeContentStreams
Corrigé
- Un nombre non nul inférieur à la précision de sortie, comme un facteur d'échelle de 0.00001, est écrit avec ses chiffres significatifs au lieu de 0 ; la normalisation de contenu, l'optimiseur de contenu à l'enregistrement et les nouveaux objets PDF ne transforment donc plus une transformation minuscule en matrice singulière qui masque le contenu
Version 3.539.33
Corrigé
- RecolorPage et RecolorDocument n'échouent plus avec une erreur de conversion sur les systèmes à virgule décimale lorsqu'une page définit une couleur avec une valeur décimale telle que
0.5 g - DrawSVG, DrawSVGFromFile, GetSVGWidth et GetSVGHeight lisent les longueurs SVG décimales telles que
width="100.5"sur les systèmes à virgule décimale au lieu de revenir aux valeurs par défaut, et ExportPageSVG conserve les couleurs de remplissage et de trait décimales - RenderPageRegionToFile et RenderPageToDCClip acceptent des rectangles de découpe décimaux tels que
10.5,20.5,50.5,40.5quels que soient les paramètres régionaux ; une chaîne de découpe mal formée échoue désormais ou effectue le rendu sans découpe au lieu de lever une exception, et les valeurs superflues ne débordent plus du rectangle - AddPolygonAnnotation, AddPolyLineAnnotation et AddInkAnnotation lisent des coordonnées de sommets décimales quels que soient les paramètres régionaux et rejettent une liste de coordonnées mal formée
- SetOutputIntentMixingHints accepte des valeurs de solidity telles que
0.95sur les systèmes à virgule décimale, et CheckDocumentPolicy compare numériquement des valeurs de caractéristiques décimales telles queDocument.Version >= 1.3
Version 3.539.32
Corrigé
- AddTagAttribute écrit comme nombres PDF les valeurs à décimales point telles que
0.5ou2.5 3.5sur les systèmes à virgule décimale, au lieu d'en faire des noms PDF ; les valeurs écrites avec le séparateur décimal du système restent acceptées - SetStructElemBBox, SetStructElemSpaceBefore, SetStructElemSpaceAfter, SetStructElemStartIndent, SetStructElemEndIndent et SetStructElemColor formatent leurs nombres indépendamment des paramètres régionaux du système et jamais sous forme exponentielle
- Les espaces réservés PDF/VCR créés avec BeginPDFVCRPlaceholder passent la validation GTS_BBox précédant l'enregistrement sur les systèmes à virgule décimale
Version 3.539.31
Corrigé
- GetSimilarImageDeduplicationReportJSON écrit maxAcceptedMeanError comme nombre JSON valide sur les systèmes à virgule décimale au lieu de
0,333333333333333 - GetObjectJSON et ExportObjectJSON écrivent les nombres PDF tels que
-.25,+3ou007.5dans la syntaxe des nombres JSON : la sortie est donc un JSON valide, que SetObjectJSON et ImportObjectJSON acceptent en retour - Les rapports JSON écrivent
nullpour une valeur NaN ou infinie au lieu de+InfouNAN, ou d'échouer avec une exception de virgule flottante : GetDocumentJSON pour les nombres PDF en débordement, GetAnnotationHitsJSON pour les coordonnées non finies, ainsi que les rapports barcode, deskew, texte structuré et PDF/VCR - Le formatage des nombres pour la sortie de contenu PDF, SVG, HTML et CSV écrit 0 pour NaN au lieu de lever une opération de virgule flottante invalide
Version 3.539.30
Corrigé
- ImportAnnotationsFromFDF et ImportAnnotationsFromFDFString créent à nouveau les annotations importées ; auparavant, chaque entrée était comptée mais aucune n'était ajoutée, car la valeur /Subtype n'était jamais lue
- L'importation d'annotations FDF lit /Rect, /Page, /Contents, /T et /Subj quel que soit l'ordre des clés, maintient chaque recherche dans sa propre entrée d'annotation et analyse les nombres indépendamment des paramètres régionaux, y compris les décimales à virgule écrites par les versions antérieures
- ExportAnnotationsToFDF et ExportAnnotationsToFDFString écrivent le /Rect propre à chaque annotation dans l'espace utilisateur PDF, si bien qu'un fichier exporté se réimporte à la même position au lieu de décaler l'annotation
Version 3.539.29
Corrigé
- ExportAnnotationsToXFDF et ExportAnnotationsToXFDFString écrivent les valeurs rect, opacity, width et dashes avec un séparateur décimal à point sur tous les paramètres régionaux, comme l'exige XFDF
- ImportAnnotationsFromXFDF et ImportAnnotationsFromXFDFString lisent un XFDF standard à décimales point sur les systèmes à virgule décimale au lieu d'échouer avec une erreur de conversion, et un nombre mal formé ignore désormais cette valeur au lieu d'interrompre l'importation
- Les fichiers XFDF écrits par les versions antérieures sur des systèmes à virgule décimale, comme
rect="50,500 80,250 70,750 100,125"ouopacity="0,600", s'importent avec les valeurs prévues
Version 3.539.28
Corrigé
- L'optimiseur de flux de contenu ne supprime plus un
1 0 0 1 0 0 Tmqui réinitialise la position du texte après Td, TD, T*, un Tm antérieur ou du texte affiché — une suppression qui décalait les glyphes suivants lorsque les flux de contenu étaient optimisés à l'enregistrement ; un Tm identité placé juste après BT, ou qui répète un Tm identité antérieur, est toujours supprimé
Version 3.539.27
Corrigé
- MovePage, tout comme CollateDocumentsEx lorsqu'il réordonne les pages, conserve le MediaBox, le CropBox et le Rotate qu'une page hérite de son nœud Pages parent, si bien qu'une page déplacée sous un autre parent ne change plus de taille, de cadrage ni d'orientation ; auparavant, seul /Resources était repris
- BalancePageTree conserve, sous forme de référence à l'objet, un /Resources, /MediaBox, /CropBox ou /Rotate hérité qui est un objet indirect, au lieu de le copier dans chaque page
Version 3.539.26
Corrigé
- Le contenu de page écrit par AddPageMatrix, ScalePage, DeskewPage, TransformPageElement, DeletePageElement, RedactRegion et ConvertTextToPaths utilise toujours un séparateur décimal à point et une notation simple ; sur les systèmes dont les paramètres régionaux utilisent la virgule décimale, ces appels ne produisent plus d'opérateurs cassés comme
0,5 0 0 0,5 0 0 cm, et les valeurs très petites ne sont jamais écrites sous forme exponentielle - ExportAnnotationsToFDF et ExportAnnotationsToFDFString écrivent les rectangles d'annotation avec des décimales à point, quels que soient les paramètres régionaux du système
- RecolorPage et RecolorDocument écrivent des opérandes de couleur indépendants des paramètres régionaux pour chaque séparateur décimal, et pas seulement pour la virgule
- AddPageMatrix, ScalePage et RedactRegion rejettent les arguments NaN ou infinis au lieu de les écrire dans la page
Version 3.539.25
Corrigé
- La réparation de l'apparence des champs de formulaire écrit /Type et /Subtype dans le flux d'apparence au lieu de créer de faux états d'apparence /N, les couleurs de bordure CMYK ne sont plus lues au-delà de leurs quatre composantes, et la suppression d'un champ de formulaire ne décode plus mal les nombres de pages via des valeurs /Count indirectes
- La réparation du style des cases à cocher conserve les deux états d'exportation personnalisés lorsqu'il n'existe pas d'état Off, au lieu de les effacer, et les champs enfants des boutons radio enregistrent leur état coché avec le même encodage que celui que les setters de valeur comparent
- Les annotations de pièce jointe sans dictionnaire /EF ne provoquent plus de plantage, l'exportation des annotations sonores cesse d'inverser les octets de l'audio 8 bits, l'opacité des annotations de marquage utilise une échelle cohérente, et SetAnnotRect signale à nouveau le succès
- La reconstruction de l'apparence des annotations ne laisse plus un flux libéré dans la table d'objets de structure lorsque le document n'a pas de callback pour objets indirects
- L'optimiseur peephole ne supprime plus les setters de couleur qu'un autre opérateur de couleur du même côté a rendus obsolètes entre-temps, et continue de fusionner les simples doublons adjacents
- L'extraction de texte honore l'opérateur " comme espacement des mots et des caractères au lieu de corrompre l'interligne, et FindInstructionsInRect ne signale plus de plages chevauchantes pour les tracés à plusieurs sous-chemins
- Importation EMF : PolyDraw lit les indicateurs de type de point au bon décalage, POLYTEXTOUTW lit toujours du texte UTF-16 et n'accumule plus les glyphes entre chaînes, le mappage de glyphes des petits text-out ne remplace plus toute la chaîne par un seul caractère, et les remplissages dégradés ne divisent plus par zéro sur les rectangles dégénérés
- L'importation EMF ramène aux limites de l'enregistrement chaque taille d'en-tête bitmap fournie par le fichier, chaque nombre de rectangles de région, de polygones et chaque index de sommet de dégradé, et cesse de tronquer les pointeurs d'enregistrement à 32 bits sur Win64
- Les zones halftone JBIG2 placent les motifs dans le bon sens de la grille, les tests de skip-mask comparent en virgule fixe, les contextes arithmétiques conservés prennent un instantané des statistiques du décodeur au lieu de planter, les tables de symboles run-length protègent un code de répétition en première position, les lignes de référence MMR s'arrêtent à la valeur sentinelle, les symboles partiellement en dehors de la zone de dessin sont rognés plutôt que décalés, et les comptages mal formés remontent comme des échecs de décodage au lieu d'erreurs d'exécution sans rapport
- Le décodage CCITT initialise les tables de recherche des éléments changeants et gère les demandes de bits inférieures aux bits restants sans décalages négatifs ; l'encodeur CCITT couvre toute la plage du mode vertical et cesse de lire un octet au-delà du tampon de ligne
- Le chargement TIFF vérifie les bornes de chaque lecture d'IFD, empêche les images à palette de se décoder en rampes de gris, écrit StripByteCounts une seule fois et borne les numéros de page demandés ; une recompression JPEG échouée ne signale plus un flux corrompu comme un succès
- La comparaison de documents intègre les données de flux aux empreintes d'objets, rapproche les objets dupliqués un à un, trie les clés de dictionnaire, sépare les éléments de tableau et signale les échecs de comparaison au lieu d'un verdict erroné d'absence de modifications
- Le générateur de noms de rendu parallèle ne lit plus au-delà d'un motif d'un seul caractère
- Plusieurs autres démos ont été réparées : les verdicts de liste de fichiers sont associés au bon fichier, la visionneuse multifonction retente réellement avec le mot de passe saisi, quatre démos ne font plus précéder d'une première page blanche, les démos de fichiers intégrés et d'opérations sur les pages résolvent leurs chemins d'exemple et de sortie à côté de leurs entrées, et les assistants de stratégie d'image vérifient les résultats de bibliothèque sur lesquels ils s'appuient
- Le contrôle ActiveX initialise le résultat de chaque méthode prenant un variant en entrée, afin qu'un variant rejeté ne renvoie plus des résidus de pile
Version 3.539.24
Corrigé
- Le jeton de tampon &T développe désormais le champ Title du document au lieu du champ Author dans les en-têtes, pieds de page et tampons
- Les annotations PrinterMark écrivent le type de marque /PN comme objet nom PDF, comme l'exige ISO 32000-1, au lieu d'une chaîne littérale
- Les requêtes d'index d'enfants des champs de formulaire composites libèrent le champ enfant temporaire au lieu de le laisser en fuite
- Les arbres de pages rééquilibrés héritent de MediaBox, CropBox et Rotate des nœuds ancêtres au lieu des seules Resources
- CreateDate et ModifyDate XMP conservent une forme ISO 8601 valide lorsque la date PDF omet son fuseau horaire, et l'importation XMP sans enveloppe x:xmpmeta ne perd plus les mises à jour de métadonnées suivantes
- Les échappements octaux des chaînes PDF s'arrêtent au chiffre 7, si bien que \0689 se décode désormais comme \06 suivi d'un 89 littéral, comme le définit la spécification
- La publication QDF signale l'échec d'écriture d'origine au lieu de le masquer derrière une erreur de fermeture de fichier
- Les builds FPC compressent et décompressent les flux Flate plus grands qu'un chunk comme un unique flux zlib au lieu de membres concaténés par chunk que d'autres consommateurs tronquent
- Les démos EditFormField génèrent leur formulaire d'exemple au premier lancement au lieu d'échouer à le trouver, et plusieurs démos signalent désormais un échec de chargement du document au lieu d'enregistrer en silence un PDF vide
Modifié
- L'index de recherche de la documentation liste la page des points forts localisée sous le titre propre à chaque langue au lieu d'un titre chinois unique partagé par toutes les locales
Version 3.539.23
Ajouté
- Le décodage JBIG2 natif accepte l'organisation de fichier autonome à accès direct avec longueurs de segments connues, y compris les tables Huffman personnalisées et les images de raffinement
Corrigé
- L'entrée à accès direct valide l'ordre des en-têtes, l'en-tête de fin de fichier obligatoire et les longueurs totales des données avant le décodage, rejetant les données tronquées ou en trop sans conserver un ancien bitmap
Version 3.539.22
Ajouté
- Le décodage JBIG2 natif prend en charge les tables Huffman personnalisées pour les dictionnaires de symboles et les zones de texte, avec des erreurs explicites pour les tables mal formées et les longueurs de préfixe non prises en charge
Corrigé
- Le décodage de raffinement Huffman consomme la taille de bitmap déclarée et préserve les pixels de symbole à octets partiels, évitant ainsi le texte corrompu dans les images JBIG2 concernées
Version 3.539.21
Corrigé
- Le décodage Flate et LZW honore l'étiquette d'algorithme PNG par ligne pour les prédicteurs 10 à 14 au lieu de décoder chaque ligne avec l'algorithme nommé dans le dictionnaire. Les flux de table de référence légitimes compressés avec Predictor 12 se chargent à nouveau, les lignes d'image ne se décodent plus en décalé, et les lignes peuvent changer d'algorithme au sein d'une même image
Version 3.539.20
Corrigé
- La première modification d'informations de document ou d'identifiant standard capture le XMP d'origine avant l'initialisation de l'objet éditeur, si bien que l'auteur, l'identifiant du document et les propriétés personnalisées existants ne sont plus écrasés par des métadonnées par défaut ; les changements d'informations de document atteignent aussi le XMP sous Free Pascal sur Windows, et le XML sans wrapper xpacket est enregistré tel quel
Version 3.539.19
Corrigé
- L'enregistrement d'un objet décimal non modifié conserve la précision avec laquelle il a été analysé au lieu de l'arrondir à la précision de sortie par défaut, si bien que des paramètres de couleur étalonnés comme le gamma et la matrice CalRGB ne décalent plus les couleurs de page lors d'un simple enregistrement ; les nombres nouvellement créés ou modifiés continuent d'utiliser la précision configurée
Version 3.539.18
Corrigé
- La mise à jour des informations du document ne remplace que la valeur du champ visé : quand la date de création et la date de modification référencent la même chaîne indirecte, l'actualisation de la date de modification ne réécrit plus la date de création
Version 3.539.17
Modifié
- La détection de version et la prévérification à l'enregistrement évitent les copies répétées de chaînes managées lors de la collecte des règles de fonctionnalités, réduisant le surcoût du balayage sur les grands documents ; la détection des fonctionnalités, les exigences de version et le premier diagnostic de fonctionnalité incompatible se comportent exactement comme avant
Version 3.539.16
Corrigé
SaveQDFToFileetConvertFileToQDFn'écrivent plus les flux de contenu Flate compressés ordinaires comme des flux vides sous Free Pascal et Lazarus ; la décompression depuis une position de départ explicite applique le décalage correct basé sur un et la longueur d'entrée complète
Version 3.539.15
Corrigé
- Le décodeur JBIG2 lit sans risque les segments de profil locaux et globaux et obtient la première bitmap via le numéro de page standard 1
- Le décodage des bitmaps MMR réaligne sa position de lecture sur la limite de segment déclarée après le dernier pixel, de sorte qu'un EOFB final ou du remplissage n'est plus pris pour l'en-tête du segment suivant
- Les tables Huffman personnalisées, l'organisation à accès aléatoire et les longueurs de segment inconnues ou surdimensionnées échouent explicitement ; les profils tronqués et les références de segment illégales arrêtent le décodage,
TPLJBIG2Decoder.LastErrorsignale la raison, et un échec efface la bitmap périmée RepairQDFFilepublie via un fichier temporaire créé de manière exclusive dans le répertoire cible et ne remplace la cible qu'après écriture, vidage et fermeture du fichier temporaire ; la réparation sur place et la sortie en écrasement conservent l'ancien fichier en cas d'échec d'écriture, de vidage ou de remplacement, et rapportent le résultat 0 avec le code d'erreur 305- La publication préserve le DACL existant de la cible avant l'écriture du fichier temporaire et échoue explicitement quand les permissions ne peuvent être préservées ou quand la cible est chiffrée en EFS ; une entrée verrouillée en exclusivité ou illisible rapporte le code d'erreur 401 au lieu de lever l'exception de lecture, et la publication de fichiers prend en charge les chemins Windows Unicode et de longueur étendue
Version 3.539.13
Corrigé
- La réparation d'un fichier QDF n'abandonne plus le contenu de flux dont le corps contient des marqueurs
endstreamouendobjen ligne entière ; la réparation retient la dernière paire de marqueurs de fin complète avant la fin d'objet connue - Les marqueurs de fin spécifiques à un objet qui se répètent à l'intérieur d'un flux font échouer la réparation avant l'effacement du flux cible, en préservant les octets, la longueur et la position d'origine
RepairQDFFileaccomplit toute la réparation en mémoire et n'ouvre la cible en écriture qu'après succès, de sorte qu'une entrée refusée ne peut plus tronquer un fichier ouvert avecfmCreate- Les chaînes de spécification de fichier conservent l'ordre documenté
/UFd'abord,/Fen repli et n'accordent aucune priorité de nom aux clés/Pathinconnues
Version 3.539.10
Corrigé
- Le décodage LZW élargit sa largeur de code sur le seuil du décodeur lui-même plutôt que sur celui de l'encodeur, si bien que les flux couvrant toutes les largeurs de code et les réinitialisations répétées du dictionnaire se décodent correctement, vérifié contre Pillow, libtiff et PDFium
- L'analyse des signatures CMS propage les bornes parentes à travers ContentInfo, les encapsulations EXPLICIT, SignedData, les ensembles et les champs d'identité ; les données hors limites ne servent donc plus à compter les certificats ni à comparer les identités, tandis que le padding valide après l'objet externe reste accepté
- La mise à jour des étiquettes de page d'un document dont les PageLabels utilisent un arbre numérique
/Kidsconvertit les entrées existantes en nœuds feuilles de la racine au lieu d'ajouter une seconde entrée/Numsmutuellement exclusive que les lecteurs ignoreraient - L'exemple Lazarus MergePDF lit ses entrées depuis le second argument de ligne de commande, traite une entrée explicite unique comme une erreur de paramètre et n'affiche plus de message de succès avant l'échec de la génération
Version 3.539.6
Corrigé
- Les balayages de buffer s'arrêtent sur un retour de
TStream.Readà zéro plutôt que sur une lecture courte, et les flux qui renvoient quelques octets à la fois ne sautent plus la fin des données balayées - L'encodage OID fusionne les deux premiers arcs en un seul sous-identifiant base-128, si bien que
2.999.3s'encode en06 03 88 37 03au lieu de devenir silencieusement1.15.3 - Le dessin d'un aperçu dans un flux d'image réutilisé efface d'abord l'ancien contenu, un rendu plus petit ne conserve donc plus la fin de l'image précédente
CopyPageRangeslibère ses instances de document dans un blocfinally, couvrant l'échec de chargement, les exceptions et la fin normale
Version 3.539.3
Corrigé
- Le code d'erreur 526 ne désigne plus deux choses différentes.
PDFLIB_ERROR_TEXT_LOCATION_INVALID,PDFLIB_ERROR_TEXT_LOCATION_STALEetPDFLIB_ERROR_TEXT_LOCATION_READ_ONLYmigrent vers les codes 535, 536 et 537, qui n'étaient pas attribués, si bien que les appelants qui testent la valeur 526 ne voient plus que l'échec d'export JSON pour lequel ce code était documenté ; les codes 527 et 528 ne sont plus utilisés PDFlibErrorMessagedécrit les codes 101 à 104 d'après ce qui les déclenche réellement. Ces quatre codes appartiennent aux paramètres de chiffrement, et non aux erreurs d'analyse que la table de messages affirmait, si bien qu'un échec de force de chiffrement ne signale plus "Invalid PDF structure"PDFlibErrorMessagerenvoie un message réel pour chaque code levé par la bibliothèque. Les échecs d'ouverture de plage d'octets et HTTP, l'ouverture de fichier réseau, la taille brute de la clé de chiffrement, l'export JSON, les refus de handle de contenu marqué et de chemin de découpe, les codes d'emplacement de texte renumérotés, les codes de conformité police incorporable, PDF/VCR et PDF/E, ainsi que les cas de champ dupliqué et de script de formulaire retombaient sur le texte générique "<segment> error (NNN)"- La page de référence de
LastErrorCoderépertorie l'ensemble complet des codes, y compris le code 705 de champ dupliqué jusque-là absent, et n'affiche plus les entrées retirées 527 et 528
Version 3.539.2
Corrigé
- Un TIFF dont le répertoire déclare plus de valeurs que le fichier n'en contient est désormais rejeté complètement. Les valeurs étaient ignorées mais le compteur était conservé, si bien que les lecteurs suivants prenaient le premier élément d'un tableau vide
- Un PNG dont l'en-tête indique un type de couleur ou une profondeur hors format est rejeté au lieu d'être décodé sans canaux de couleur, ce qui envoyait les filtres de ligne vers un tampon vide
- Un chunk de résolution PNG plus court que ses neuf octets définis ne lit plus au-delà des données fournies
- Les images CCITT Group 3 et Group 4 bidimensionnelles se décodent sous Free Pascal et Lazarus ; la recherche de ligne de référence renvoyait un tableau jamais créé, que ce compilateur laisse vide
Version 3.539.1
Corrigé
- Le cache disque de la visionneuse supprime maintenant les bitmaps rendus à chaque mise à niveau de la bibliothèque. Le marqueur de version comparé était géré séparément de la version de la bibliothèque et avait pris du retard, donc un cache produit par une version plus ancienne pouvait être réutilisé après mise à jour
- Les builds Free Pascal et Lazarus relisent correctement les bitmaps 16 bits
BI_BITFIELDS: les masques de canal étaient lus à un décalage erroné quand le fichier utilisait un en-tête d'informations étendu, ce qui mélangeait les couleurs - Les lignes de bitmap ne sont plus mal lues dans les builds sans gestion matérielle : les lignes 1 et 4 bits étaient dimensionnées par division entière, perdaient les derniers pixels de chaque ligne, et l'enregistrement écrivait le bloc de pixels décalé d'un octet
- La capture d'un dessin dans un métafichier ne produit plus d'image vide quand la taille n'est pas connue à l'avance ; le cadre enregistré provient désormais du dessin lui-même, comme sous VCL
- La lecture d'un bitmap dont la taille de palette déclarée dépasse sa profondeur de couleur est rejetée au lieu d'être considérée comme fiable
- Les requêtes d'état des travaux d'impression libèrent le handle de spouleur ouvert, donc l'interrogation d'un travail ne perd plus un handle par appel
Docs\index.htmlest de nouveau la passerelle des langues. Une synchronisation de documentation l'avait remplacé par une copie de la navigation de référence en chinois simplifié dont les liens pointaient vers un répertoire inexistant
Modifié
- Le paquet Lazarus
PDFlibPasLaz.lpkrépertorie désormais les unités facultatives de l'encodeur LZW, Brainpool, Ed448, ML-DSA, de l'imprimante PDF et de l'encodeur JBIG2 externe avec les déclarations de métafichier, conformément à l'ensemble fourni par la build en ligne de commande build-Win64-Demo-Laz.cmdrenvoie versbuild-Lazarus-Demo.cmd win64, ainsi les deux points d'entrée placent les exécutables de démonstration dansbin\x86_64-win64plutôt que dans le répertoire source
Version 3.539.0
Ajouté
- Free Pascal et Lazarus prennent désormais en charge les builds Windows 32 bits en plus de Win64, notamment la création, le chargement et le chiffrement de PDF ainsi que les images JPEG 2000
- Les scripts de build de la bibliothèque Lazarus, de la version d'essai, des démos et des tests console acceptent
win32ouwin64et prennent en charge les compilateurs croisés hébergés sur Win32, avec un répertoire de sortie distinct pour chaque architecture
Modifié
- Sous Win32, l'encodeur Pascal JBIG2 intégré est utilisé lorsqu'un encodeur externe est demandé ; l'encodeur externe lié statiquement reste disponible sous Win64
- Les builds FPC incluent la compression via l'implémentation zlib Pascal fournie et ne chargent plus
zlib1.dlldepuis le chemin de recherche du système
Version 3.538.0
Ajout
- Les builds Free Pascal et Lazarus peuvent désormais utiliser l’encodeur JBIG2 externe : ajoutez la nouvelle unité PDFlibJBIG2EncDLL à un projet et placez
pdflibjbig2enc.dllà côté de l’exécutable, etAddImageJBIG2FromStreamExainsi que les autres points d’entrée JBIG2 honorent la demande d’encodeur externe exactement comme sous Delphi. Sans la DLL, la demande continue de revenir à l’encodeur Pascal intégré, de sorte que les projets qui ne la livrent pas ne sont pas affectés - Nouvelle
DLL\JBig2Enc\Win64\pdflibjbig2enc.dllredistribuable et script de build qui la produit
Version 3.537.0
Ajout
- Les builds Free Pascal et Lazarus convertissent les métafichiers en contenu de page vectoriel.
ImportEMFFromFile,ImportEMFFromStream, leurs variantes Ex,LoadFromCanvasDCetNewPageFromCanvasDCy produisent désormais de véritables opérateurs de dessin PDF avec polices incorporées, comme sous Delphi, au lieu de signaler que le mode n’est pas disponible. Le texte reste sélectionnable et consultable, et la sortie ne représente qu’une fraction de la taille de l’import rastérisé
Version 3.536.7
Corrigé
- L’énumération des imprimantes renvoie de vrais noms sous Free Pascal et Lazarus. Chaque imprimante ne renvoyait que son premier caractère, ce qui faisait aussi rejeter toute imprimante installée par la sélection d’imprimante, les profils d’imprimante personnalisés et l’impression elle-même
GetPrinterNamesne plante plus sur les builds sans VCL : il interroge désormais directement le spooler, commeGetLatestPrinterNamesle faisait déjà
Version 3.536.6
Corrigé
- La conversion d’un métafichier en contenu de page vectoriel signale désormais un échec sur les builds incapables de l’effectuer, au lieu de renvoyer une image au contenu vide.
ImportEMFFromFile,ImportEMFFromStream, leurs variantes Ex etLoadFromCanvasDCrenvoyaient tous un identifiant d’image d’apparence valide, si bien que la page ressortait blanche sans rien révéler de la raison. L’importation du même métafichier comme image n’est pas affectée et embarque la même image - La capture de canvas et l’importation de métafichier ne plantent plus lorsque la conversion ne peut pas s’exécuter : les deux points d’entrée utilisaient l’image obtenue sans vérifier qu’elle existe
Version 3.536.5
Corrigé
- L’importation de métafichier rastérisé fonctionne sous Free Pascal et Lazarus.
ImportEMFFromFile,ImportEMFFromStreamet leurs variantes Ex ne renvoyaient rien lorsqu’une rastérisation était demandée, etLoadFromCanvasDCplantait dans le même mode, car le flux de dessin remis au chargeur d’images n’était pas dans une forme qu’il pouvait y lire. Les chemins vectoriels n’étaient pas affectés
Version 3.536.4
Corrigé
- La capture de métafichier sous Free Pascal et Lazarus indique à nouveau sa taille physique, de sorte que
LoadFromCanvasDCet les autres points d’entrée de capture de canvas importent le dessin au lieu d’échouer sur un cadre de taille nulle - L’objet de police sans VCL signale désormais une véritable valeur
PixelsPerInchet se copie lors d’unAssign. Les deux étaient inopérants : le code qui prenait sa résolution de rendu sur une police demandait un canvas de taille nulle, et confier une police préparée à un canvas conservait silencieusement l’ancienne - Les métafichiers créés sous Free Pascal utilisent par défaut le format amélioré, comme sur toutes les autres plateformes ; ils étaient auparavant enregistrés dans l’ancienne disposition 16 bits sauf si l’appelant définissait lui-même l’indicateur
Version 3.536.3
Corrigé
- Les builds Free Pascal et Lazarus importent désormais les images BMP 4, 8 et 16 bits.
AddImageFromFileetAddImageFromStreamne renvoyaient aucune image pour ces profondeurs, y compris la forme 16 bitsBI_BITFIELDSécrite par les programmes de dessin, car le lecteur de bitmap sans VCL ne comprenait que les entrées 1, 24 et 32 bits
Version 3.536.2
Corrigé
- L’export de métafichier GDI classique fonctionne sous Free Pascal et Lazarus :
RenderPageToMetafileFileetRenderPageToMetafileStreamdéclenchaient une violation d’accès pourmfEMFetmfWMF, car le canvas de métafichier sans VCL n’était qu’un substitut vide sans pinceau, sans stylet ni police. Les deux formats s’enregistrent désormais dans un véritable métafichier amélioré et sont écrits,mfWMFavec l’en-tête placeable qu’exige un fichier .wmf
Version 3.536.1
Corrigé
- Les builds Free Pascal et Lazarus écrivent désormais des fichiers BMP 1, 4 et 8 bits valides : le substitut de bitmap qui remplace celui de la VCL n’émettait aucune table de couleurs, si bien que les bitmaps à index de palette étaient rejetés par tous les lecteurs et dessinaient sur une palette entièrement noire
- L’importation d’images bi-niveaux fonctionne à nouveau sous Free Pascal :
AddImageCCITTFromFile,AddImageCCITTFromStreamet les équivalents JBIG2 savent désormais lire les bitmaps 1 bit qu’ils reçoivent, au lieu d’échouer parce que seules les entrées BMP 24 et 32 bits étaient décodées
Version 3.536.0
Ajout
- Les builds Free Pascal et Lazarus exécutent désormais les traitements parallèles par lots au lieu de revenir à des boucles série :
RenderPagesToFilesParallel, les lots d’optimisation derrière l’optimisation de document et le rendu parallèle par tuiles se répartissent tous sur les cœurs CPU, à l’image du comportement de Delphi
Modifications
- Le rendu de pages parallèle rend désormais sa première page sur le thread appelant avant de se répartir, de sorte que le moteur de rendu s’initialise une seule fois au lieu d’être initialisé simultanément par chaque worker
Version 3.535.0
Ajout
- Les builds Free Pascal et Lazarus livrent désormais l’encodeur JPEG 2000 :
EncodeImageToJPXStream,EncodeImageToJPXFile,AddImageJPXFromFile,AddImageJPXFromStreametAddImageJPXFromStringy produisent des images JPXDecode exactement comme sous Delphi, aussi bien en mode avec perte qu’en mode sans perte - Le bitmap non VCL utilisé par les builds Free Pascal, macOS et FireMonkey charge désormais les flux BMP 24 bits et 32 bits non compressés et signale un format alpha
Corrigé
- Le décodage d’images via le backend d’imagerie Windows ne plante plus sur les builds Free Pascal ; les flux sont désormais remis au backend sous une forme qu’il accepte
- L’affectation d’un bitmap à un autre sur les builds non VCL copie les pixels au lieu de laisser le bitmap cible vide, ce qui produisait silencieusement une sortie blanche dans les chaînes de conversion d’images
Version 3.534.1
Corrigé
- Le décodeur TIFF intégré rejette désormais les mises en page BigTIFF et tuilées non prises en charge avec des diagnostics explicites et limite les dimensions décodées ainsi que les tailles de bandes avant l'allocation
Version 3.534.0
Modifications
CheckFileComplianceet le précontrôle PDF/UA valident désormais les largeurs des polices simples et CID intégrées, les déclarations Type 1/CharSetet CID/CIDSetcomplètes, les Form XObjects porteurs de texte appelés en dehors du contenu marqué et les opérandes de texte qui se résolvent en.notdef
Version 3.533.0
Ajouté
TPDFlibPKCS11Clientpeut découvrir les clés ML-DSA sans certificat explicitement sélectionnées, rapporter leur jeu de paramètres et signer des messages originaux via le mécanisme PKCS #11 3.2CKM_ML_DSA
Version 3.532.0
Modifié
- Les flux volumineux utilisant la chaîne de filtres commune
/ASCII85Decodeet/FlateDecodes’encodent et se décodent désormais via un pipeline à mémoire bornée, sans matérialiser la représentation intermédiaire
Version 3.531.0
Ajouté
AddWebCaptureCommand,GetWebCaptureCommandCount,GetWebCaptureCommandetClearWebCaptureCommandscréent, énumèrent et suppriment les métadonnées de commandes Web Capture/SpiderInfostandard du catalogue, sans effectuer de récupération réseau
Version 3.530.0
Ajouté
BPLoadCurve,BPKeyGen,BPSignFixedKetBPVerifyimplémentent ECDSA en Pascal pur sur les trois courbes à corps premier RFC 5639 brainpoolP256r1, brainpoolP384r1 et brainpoolP512r1 : arithmétique radix-2^16 à 33 limbs partagée par toutes les largeurs de courbes, réduction modulaire série bit à bit, doublement et addition jacobiens avec des gardes d’alias explicites, inversion de Fermat et nonce fourni par l’appelant pour la signature ; les vecteurs de réponse connue générés avec une implémentation indépendante et vérifiés croisés dans les deux sens passent sur chaque courbe, aux côtés des tests de non-régression d’aller-retour et de rejet des altérations
Version 3.529.0
Ajouté
Ed448PublicKeyFromSeed,Ed448SignetEd448Verifyimplémentent PureEdDSA de la RFC 8032 sur edwards448 en Pascal pur : arithmétique du corps de Goldilocks radix-2^28 à 16 limbs avec le pliage de Solinas 2^448 = 2^224 + 1, addition de groupe fortement unifiée sous forme produit pour les courbes a = +1, réduction modulaire appliquée à l’empreinte entière modulo l’ordre du groupe pour les scalaires SHAKE256 de 114 octets, et vérification avec cofacteur 4 ; les deux vecteurs de réponse connue de la RFC 8032 section 7.4 passent octet par octet, aux côtés des tests de non-régression d’aller-retour, de rejet des altérations et de validation de longueur
Version 3.528.0
Ajouté
MLDSA65KeyGen,MLDSA65SignetMLDSA65Verifyimplémentent le ML-DSA-65 de FIPS 204 avec des clés publiques de 1952 octets, des clés secrètes de 4032 octets et des signatures de 3309 octetsMLDSA87KeyGen,MLDSA87SignetMLDSA87Verifyimplémentent le ML-DSA-87 de FIPS 204 avec des clés publiques de 2592 octets, des clés secrètes de 4896 octets et des signatures de 4627 octets
Version 3.527.0
Ajouté
PDFlibMLDSAfournit une implémentation en Pascal pur du ML-DSA-44 de FIPS 204 avec génération de clés par seed déterministe, signature hedged ou déterministe, échantillonnage par rejet borné et vérification de signatureMLDSA44KeyGen,MLDSA44SignetMLDSA44Verifyutilisent les tailles standard de clé publique de 1312 octets, de clé secrète de 2560 octets et de signature de 2420 octets, prennent en charge des contextes jusqu’à 255 octets et sont vérifiés contre le vecteur de réponse connue officiel
Version 3.526.0
Ajouté
- Le contexte XOF SHAKE en flux (
PLShakeXOFInit/PLShakeXOFAbsorb/PLShakeXOFFinalize/PLShakeXOFSqueeze) extrait (squeeze) un nombre d’octets arbitraire à travers les permutations Keccak pour SHAKE128 (débit 168) comme pour SHAKE256 (débit 136), avec un enveloppeur mono-appelPLShakeXOF; les sorties inter-blocs de 200 octets sont vérifiées contre les empreintes de référence des deux variantes
Version 3.525.0
Modifié
SHAKE256ByteArrayetSHAKE256StreamRangeacceptent désormais des sorties allant jusqu’au débit d’éponge de 136 octets (auparavant 64), ce qui permet des empreintes en une seule extraction (squeeze) à la longueur de hachage Ed448 de 114 octets ; de nouveaux tests à réponse connue couvrent les sorties de 114 octets des messages vide etabc
Version 3.524.0
Ajouté
DownsampleImagesExclasse chaque image en bitonale, en niveaux de gris ou en couleur d’après son espace colorimétrique déclaré et son nombre de bits par composante, puis applique en un seul passage un budget DPI et une qualité JPEG par classe ; les scans bitonaux se réencodent sans pertes et un indicateur ne conserve les octets d’origine que lorsque le réencodage est plus volumineux
Version 3.523.0
Ajouté
CopyForeignObjectcopie en profondeur un objet indirect et la fermeture complète de ses références depuis un autre document chargé vers le document sélectionné, en remappant les numéros d’objets afin que les références partagées restent partagées dans la copie
Version 3.522.0
Ajouté
SetPagePieceInfo,GetPagePieceInfoetClearPagePieceInfogèrent les dictionnaires de données privées au niveau de la page (ISO 32000-2 14.5), indexés par nom d’applicationAddNamedPageetGetNamedPageenregistrent et résolvent des pages par nom via l’arbre de noms /Names /Pages du catalogue
Version 3.521.0
Ajouté
GetImageListItemNativeDataToString,GetImageListItemNativeFormatetSaveImageListItemNativeDataToFileextraient le flux de codec brut encore encodé de toute image listée (JPEG, JPEG 2000, JBIG2, CCITT, Flate ou brut), sans décodage, en préservant les octets d’origine pour les flux de travail de transmission directe (passthrough)
Version 3.520.0
Ajouté
AnalyzeModificationsclasse chaque changement depuis une révision enregistrée par rapport à la liste blanche des mises à jour LTA, du remplissage de formulaires et des annotations, et renvoie le niveau global de modificationGetModificationLevel,GetModificationFindingCount,GetModificationFindingLevel,GetModificationFindingObjNumetGetModificationFindingDetailexposent les constats classés de l’analyse la plus récente
Version 3.519.0
Ajouté
CompareWitheffectue une comparaison structurelle entre le document sélectionné et une révision enregistrée, en classant chaque objet indirect comme ajouté, supprimé ou modifié grâce à des empreintes de contenu qui ignorent les décalages de numéros d’objetsGetCompareFindingCount,GetCompareFindingKind,GetCompareFindingObjNumetGetCompareFindingDetaillisent les constats de la comparaison la plus récente, y compris les différences de nombre de pages
Version 3.518.0
Ajouté
SHAKE256ByteArrayetSHAKE256StreamRangefournissent l’empreinte à sortie extensible SHAKE256 (ISO/TS 32001, RFC 8702) avec des lectures à deux segments par plages d’octets et des sorties de 1 à 64 octets, vérifiées contre les tests à réponse connue du NIST FIPS 202
Modifié
- Le cœur Keccak embarque désormais un octet de séparateur de domaine, si bien que SHA-3 et SHAKE partagent une même implémentation de permutation ; dans le profil de signature CMS, SHAKE256 reste réservé comme empreinte interne de Ed448 et est volontairement absent du sélecteur d’empreintes
Version 3.517.0
Ajouté
AddPageAssociatedFileFromFileetAddPageAssociatedFileFromStringlient des spécifications de fichiers intégrés au tableau /AF d’une seule page (ISO 32000-2 14.13) plutôt qu’au catalogue du documentGetPageAssociatedFileCount,GetPageAssociatedFileEmbeddedIndexetClearPageAssociatedFilesénumèrent et suppriment les fichiers associés au niveau de la page après des aller-retours d’enregistrement et de chargementSetOptionalContentConfigInfoécrit les métadonnées de présentation (nom de configuration, créateur et mode de liste du panneau des calques) sur la configuration de contenu facultatif par défaut
Version 3.516.0
Ajouté
ApplyContentFilterChainetTPDFContentFilterChainappliquent des filtres de contenu au niveau des instructions sur chaque couche de contenu d’une page, avec des chaînes ordonnées, un contrôle d’arrêt anticipé et une transmission directe des données utilisateurExportDocumentJSONetGetDocumentJSONsérialisent le graphe d’objets complet du document, y compris les dictionnaires de flux avec des charges utiles base64 et le trailer, dans une structure JSON de type qPDFSetPDFDeclarations,GetPDFDeclarationsURI,GetPDFDeclarationsRole,GetPDFDeclarationsVersion,GetPDFDeclarationsCount,HasPDFDeclarationetClearPDFDeclarationsécrivent, lisent et suppriment des déclarations de conformité PDF Declarations lisibles par machineAuditPageTree,AuditXRefStructure,AuditObjectReachability,AuditStreamLengths,AuditFontEmbeddingetAuditColorSpacesexécutent six passes de diagnostic structurel indépendantes avec des constats gradués par sévéritéGetAuditFindingCount,GetAuditFindingSeverity,GetAuditFindingItemetGetAuditFindingDetaillisent les constats de l’appel d’audit le plus récent
Version 3.515.0
Ajouté
ExecuteFormFieldScriptEventetTPDFlibFormScriptEventexécutent des événements de champ Keystroke, Format, Validate et Calculate bornés, avec des propriétés Event, Field et Document contrôléesSetFormScriptLimits,GetFormScriptLimitsJSONetGetFormScriptDiagnosticsconfigurent et rapportent les budgets de source, d’opérations, d’imbrication, de chaînes et d’accès aux propriétés
Modifié
- Le runtime de scripts de formulaire sûr expose désormais les métadonnées en lecture seule des champs source et cible, la recherche de champs de document et l’état de sélection de frappe, tout en conservant la compatibilité valeurs seules
Sécurité
- L’exécution de scripts rejette désormais les événements de valeur de bouton, les mutations d’objets et les sélections hors plage, applique des limites de ressources indépendantes à l’exécution et à l’analyse des dépendances, et rapporte des positions bornées des échecs d’analyse
Version 3.514.0
Ajouté
SetPDFEModecrée des documents d’ingénierie PDF/E-1 avec une syntaxe PDF 1.6, des identifications Info et XMP synchronisées, des métadonnées de cycle de vie et une intention de sortie intégrée avec gestion des couleursGetPDFEDiagnosticset le test de conformité 7 fournissent une validation PDF/E-1 à l’enregistrement, sur fichiers directs et via pipeline partagé, avec des budgets bornés d’objets, de contenu et de récursion
Modifié
- Les enregistrements PDF/E-1 appliquent désormais l’identification, les métadonnées de cycle de vie, le chiffrement autorisé, la cohérence de l’intention de sortie, les exclusions XFA et les gardes-fous contre les actions dangereuses, tandis que le preflight audite en outre les espaces colorimétriques des périphériques, les opérateurs de contenu, les polices, les annotations, les formulaires, le contenu facultatif, les références de fichiers externes, les états graphiques et les restrictions des flux 3D
Version 3.513.0
Ajouté
SetPDFVCRModeet les API de portée des modèles et espaces réservés créent des modèles de remplacement PassThrough PDF/VCR-1 sur une fondation PDF/X-4GetPDFVCRDiagnostics,GetPDFVCRManifestet le test de conformité 6 fournissent une validation à l’enregistrement, sur fichiers directs et via pipeline partagé, plus une extraction validée des champs et espaces réservés JSON
Modifié
- Les enregistrements PDF/VCR appliquent désormais les métadonnées d’identification, une racine de modèle directe unique, des champs déclarés uniques, une sélection de pages valide, des espaces réservés de remplacement en feuille et des liaisons exactes de pages et de MCID à travers l’arborescence de structure complète
Version 3.512.0
Ajouté
SetPDFRModeet les API de pages raster PDF/R créent des documents d’échange raster restreints à partir de données brutes, CCITT Group 4 ou JPEG, sans transcoder les entrées compressées prises en chargeGetPDFRDiagnosticset le test de conformité 5 fournissent une validation PDF/R en mémoire, sur fichiers directs et via pipeline partagé
Modifié
- Les enregistrements PDF/R appliquent désormais le marqueur, la version et le profil de chiffrement requis, les objets de génération zéro, les dictionnaires et filtres restreints, un flux de contenu unique, des opérateurs exclusivement raster, des ressources de bandes ordonnées, la cohérence des couleurs et de la résolution ainsi qu’une couverture complète des pages
Version 3.511.0
Ajouté
TPDFlibFormTextDirection,SetTextDirection,GetVisualCaretOrderetMoveVisualCaretajoutent une direction de paragraphe automatique ou explicite et une navigation physique du curseur sûre pour les graphèmes, pour les éditions de formulaires à directions mixtesResolvedTextDirectionetVisualCaretPositionexposent la direction effective du paragraphe et distinguent les emplacements de curseur divisés aux frontières bidirectionnelles
Modifié
- Les segments de texte mis en forme appliquent désormais un réordonnancement visuel par niveau d’imbrication pour les contenus mixtes de gauche à droite et de droite à gauche, tandis que les valeurs de champs restent dans l’ordre logique UTF-16
Version 3.510.0
Ajouté
MinimumSlotHeightdiffère la composition des composants dynamiques avant clonage ou capture lorsque la région courante est trop courteMinimumFollowingHeightconserve un fragment final avec une première région définie par l’appelant pour le composant suivant, sans contraindre les fragments intermédiairesTPDFlibDynamicRetryReason,LastRetryReasonetLastRequiredSlotHeightexposent la raison du report du placement et la hauteur requise connue
Modifié
- Les nouvelles tentatives dans l’espace de flux préservent désormais les fragments validés, l’état des composants, les index de composition et le contenu des pages, en n’écartant que l’essai isolé
Version 3.509.0
Ajouté
TPDFlibDynamicPaginationPolicyajoute les modes fractionnement, maintien d’ensemble en une seule fois et placement complet strict, avec un résultat de nouvelle tentative distinct et un état en attente observable
Modifié
- Les essais de composants dynamiques différés écartent désormais le contenu capturé et l’état mutable de manière atomique, tandis que le placement strict accepte une réduction d’échelle proportionnelle mais jamais une sortie partielle ou rognée
Version 3.508.0
Ajouté
TPDFlibFormSession.DispatchInputEventaccepte des événements typés indépendants de la plate-forme — pointeur, molette, touches nommées et texte composé — et renvoie l’état de focus, de survol, de pression, de sélection et de changement de valeur
Modifié
- La distribution des entrées de formulaire applique désormais les transitions de pointeur Widget
/E,/X,/Det/Uordonnées, l’annulation de capture, l’édition sûre pour les graphèmes, le déplacement du curseur tenant compte des lignes, les raccourcis standard de sélection et d’historique, l’activation des boutons et la navigation par molette de choix
Corrigé
- L’historique des touches Retour arrière et Suppression restaure désormais le curseur visible par l’utilisateur avant la touche, plutôt que la sélection de graphèmes temporaire utilisée en interne pour le remplacement atomique
Version 3.507.0
Ajouté
TPDFlibFormSessionfournit désormais une annulation et un rétablissement bornés au niveau des champs, avec des requêtes de disponibilité, des compteurs d’étapes conservées, une capacité configurable et un effacement explicite de l’historique
Modifié
- L’historique d’édition de formulaire stocke des deltas de texte compacts, restaure les valeurs et les sélections dirigées sans redéclencher d’actions ni de callbacks, écarte les branches de rétablissement après de nouvelles éditions et s’efface aux frontières du cycle de vie d’édition
Version 3.506.0
Ajouté
TPDFlibFormSessionfournit désormais un remplacement de sélection avec possibilité de veto, une opération de coupe et des opérations de collage fournies par l’appelant, avec des callbacks d’édition de texte d’hôte mutables et une application de/MaxLensûre pour les graphèmes
Modifié
- À la validation d’une session de formulaire, les actions de validation et de formatage disponibles s’exécutent avant toute modification du champ, les éditions rejetées sont conservées atomiquement et la valeur brute validée reste séparée de l’apparence Widget formatée
Version 3.505.0
Ajouté
- Ajout de plages de sélection de texte dirigées pour les champs de formulaire, en unités de code UTF-16, en points de code Unicode et en clusters de graphèmes étendus, avec le signalement de l’ancre et du curseur ainsi qu’une conversion des frontières mise en cache
Version 3.504.0
Ajouté
- Ajout d’un placement de composants dynamiques conscient des débordements, avec des politiques de rejet, de rognage et de réduction d’échelle proportionnelle, un alignement indépendant et le signalement final de la page, de la géométrie et de la transformation
Version 3.503.0
Ajouté
TPDFlibDynamicComponentSessioncompose paresseusement un fragment de page avec état à la fois, avec contexte de page, signalement de la taille utilisée, statut d’achèvement, réinitialisation et instantanés d’état validéReleaseCapturedPageinvalide un handle de capture Form XObject après son placement final, tout en préservant les références de ressources de page et les invocations existantes
Modifié
- Les tentatives de composants dynamiques dessinent désormais sur un état cloné à l’intérieur d’un Form XObject isolé et ne valident qu’après un placement vérifié ; les callbacks rejetés, la géométrie invalide et les exceptions restaurent la page sélectionnée et laissent le contenu de destination et l’état du composant inchangés
Version 3.502.0
Ajouté
TPDFlibFormSessionfournit désormais des rectangles Widget de CropBox visuel tourné, un test de pointage du plus haut élément, un focus basé sur les points et une navigation de focus clavier en avant ou en arrière
Modifié
- Les séquences de tabulation appliquent l’ordre page
/Tabsligne, colonne, structure, tableau d’annotations et Widget PDF 2.0 avec la direction des ViewerPreferences, un ordre stable entre les pages et un parcours borné de l’arbre de structure SetTabOrderModevalide désormais les cinq modes standard et sélectionne automatiquement PDF 2.0 pourAetW
Version 3.501.0
Ajouté
ApplyRepeatedPageFragmentplace un Form XObject capturé sur une plage de pages comme artefacts typés Pagination, Layout, Page ou Background PDF 2.0, tout en partageant le flux de contenu et les ressources entre chaque placement
Corrigé
- Les dictionnaires de propriétés d’artefacts utilisent désormais l’opérateur de contenu marqué
BDCrequis dans les chemins publics et de mise en page de tableaux, et les types et sous-types d’artefacts PDF 2.0 sélectionnent la version de fonctionnalité de sortie requise
Version 3.500.0
Ajouté
SetTextFlowPaginationLinescontrôle indépendamment le nombre minimal de lignes orphelines conservées au bas d’une boîte de texte et les lignes veuves préservées pour la boîte ou la colonne suivante
Modifié
- La pagination du flux de texte ne fait désormais avancer que les lignes de fin requises avec une anticipation bornée, tandis qu’une coupure impossible laisse le flux inchangé pour un placement dans une région plus grande
Version 3.499.0
Ajouté
TPDFlibFormSessionfournit un focus AcroForm indépendant de la plate-forme, l’édition de texte et de choix, une sélection UTF-16 indexée à partir de zéro, ainsi qu’un état de validation et d’annulation avec des callbacks d’hôte typés pour les actions de focus et de blur des Widgets
Modifié
- Les valeurs de session validées appliquent désormais les limites de texte et ne régénèrent que l’apparence obsolète et la fermeture de calcul concernées avant de signaler le changement de valeur
Version 3.498.0
Ajouté
GetDirtyFormAppearanceCountetRegenerateDirtyFormAppearancessuivent les références d’objets Widget AcroForm modifiées et ne régénèrent que la fermeture de calcul dédupliquée de la session courante
Modifié
RegenerateFormAppearancesparcourt désormais les champs hiérarchiques une seule fois depuis leurs racines, rapporte le nombre réel de régénérations de Widgets réussies et conserve les apparences en échec pour une nouvelle tentativeUpdateAppearanceStreamrapporte désormais précisément les échecs de génération et laisse en attente les Widgets non réussis avecNeedAppearancesactivé
Version 3.497.0
Ajouté
SetOutputIntentMixingHintsécrit les solidités d’encre PDF 2.0 et l’ordre d’impression physique tout en rejetant les valeurs invalides, les noms dupliqués, l’ordre manquant et les colorants déjà représentés par des données spectralesSetOutputIntentSpectralDataintègre des flux bornés de caractérisation de tons directs CxF/X-4, réutilise des données identiques à travers des affectations répétées et croisées de colorants et exige exactement uneSpotInkCharacterisationcorrespondante ;ClearOutputIntentColorantDatasupprime les deux dictionnaires de métadonnées de colorants
Modifié
GetEffectivePageOutputIntentJSONrapporte désormais les solidités de mélange, l’ordre d’impression, les colorants spectraux et la validité spectrale décodée pour les documents créés et rechargés- Le preflight PDF/X audite désormais les
MixingHintsetSpectralDataOutputIntent, y compris lesDotGaininterdits, les plages de solidité, les types d’ordre d’impression, les conflits de colorants, le décodage des flux et les correspondances uniques de tons directs CxF
Version 3.496.0
Ajouté
DAOpenFileWithEncryptionKeyetDAOpenFromStreamWithEncryptionKeyouvrent des documents chiffrés à partir d’une clé de chiffrement de fichier hexadécimale autorisée, sans dérivation de mot de passe, avec des exports de fichiers DLL correspondants et un statut de validation explicite
Sécurité
- L’entrée de fichier à clé brute est toujours en lecture seule à la source, applique les longueurs de clés exactes propres à la révision et les vérificateurs
/Uou/Permsdisponibles, rejette les incohérences même lorsque la récupération en l’absence de vérificateur est activée et efface le matériel de clé conservé à la fermeture du handle
Version 3.495.0
Ajouté
SetXRefLoadPolicyetGetXRefLoadPolicysélectionnent et rapportent le chargement strict, compatible ou de récupération pour l’entrée du document sélectionné et de Direct Access
Modifié
- Le chargement strict exige désormais des en-têtes exacts, des marqueurs finaux, des décalages déclarés, des entrées de table à largeur fixe, les métadonnées des flux de références croisées et chaque section
/Prevou/XRefStmliée - Le chargement compatible conserve des réparations contrôlées de décalages et de structure sans entrer dans une reconstruction brute, tandis que le chargement de récupération peut reconstruire les objets de premier niveau et compressés et synthétiser un trailer manquant
- Les diagnostics de références croisées rapportent désormais la politique sélectionnée, les décisions ordonnées de l’analyseur et les indicateurs de compatibilité par section, y compris les chaînes latérales hybrides rejetées et les preuves de récupération Direct Access
Version 3.494.0
Modifié
- Les enregistrements déterministes complets non chiffrés sans seed explicite dérivent désormais les deux entrées
/IDde trailer initiales des 16 premiers octets d’une empreinte SHA-256 en flux calculée sur l’en-tête et le corps sérialisés du document - L’empreinte de contenu exclut les identifiants de trailer antérieurs, les données de références croisées et les trailers dépendant des décalages, tout en normalisant les identifiants de ressources générés et les UUID d’instance XMP, de sorte que les changements de pages, de ressources, de pièces jointes et de métadonnées commandent le résultat
- Les noms de ressources internes et les tags de sous-ensembles de polices intégrées restent stables tant que le mode déterministe est activé, y compris pour les sorties regroupant les dictionnaires dans des flux d’objets compressés ; les enregistrements par défaut conservent des identifiants randomisés
Version 3.493.0
Ajouté
LoadFromMappedFileetDAOpenMappedFileouvrent des PDF locaux via des vues mappées en lecture seule bornées, avec une option pour exiger le mappage ou autoriser un repli portable sur flux de fichierGetMappedFileInfoetDAGetMappedFileInforapportent l’état du mappage actif, les tailles de fichier et de fenêtre, la vue courante, le volume lu et l’activité de remappage
Modifié
- Les sources mappées conservent une fenêtre alignée sur les allocations et la remappent à travers les lectures différées volumineuses d’objets ou de flux, en bornant l’utilisation de l’espace d’adressage indépendamment de la taille du fichier
- Les sources locales mappées et adossées à des callbacks partagent désormais des lectures absolues de tranches d’objets indépendantes du curseur, tandis que les API de chargement de fichiers existantes conservent leur comportement antérieur
Version 3.492.0
Ajouté
GetPageThumbnailDataToStreametGetPageThumbnailDataToStringexposent les charges utiles de vignettes de page encodées ou décodées par filtre, tandis queDeletePageThumbnailsupprime les métadonnées de la page sans changer la page sélectionnée
Modifié
- Les requêtes de présence et de métadonnées de vignettes exigent désormais un flux d’image ; les entrées mal formées hors flux restent supprimables au lieu d’être signalées comme vignettes utilisables
- La sortie brute est copiée en fragments bornés et la sortie décodée réutilise le pipeline de filtres en flux, en préservant les encodages d’image terminaux tels que DCT et JPX pour les appelants qui ont besoin de charges utiles natives
Version 3.491.0
Ajouté
InsertPageElementClipPath,ReplacePageElementClipPathetDeletePageElementClipPathajoutent un rognage local à un élément de page exact ou modifient un composant source capturé avec les règles de remplissage non nul et pair-impair
Modifié
- Les composants de rognage conservent désormais leur couche source, leur plage d’instructions, leur profondeur d’imbrication et leur empreinte normalisée, de sorte que les sources modifiables se distinguent des limites initiales, des contours de texte, des Forms imbriqués, des tracés mal formés et des objets de tracé inter-couches
- Le rognage local utilise des portées d’état graphique équilibrées, y compris une reconstruction valide des objets de texte, tandis que la suppression d’un rognage d’un tracé qui peint aussi préserve le contour ou le remplissage d’origine
Version 3.490.0
Ajouté
SetPageElementMarkedContentTextProperty,SetPageElementMarkedContentPropertySourceetDeletePageElementMarkedContentPropertymodifient le texte Unicode, les objets PDF sérialisés et les propriétés existantes sur un cadre de contenu marqué énuméré exact
Modifié
- Les ressources de propriétés nommées sont modifiées via une copie à l’écriture locale à la page, les listes de propriétés en ligne sont automatiquement promues lorsqu’une valeur indirecte exige une ressource, et la suppression de la dernière propriété compacte
BDCenBMC - Les modifications de contenu marqué valident l’instruction source capturée et l’instantané de propriétés résolu avant l’écriture, puis invalident tous les handles d’éléments de page après une modification réussie
Version 3.489.0
Ajouté
GetTextBlockCharContentLocationetDAGetTextBlockCharContentLocationassocient chaque position UTF-16 extraite à sa couche de contenu, son flux, son instruction, son opérande, son élément du tableauTJet sa plage d’octets source encodéeReplaceTextBlockCharSourceByteseffectue un remplacement local des octets encodés par la police mappés, protégé par empreinte, tout en préservant les chaînes adjacentes et les valeurs de crénage
Modifié
- Les emplacements générés,
/ActualText, de Form imbriqué, transcodés et inter-couches sont explicitement classés en lecture seule, tandis que les expansions de ligatures conservent leur plage partagée de glyphes source - La recherche d’étendues de contenu utilise une recherche binaire et les listes extraites conservent deux empreintes de couches indépendantes pour rejeter les éditions périmées avant l’analyse ou la réécriture du contenu de page
Version 3.488.0
Ajouté
ImportPageAsFormXObjectimporte une page depuis tout document ouvert comme handle de page capturée réutilisable, sans modifier l’un ni l’autre des arbres de pages
Modifié
- L’importation de page vers Form copie uniquement le contenu de page décodé, la fermeture indépendante des ressources héritées et les entrées compatibles Form de groupe, de métadonnées et d’informations de pièce, en excluant les annotations, les vignettes et la structure propre aux pages
- Les boîtes de pages sélectionnées utilisent les règles de repli standard, la rotation héritée par quadrants est normalisée dans la matrice Form et les placements répétés partagent un flux de contenu compressé unique
Version 3.487.0
Ajouté
- Les handles d’éléments de page exposent désormais leur pile active de contenu marqué de l’extérieur vers l’intérieur, leurs balises, leurs valeurs
/MCIDvalidées, leurs opérandes de propriétés d’origine et chaque entrée des dictionnaires directs ou adossés à des ressources résolus
Modifié
- Le traçage d’état de contenu résout les ressources
/Propertiesnommées une fois par portée de ressources et conserve des cadres de contenu marqué immuables, sans réanalyser le contenu de page pour des requêtes répétées - L’imbrication de contenu marqué est suivie indépendamment de
q/Qet est bornée à chaque flux de contenu de page ou Form, de sorte que les séquences mal formées non fermées ne peuvent pas fuiter dans un autre flux
Version 3.486.0
Ajouté
- Les handles d’éléments de page exposent désormais chaque composant de leur intersection de rognage effective, y compris les commandes transformées de déplacement, de ligne, de cubique et de fermeture, les règles de remplissage non nul ou pair-impair, les bornes des composants et les diagnostics de région combinée
Modifié
- Le traçage d’état de contenu conserve des chaînes de rognage immuables à travers les frontières de pages, la restauration
q/Qet les frontières de Form, tout en partageant les composants inchangés entre instantanés - L’énumération des éléments de page collecte les cibles de mutation de tracés et les états graphiques dans la même passe de contenu, évitant l’analyse supplémentaire de couche de tracé antérieure
Version 3.485.0
Ajouté
GetTextBlockCharUnicodeFlagsetDAGetTextBlockCharUnicodeFlagsexposent des diagnostics par caractère de mappage Unicode, de repli, de mappage manquant, de code non mappé, de mappage invalide et de remplacement
Modifié
- L’extraction de texte conserve la provenance du mappage Unicode à côté de chaque unité de code UTF-16 et valide les paires de substitution avant d’accepter la sortie
ToUnicode - Les mappages invalides ou partiels utilisent désormais un repli indépendant d’encodage de police et émettent U+FFFD lorsqu’aucun repli significatif n’existe
Corrigé
- Les mappages Unicode d’identité renvoient désormais une unité de code mappée au lieu de traiter la valeur de code source comme un nombre de sorties
Version 3.484.0
Ajouté
- Les blocs de texte du document sélectionné et de Direct Access exposent désormais, par caractère, des angles de ligne de base, des origines, des matrices de cellules, des quads ajustés de la descente et des boîtes alignées sur les axes
GetTextBlockCharBoxajoute un équivalent document sélectionné à la requête de boîte Direct Access existante
Modifié
- L’extraction de texte conserve les vecteurs de ligne de base, d’avancement et de hauteur de cellule une fois par caractère, de sorte que les requêtes de géométrie préservent rotation, cisaillement et lignes de base inversées en temps constant
DAGetTextBlockCharBoxdérive désormais son résultat directement de la géométrie de caractère conservée au lieu de parcourir chaque largeur précédente
Corrigé
- Les largeurs de caractères du document sélectionné et les dumps de blocs de texte appliquent désormais l’échelle de coordonnées configurée exactement une fois
Version 3.483.0
Ajouté
GetTextBlockCharSourceFlagsetDAGetTextBlockCharSourceFlagsexposent une provenance bit à bit pour les caractères générés, les tirets et les remplacements/ActualTexthonorés
Modifié
- L’extraction de blocs de texte conserve désormais les indicateurs de source de caractères à côté des tableaux de texte et d’avancement existants, y compris les espaces déduits des grands écarts entre caractères, sans réanalyser le contenu de page pour des requêtes répétées
Version 3.482.0
Ajouté
GetXRefDiagnosticsetDAGetXRefDiagnosticsrenvoient des rapports JSON sur les types effectifs de références croisées, les positions d’octets, les frontières de trailer, les nombres d’entrées et chaque table ou flux de la chaîne de révisions
Modifié
- Les liens de références hybrides, les tentatives après décalage d’en-tête et les décisions de récupération de documents modifiables restent désormais visibles comme preuves de diagnostic distinctes, y compris les scans bruts d’objets, la récupération d’objets compressés et les trailers synthétisés
Version 3.481.0
Ajouté
- Les documents à plages d’octets adossés à des callbacks et Direct Access peuvent mettre en file des tâches de préchargement en arrière-plan de dépendances de pages, de formulaires ou d’objets, avec quatre priorités d’ordonnancement, une annulation, une attente et des diagnostics de progression JSON
- Le préchargement de dépendances itère la découverte des plages manquantes jusqu’à ce que la cible soit prête, avec des limites configurables d’octets source, de lecture anticipée et de passes de planification
Modifié
- Chaque flux à plages d’octets possède désormais un worker FIFO ordonné par priorité qui partage le cache de plages borné tout en utilisant un état d’analyseur isolé, ce qui permet au travail documentaire de premier plan de continuer sans partager un lecteur mutable
- L’annulation en file n’effectue aucune lecture source, l’annulation en cours est vérifiée avant chaque fragment, et la destruction du flux purge le travail en suspens avant de libérer sa source
Version 3.480.0
Ajouté
LoadFromRangeSourceaccepte un callback de disponibilité optionnel sans récupération pour les magasins progressifs, avec des requêtes document sélectionné et Direct Access sur la disponibilité des pages, des formulaires et des objets indirects- Les rapports de disponibilité renvoient en JSON les plages d’octets requises et manquantes fusionnées, la complétude des dépendances et les compteurs de parcours d’objets
Modifié
- Les flux à plages d’octets peuvent tester la couverture en cache et disponible à la source sans lire d’octets, sans déplacer le curseur du flux ni modifier les statistiques du cache
- La disponibilité des pages ne suit que le chemin de l’arbre de pages cible et les dépendances de traitement atteignables, tandis que les plages indisponibles sont signalées sans invoquer le callback de lecture
Version 3.479.0
Ajouté
TByteRangeStream.ReadAtfournit des lectures absolues indépendantes du curseur, avec un partage single-flight au sein d’un même fragment, une fusion bornée de requêtes adjacentes et une fenêtre de collecte configurable- Les diagnostics du cache de plages rapportent désormais les requêtes en attente, la fenêtre de collecte active, les requêtes servies par coalescence et les lectures physiques couvrant plusieurs fragments
Modifié
- Les lectures différées des documents adossés à des callbacks et à des URL utilisent désormais des décalages absolus, sérialisent les callbacks source et combinent les fragments adjacents concurrents en lectures source plafonnées à 16 MiB
- Le vidage d’un cache de plages pendant une récupération en vol empêche désormais cette complétion périmée de repeupler le cache ou les compteurs d’après-vidage, tandis que les demandeurs en attente existants reçoivent toujours leurs octets
Version 3.478.0
Ajouté
- Les flux à plages d’octets conservent désormais des fragments alignés sous un budget d’octets explicite de type moins récemment utilisé et rapportent le nombre de fenêtres, les octets conservés, les succès, les échecs, les évictions, les lectures source, les octets source et les lectures répétées
LoadFromRangeSourceet la variante DelphiDAOpenFromURLacceptent un budget de cache initial, avec de nouvelles API document sélectionné et Direct Access pour inspecter, redimensionner et vider le cache actif
Modifié
- Le réchauffement de la première page linéarisée reste désormais dans le budget d’octets conservés configuré
Version 3.477.0
Ajouté
LoadFromRangeSourcecharge un document modifiable complet via un callback de plages d’octets aléatoires fourni par l’appelant, permettant aux entrées HTTP, bases de données, magasins d’objets et personnalisées de rester distantes pendant que l’analyseur ne récupère que les plages nécessaires au chargement et aux opérations différées- Le nouveau contrat
TPDFlibRangeReadEventreçoit des décalages absolus, des tampons de destination et des nombres bornés, le fournisseur de callbacks restant la propriété de l’appelant pendant toute la durée de vie du document chargé
Version 3.476.0
Ajouté
- Ajout de la création PDF/VT-3 sur des bases PDF/X-6, PDF/X-6p et PDF/X-6n, avec des métadonnées d’identification synchronisées, une couverture obligatoire des parties de document et un preflight dédié
Modifié
- Les hiérarchies de parties de document émettent et valident désormais des blocs enfants standard de 8192 entrées, avec des contraintes XML de noms et de types plus strictes
Version 3.475.0
Modifié
TPDFlibContentGraphicsState.BlackPointCompensationrapporte désormais l’état effectifDefault,ONouOFFà travers le contenu de page, la restauration d’états graphiques et les Form XObjects énumérés récursivement- Le preflight PDF/X-6 rejette désormais les entrées
UseBlackPtCompdont le type ou la valeur est en dehors du modèle de compensation du point noir PDF 2.0
Version 3.474.0
Modifié
- Le preflight PDF/X-6 valide désormais les indicateurs d’annotations imprimables, les apparences normales déterministes, les états d’apparence des boutons, les champs AcroForm et de signature, les exclusions d’apparences générées par la visionneuse ainsi que le placement et le chaînage sûrs des actions
- La création PDF/X-6 n’autorise JavaScript que sur les annotations Link directement activées, limite les actions nommées à la navigation entre pages et rejette les chemins d’actions dangereux, au niveau du document, de la page et des champs de formulaire, avant qu’ils ne modifient le document
Version 3.473.0
Ajouté
SetPDFXModeaccepte désormais le mode 5 pour l’échange de couleurs de procédé PDF/X-6p et le mode 6 pour l’échange à n colorants PDF/X-6n, tous deux utilisant PDF 2.0 et des références de profils de sortie externes- Les nouvelles API
SetOutputIntentProfileReferenceetAddOutputIntentProfileReferenceURLcréent des dictionnaires/DestOutputProfileRefau niveau du document ou de la page, dérivent la somme de contrôle, la version et la signature d’espace colorimétrique ICC, valident les métadonnées de périphérique de sortie et de colorants, et préservent un ou plusieurs emplacements de récupération RFC 3986 sans intégrer les octets du profil
Modifié
- Le preflight PDF/X reconnaît les identifiants XMP PDF/X-6p et PDF/X-6n et valide le type de profil externe, les longueurs de métadonnées, les signatures de couleurs de procédé ou de n colorants, les tables de colorants et les spécifications de fichiers URL
GetEffectivePageOutputIntentJSONrapporte désormais les métadonnées du profil référencé, y comprisprofileCS,profileName,iccVersion,checkSum,profileURLsetcolorants, après création ou chargement en aller-retour
Version 3.472.0
Ajouté
- Les nouvelles API
SetPageOutputIntent,ClearPageOutputIntentsetGetEffectivePageOutputIntentJSONcréent, suppriment et inspectent des intentions de sortie au niveau de la page PDF 2.0, y compris le repli effectif au niveau du document
Modifié
- Le preflight PDF/X-6 accepte désormais les intentions de sortie au niveau de la page, leur donne la priorité sur l’intention du document et vérifie que chaque page se résout vers un profil Gray, RGB ou CMYK intégré
Version 3.471.0
Ajouté
SetPDFXMode(4)crée des documents d’échange complet PDF/X-6 avec une syntaxe PDF 2.0, une identification XMP PDF/X-6 et une intention de sortie intégrée avec gestion des couleurs
Modifié
- Le preflight PDF/X reconnaît le PDF/X-6, exige une syntaxe PDF 2.0 et vérifie que l’intention de sortie porte une déclaration de profil ICC Gray, RGB ou CMYK intégrée
Version 3.470.0
Ajouté
- La mise en page HTML prend en charge la direction Flexbox, le retour à la ligne, les facteurs grow et shrink, la base, les espacements, la justification et l’alignement sur l’axe transversal
- La mise en page HTML prend en charge les pistes CSS Grid explicites, le dimensionnement fractionnaire, les pistes répétées, les emprises (spans), le placement automatique en lignes ou en colonnes, les espacements et l’alignement des éléments
- Les articles HTML prennent en charge les notes de bas de page numérotées, qui réservent le bas du cadre, réorganisent le texte du corps et conservent la numérotation à travers les continuations de page
Modifié
- La mesure HTML et la relecture depuis le cache incluent la géométrie Flexbox, Grid et des notes de bas de page, tout en conservant des limites bornées pour les conteneurs et les pistes
Corrigé
- L’effacement en masse des dictionnaires PDF et le renommage de clés invalident les index de clés en cache, ce qui évite les recherches obsolètes lors du compactage mémoire et du traitement répété de documents
Version 3.469.1
Corrigé
- L’importation EMF et la conversion des DC de canvas préservent désormais le texte Unicode et les correspondances de glyphes pour les polices TrueType intégrées et non intégrées
NewPageFromCanvasDCajoute chaque page demandée, tandis queTPDFlibPrintervalide chaque canvas exactement une fois, sans perdre ni dupliquer de pages
Version 3.469.0
Ajouté
SetImageSoftMaskExattache des masques doux d’image en niveaux de gris avec des couleurs matte optionnellesNewSoftMaskGraphicsStatecrée des états graphiques alpha, luminosité, fonction de transfert et réinitialisation, réutilisables, à partir de Form XObjects capturésFlattenTransparencyremplace les pages sélectionnées par un contenu statique opaque, à une résolution et avec une couleur d’arrière-plan choisies, pour les anciennes versions de PDF et les flux de travail d’archivage
Modifié
- L’aplatissement de la transparence traite une page à la fois, normalise la rotation visuelle, préserve facultativement les annotations interactives, gère la progression et l’annulation, et supprime par défaut les ressources de transparence inaccessibles
Version 3.468.0
Ajouté
- Les images AVIF, HEIF, HEIC et JPEG XL peuvent être importées via les API d’image existantes ou les méthodes dédiées
AddModernImageFromFile,AddModernImageFromStreametAddModernImageFromString SetModernImageCodecLibrary,ModernImageCodecAvailableet un callback de décodeur offrent une sélection de codecs in-process déployable, sans fichiers de conversion temporaires
Modifié
- Le décodage des images modernes préserve l’orientation source, l’alpha, les profils ICC et une profondeur de canal allant jusqu’à 16 bits avant de réutiliser le pipeline d’image PNG natif
Corrigé
- La validation de l’usage des clés des seeds de signature lit désormais le contexte de certificat natif avec un alignement de pointeur correct sur Win64
Version 3.467.0
Ajouté
DeduplicateSimilarImagesconsolide les XObjects d’image perceptuellement similaires avec des seuils configurables de hachage de différence, d’erreur moyenne de canal et d’erreur maximale de canal, une prise en charge des simulations et une collecte facultative des orphelinsGetSimilarImageDeduplicationReportJSONetTPDFlibImageSimilarityDedupStatsrapportent la couverture du décodage, le travail de candidats indexés, les erreurs acceptées, les références redirigées et l’économie estimée de la charge encodée
Modifié
- La correspondance approximative d’images exige des dictionnaires d’image sémantiquement identiques, confirme les échantillons de couleur 64 × 64 décodés et utilise un index de hachage à huit bandes pour éviter les comparaisons exhaustives par paires
Version 3.466.0
Ajouté
EncodeImageToJPXStreametEncodeImageToJPXFileencodent une image bitmap en JPEG 2000 avec pertes ou réversible sans pertes, de façon configurable, dans un conteneur JP2 standardAddImageJPXFromFile,AddImageJPXFromStreametAddImageJPXFromStringajoutent directement une image bitmap encodée comme XObjects d’imageJPXDecode
Modifié
- La création d’images JPEG 2000 valide les options de qualité et de compression sans pertes, restaure les positions des flux d’entrée appartenant à l’appelant, supprime les sorties partielles en cas d’échec, exige automatiquement PDF 1.5 et conserve le contrôle existant de compatibilité PDF/A-1
Version 3.465.0
Ajouté
RenderPageTileToStreametRenderPageTileToFileeffectuent le rendu de régions arbitraires en pixels périphériques, avec chevauchement découpé et arrière-plans blancs, à clé de transparence ou personnalisésRenderPageTilesToFiles,RenderPageTiledToStreametRenderPageTiledToFileproduisent des grilles de tuiles parallèles ou assemblent leurs limites exactes en une image de page sans coutureSetRenderSurfaceCacheLimit,GetRenderSurfaceCacheInfoetClearRenderSurfaceCachefournissent un cache LRU optionnel et thread-safe, avec des budgets indépendants en entrées et en octets pour les surfaces de tuiles entièrement composées
Modifié
- Le rendu parallèle d’une seule page préchauffe désormais une display list partagée avant la distribution aux threads de travail, si bien que les flux de contenu ne sont analysés qu’une seule fois, tandis que les compilateurs non pris en charge conservent un chemin série déterministe
Version 3.464.0
Ajouté
GetXFARenderedPageCountet la familleRenderXFAPageToStream,RenderXFAPageToStringetRenderXFAPageToFileproduisent des pages raster statiques à partir de modèles XFA, de jeux de données liés et de sauts de page explicites, sans modifier le document sourceConvertXFAToAcroFormconvertit les contrôles texte, mot de passe, choix, case à cocher, bouton-poussoir et signature pris en charge en champs modifiables, tout en préservant les noms, les valeurs, les options, les indicateurs, les pages et les limites
Modifié
- La compression Flate en une seule passe sur de gros volumes fournit désormais au backend natif une queue d’entrée protégée, ce qui évite les sommes de contrôle Adler invalides dans la sortie PNG haute résolution tout en conservant la sortie compressée
Version 3.463.0
Ajouté
RenderPageLayerToStream,RenderPageLayerToStringetRenderPageLayerToFileexportent le contenu de base de la page, les annotations, les champs de formulaire ou tous les objets interactifs sous forme de calques PNG composables indépendammentFlattenFormFieldTaggedetFlattenFormFieldsTaggedOnPageRangeintègrent les apparences de champs dans le contenu statique de la page tout en conservant ou en créant une sémantique de structureFormaccessible
Modifié
- Le rendu des seuls objets interactifs ignore l’interpréteur de contenu de base, utilise une seule passe d’apparence des annotations et écrit un arrière-plan transparent sans modifier les réglages persistants du moteur de rendu
- L’aplatissement balisé convertit une association
OBJRdu ParentTree spécifique aux Widgets en contenu marquéMCRde la page, préserve les textes alternatifs et réels existants et laisse les champs intacts lorsqu’une association sûre ne peut être prouvée
Version 3.462.0
Ajouté
HitTestAnnotationetGetAnnotationHitsJSONtrouvent l’annotation la plus haute ou toutes les annotations à un point de la page, avec une géométrie sensible au sous-type et des options de tolérance, de visibilité et de rectangle englobantMoveAnnotationZOrderréordonne sur place les références d’annotations existantes, etSimplifyInkAnnotationsréduit les points des traits Ink avec une déviation géométrique bornée et des statistiques détaillées
Modifié
- L’interaction avec les annotations teste désormais les quadrilatères de balisage, les tracés vectoriels, la géométrie des ellipses et les zones remplies après un rejet rapide par rectangle, tandis que les apparences Ink modifiées sont reconstruites automatiquement sauf report explicite
Version 3.461.0
Ajouté
RepairAnnotationAppearancesreconstruit les apparences normales manquantes, obsolètes, invalides, incohérentes avec l’état ou invisibles sur toutes les pages et renvoie des statistiques par problème et par catégorie d’annotationGetAnnotationAppearanceAuditJSONsignale les problèmes d’apparence de chaque annotation et des décomptes agrégés sans modifier le document
Modifié
- La génération d’apparences de balisage, de formes, de tracés, de texte libre et d’icônes partage désormais un unique balayage du document, des constructeurs de sortie incrémentaux et des empreintes sources compactes pour une détermination déterministe du caractère obsolète
Version 3.460.0
Ajouté
ExecuteFormFieldScriptexécute un sous-ensemble local borné d’actions de validation, de calcul et de formatage de formulaires, sans exposer de fonctions de fichier, de réseau, de processus, d’interface ou de code dynamiqueRecalculateFormFieldseffectue un calcul incrémental complet ou limité aux dépendances, etGetFormCalculationGraphJSONrapporte les dépendances des champs, leurs positions dans l’ordre de calcul et les cycles
Modifié
- Le recalcul de formulaire évalue dans un instantané privé de valeurs, ordonne les champs prêts selon l’ordre de calcul AcroForm, rejette les cycles de dépendances avant toute mutation et ne valide les valeurs qu’une fois le graphe sélectionné terminé
Version 3.459.0
Ajouté
MergeDocumentExajoute des stratégies explicites pour les champs de formulaire en doublon : rejeter la fusion, conserver un nom partagé avec des valeurs synchronisées ou attribuer des suffixes numériques déterministes
Modifié
- Le rejet des champs en doublon est vérifié avant toute modification des numéros d’objets, des arborescences de pages ou des tableaux de formulaires, de sorte que les documents cible et source restent réutilisables après une fusion rejetée
Version 3.458.0
Ajouté
DrawOpenTypeText,GetOpenTypeTextWidthetGetOpenTypeGlyphRunmettent en forme, mesurent, dessinent et inspectent le texte directement depuis un handle de police TrueType ou OpenType existant, sans exiger de nom de fonte installée- Des modules natifs portables de mise en forme et de sous-ensemblement OpenType sont fournis pour Windows 32 et 64 bits, avec des sources compilables Linux et macOS et une variable d’environnement de substitution pour les chemins de déploiement personnalisés
Modifié
- Le dessin en écritures complexes privilégie désormais la mise en forme GSUB et GPOS sur les octets de la police, y compris substitutions, crénage, attachements cursifs et de signes, tandis qu’un repli Pascal borné couvre la jonction arabe et les formats de recherche de mise en page OpenType courants lorsque le module natif est indisponible
- Le sous-ensemblement des polices mises en forme conserve désormais les identifiants de glyphes et clôt l’ensemble des dépendances de mise en page, de polices variables et de polices couleur, y compris les données COLR/CPAL et fvar/gvar/HVAR
Version 3.457.0
Ajouté
CreateOpenTypeFontVariationcrée des polices CFF statiques réutilisables à partir des coordonnées d’axes demandées d’une police variable CFF2
Modifié
- L’import OpenType CFF2 sélectionne désormais une instance statique par défaut pour le dessin et l’intégration immédiats, tout en conservant le programme variable pour une instanciation ultérieure
- L’instanciation CFF2 évalue les magasins de variations,
vsindexetblendsur les sous-routines locales et globales développées, applique les variations de métriques horizontales et globales, et émet une police OpenType CFF1 bornée à somme de contrôle correcte pour les chemins existants d’intégration et de sous-ensemblement CFF
Version 3.456.0
Ajouté
- Ajout de la prise en charge de l’entrée WOFF2 pour les points d’entrée TrueType, OpenType et collections, sous Windows 10 version 1703 ou ultérieure, y compris les contours et métriques TrueType transformés, les polices CFF et les faces de collections
Modifié
- Les conteneurs de polices web sont décompressés une seule fois en mémoire, utilisent la meilleure cmap Unicode disponible pour la correspondance de caractères, et intègrent ou exportent le sfnt résultant plutôt que le conteneur compressé
Version 3.455.0
Ajouté
GetFontVariationAxesexpose chaque axe de police variable TrueType avec son nom localisé, sa plage de conception, sa valeur par défaut et son état masqué, tandis queCreateTrueTypeFontVariationcrée une police statique réutilisable à partir des coordonnées d’axes demandées
Modifié
- L’instanciation TrueType variable applique les données
avar,gvar,HVARetMVAR, aplatit les contours composites, reconstruit les métriques horizontales et globales, supprime les tables de variation et d’hinting obsolètes, et émet un sfnt à somme de contrôle correcte pour le dessin, l’intégration, le sous-ensemblement et l’inspection des glyphes SaveFontToFilepeut exporter directement les programmes TrueType conservés en mémoire, y compris les instances de polices variables nouvellement créées avant tout enregistrement de PDF
Version 3.454.0
Ajouté
GetFontColorGlyphetGetFontColorGlyphByIndexexposent les graphes de peinture COLR v0 et v1, les palettes CPAL, les documents SVG-in-OT et les strikes de bitmaps intégrés, pour une inspection et un rendu directs par l’application
Modifié
- L’inspection des tables de polices couleur utilise un accès sfnt borné et paresseux et participe au budget d’octets partagé du cache de polices, évitant l’analyse hâtive des contours pour les grandes polices couleur
Version 3.453.0
Ajouté
SetFontCacheLimit,GetFontCacheInfoetClearFontCachefournissent un budget d’octets partagé, une éviction des entrées les moins récemment utilisées et des statistiques de succès, d’échec et d’occupation pour les ressources de faces de polices conservées, les exécutions de texte mises en forme et les programmes de contours analysésGetFontGlyphIndexfait correspondre les points de code Unicode complets via les tables cmap TrueType de format 4 et de format 12, tandis queGetFontGlyphOutlinerenvoie les tracés simples et composites transformés avec les métriques brutes d’avance, de dé-bordement gauche, de rectangle englobant et d’unités par em
Modifié
- Les mesures répétées de texte mis en forme et les appels de dessin réutilisent des exécutions mises en forme profondément copiées dans le cadre du budget de cache partagé, et l’inspection répétée de glyphes réutilise le programme de police analysé au lieu de le réanalyser à chaque glyphe
- Les programmes de polices binaires chargés depuis des chaînes et des conteneurs WOFF conservent un flux d’octets bruts possédé, empêchant le recodage du texte et les références de flux expirées lors d’un accès différé aux tables
Version 3.452.0
Ajouté
soCanonicalEquivalentpermet à la recherche de texte, à la recherche par lot et aux flux de remplacement de reconnaître les textes équivalents au sens canonique en NFC et NFD, tout en rapportant les décalages et les longueurs dans le texte extrait d’originesoGraphemeClustersrestreint les correspondances aux frontières de groupes de graphèmes étendus et fait consommer au joker?un groupe complet, protégeant ainsi les paires de substitution, les séquences combinatoires, les séquences emoji ZWJ, les drapeaux et les ligatures indiennes
Modifié
- La normalisation Unicode et la segmentation en graphèmes utilisent des tables compactes générées à partir d’Unicode 15.1 sur toutes les plateformes prises en charge, sans dépendre d’un service de texte du système d’exploitation
Version 3.451.0
Ajouté
ExternalizeInlineImagesremplace les images en ligne prises en charge et répétées d’une plage de pages sélectionnée par un seul XObject d’image partagé lorsque la taille sérialisée estimée diminue
Modifié
- L’externalisation des images en ligne préserve les masques d’image, l’interpolation, les tableaux de décodage, les filtres et les paramètres de décodage, et compresse opportunistiquement en Flate les charges utiles non filtrées lorsqu’elles s’en trouvent réduites
- Le regroupement SHA-256 exact, les noms de ressources déterministes, l’élimination des pages en double, le rapport de progression et l’annulation coopérative maintiennent les résultats d’optimisation bornés et reproductibles
- Les entrées de dictionnaire en ligne inconnues et les espaces couleur non périphériques restent identiques octet pour octet au lieu d’être promus sans sémantique complète
Version 3.450.0
Ajouté
NormalizeContentStreamscanonise les espaces et les jetons numériques sur une plage de pages sélectionnée, tout en préservant les opérateurs, les valeurs de chaîne et les charges utiles des images en ligne
Modifié
- La compression de contenu émet désormais des jetons canoniques même lorsque l’optimisation par pénétration ne trouve aucune instruction redondante
Corrigé
- Les nombres réels PDF comportant un signe plus explicite en tête conservent désormais leur valeur lors de l’analyse et de la normalisation
- Les données de flux remplacées ne conservent plus les paramètres de décodage obsolètes de leur précédent pipeline de filtres
Version 3.449.0
Ajouté
SetTempFileQuota,GetTempFileQuotaetCompactDocumentMemoryfournissent un spooling d’objets sur disque borné avec repli automatique en mémoire
Modifié
- Les données temporaires d’objets utilisent désormais une recherche indexée sensible aux générations et restent disponibles après la fermeture du handle d’écriture du spool
Version 3.448.0
Ajouté
SetRecoveryModeetGetRecoveryModesélectionnent le mode strict, la réparation à partir du trailer ou la récupération au mieux avant le chargement d’entrées PDF endommagées
Modifié
SaveToStreamécrit désormais directement vers des cibles en écriture seule non positionnables tout en conservant le chemin de sérialisation par blocs existant- La récupération au mieux reste le mode par défaut, le mode strict désactive la reconstruction brute et le mode réparation exige un trailer survivant au lieu d’en synthétiser un
Version 3.447.0
Ajouté
SetOptimizationWorkersetGetOptimizationWorkersconfigurent des lots de threads de travail bornés pour l’optimisation d’images et la recompression de flux Flate, avec sélection automatique des processeurs par défaut et un mode de compatibilité sérieOptimizeImages,RecompressStreams,MergeFileList,MergeFileListFastetMergeFileListStrictrapportent désormais une progression suivie et respectent l’annulation coopérative viaAbort
Modifié
- La recompression Flate et le transcodage d’images autonomes s’exécutent en lots parallèles bornés, tandis que les mutations du document restent déterministes et mono-thread
- L’optimisation d’images conserve désormais les données bitmap décodées pour le réencodage, ignore les images de masque pochoir et de clé de couleur, et supprime les paramètres de décodage obsolètes lors de l’application de remplacements JPEG
- Les fusions de grandes listes de fichiers ne gardent ouverts que les lecteurs sources actifs, rapportent la progression par entrée et par nombre d’objets, et suppriment la sortie incomplète en cas d’annulation ou d’échec
Corrigé
- Les opérations de fusion multi-fichiers rapportent désormais leur achèvement lorsqu’plus d’une source a été fusionnée
- Le sous-échantillonnage et l’optimisation d’images conservent désormais le bitmap décodé requis par leurs chemins de réencodage
Version 3.446.0
Modifié
- La surcharge à deux paramètres de
SetDisplayListCacheLimitborne la mémoire des display lists conservées autant que leur nombre d’entrées, tandis que la surcharge existante préserve le budget d’octets configuré - L’éviction des display lists privilégie désormais le contenu fréquemment réutilisé offrant la plus grande valeur de reconstruction par octet conservé, et les listes individuellement trop volumineuses contournent la rétention sans bloquer le rendu
- Les opérations actives de capture et de relecture épinglent leurs listes, les recherches concurrentes n’observent jamais des enregistrements partiellement construits, et les captures annulées ou échouées sont écartées
GetDisplayListCacheInfoetGetResourceUsageStatisticsJSONrapportent les octets conservés, les limites, le coût de relecture estimé, les évictions, les contournements, les captures rejetées et la contention de construction
Corrigé
- La relecture des display lists libère désormais les chaînes d’opérandes remplacées au lieu de conserver une allocation de chaque opérateur antérieur
Version 3.445.0
Modifié
- La surcharge à trois paramètres de
SetMemoryBudgetajoute un budget d’octets décodés pour le cache de flux d’objets compressés de chaque document - Les entrées du cache de flux d’objets appliquent désormais une éviction des entrées les moins récemment utilisées, à la fois par nombre d’entrées et par taille de la charge décodée, tandis que les entrées trop volumineuses contournent la mise en cache sans bloquer l’accès aux objets
- Les budgets mémoire configurés avant le chargement s’appliquent désormais aux documents existants et futurs et peuvent être interrogés via
GetMemoryBudget GetResourceUsageStatisticsJSONrapporte désormais les octets courants du cache de flux d’objets, les limites d’octets et les décomptes d’éviction
Version 3.444.0
Ajouté
- La surcharge à trois paramètres de
SetParserLimitslimite les erreurs d’analyse tolérées et arrête la récupération déterministe avecpdsErrorLimitlorsque le budget est épuisé SetStreamDecodeLimitsrejette les chaînes de filtres trop longues avant l’allocation des décodeurs et applique un budget cumulé d’octets décodés à travers les flux d’une même opération suivie- Les chemins de décodage en flux et en mémoire partagent le même comptage des filtres et des octets, y compris le décodage des flux d’objets pendant le chargement du document
GetResourceUsageStatisticsJSONrapporte les estimations de mémoire de structure et de flux, les décomptes d’images et de polices, les pics d’octets décodés, les échecs, ainsi que les succès et échecs des caches d’objets, de flux d’objets et de display listsResetResourceUsageStatisticsréinitialise les compteurs de diagnostic sans abandonner les documents chargés ni les caches réutilisables
Version 3.443.0
Ajouté
SetParserLimitsetGetParserLimitsconfigurent et inspectent des limites strictes pour les objets PDF imbriqués et le nombre d’entrées de tout tableau ou dictionnaire analysé directement- Les limites d’analyse s’appliquent avant que les chemins de chargement de fichier, de flux, de chaîne, de journal d’éditions, de QDF et de contrôle d’intégrité ne consomment des objets, tandis que la valeur par défaut conserve la limite d’imbrication existante et une taille de conteneur non restreinte
TPDFStructure.DecodeMaxContainerItemsrejette les tableaux et dictionnaires trop volumineux avec le statut distinctpdsContainerLimitet préserve la position de l’échecRegenerateFormAppearancesrafraîchit chaque champ AcroForm de premier niveau et enfant en un seul parcours, préserve facultativement les apparences utilisables et effaceNeedAppearances
Version 3.442.0
Ajouté
CheckFileComplianceaccepte le test de conformité 3 pour PDF/X et audite un document terminé selon les règles d’échange d’impression ISO 15930 : identification d’édition pdfxid, niveau de syntaxe selon la partie, exactement une intention de sortie GTS_PDFX avec profil intégré et identifiant de condition, état de trapping déclaré, géométrie TrimBox et BleedBox par page, programmes de polices intégrés, types d’annotations interdits, JavaScript au niveau du document, fichiers intégrés, chiffrement et filtres LZWDecode- Les problèmes apparaissent sous forme de lignes préfixées par PDFX via le même handle de liste de chaînes que celui utilisé par les contrôleurs PDF/A et PDF/UA
Version 3.441.0
Ajouté
SetPDFXModesélectionne un mode de conformité PDF/X (1 = PDF/X-1a:2003, 2 = PDF/X-3:2003, 3 = PDF/X-4) qui applique les règles d’échange d’impression ISO 15930 dès la création et écrit l’identification d’édition XMP pdfxid- Le mode installe une OutputIntent GTS_PDFX (CMJN par défaut pour l’impression), déclare l’état /Trapped et fonde la version d’enregistrement sur la partie (PDF 1.4 pour X-1a / X-3, PDF 1.6 pour X-4)
- Contrôles à la création : espaces DeviceRGB et ICCBased rejetés sous X-1a (X-3 / X-4 exigent une OutputIntent RVB pour DeviceRGB), transparence et contenu facultatif rejetés hors de X-4, JavaScript, pièces jointes, chiffrement, images LZWDecode et polices non intégrées rejetés dans tous les modes
- Corrections à l’enregistrement : chaque page reçoit une TrimBox (par défaut la MediaBox), les indicateurs Print des annotations et le NeedAppearances de l’AcroForm sont normalisés et /Trapped est déclaré
GetInformation(203)rapporte le mode PDF/X actif
Version 3.440.0
Ajouté
AddWatermarkAnnotationFromImageIDécrit une annotation /Subtype /Watermark avec la matrice de stockage /FixedPrint /Matrix, de sorte que l’impression mette l’apparence à l’échelle de la page (ISO 32000-1 12.5.6.17)AddPrinterMarkAnnotationFromImageIDécrit une annotation /Subtype /PrinterMark portant le nom de marque d’imprimeur /PN (ISO 32000-1 12.5.6.18)SetFillColorICCBasedetSetLineColorICCBaseddessinent via des espaces couleur /ICCBased au niveau du contenu, adossés à un fichier de profil ICC intégré, le nombre de composants étant lu dans l’en-tête du profil et les profils identiques partageant une même ressource
Version 3.439.0
Ajouté
- Les conteneurs de polices web WOFF 1.0 s’importent en toute transparence via chaque point d’entrée TrueType (
AddTrueTypeFontFromFile, API de flux) ; les tables sont décompressées depuis leurs flux zlib et le répertoire sfnt aplati est reconstruit avant l’analyse - Les documents intègrent le programme sfnt déballé dans FontFile2, jamais le conteneur WOFF, ce qui garde les polices intégrées valides pour tous les lecteurs
Version 3.438.0
Ajouté
- L’application des seed values s’étend à
LegalAttestation, aux entréesIssuerde certificats acceptables et aux motifs positionnelsKeyUsage(ISO 32000-2 tableaux 237 et 238), avec les API de création correspondantes : valeurs legal-attestation deSetSignatureFieldSeedValue,AddSignatureFieldSeedIssueretSetSignatureFieldSeedKeyUsage SetSignProcessLegalAttestationdéclare l’attestation du signataire, validée lors de la signature contre une contrainte LegalAttestation requiseTPDFlibPKCS11Client.InitializeUserPINetChangeUserPINadministrent les codes PIN des jetons via une session dédiée en lecture/écriture, avec connexion d’agent de sécurité pourC_InitPIN
Version 3.437.0
Ajouté
SetSignProcessRSAPSSPaddingsigne les signatures RSA détachées avec le remplissage RSASSA-PSS, en émettant le jeu complet de paramètres RFC 4055 (MGF1 avec l’empreinte de signature, longueur de sel égale à l’empreinte) dans l’identifiant d’algorithme de signature CMS- Les signatures avec remplissage PSS font l’aller-retour dans le vérificateur de la bibliothèque, qui analyse désormais les paramètres RFC 4055 (encodages explicites et implicites) et les valide via CNG avec la longueur de sel déclarée
Version 3.436.0
Corrigé
- L’extraction de texte décode désormais les noms de glyphes supplémentaires AGL (formes
uniXXXXetuXXXXXX) portés dans les tableaux /Differences des polices livrées sans table ToUnicode - Les emplacements d’encodage dont le nom de glyphe ne renvoie à rien retombent désormais sur l’encodage de base de la police au lieu d’exposer des points de code bruts ou des caractères de remplacement pendant l’extraction
- Les polices TrueType intégrées symboliques sans table ToUnicode se décodent désormais via les tables cmap du programme de police intégré, retrouvant l’Unicode réel derrière chaque code de caractère
Version 3.435.0
Ajouté
AddTrueTypeCollectionFontFromFileintègre n’importe quelle face d’une collection TrueType (.ttc) par index commençant à zéro ; le comportement précédent prenait toujours la première faceGetJPEGFileOrientationlit l’indicateur d’orientation EXIF (1..8, 0 en son absence) d’un fichier JPEG etGetJPEGFileICCProfileToFileextrait son profil ICC APP2 sans importer l’image
Version 3.434.0
Ajouté
- Les options de rendu 11..15 correspondent aux indicateurs de qualité PDFium : rendu de texte LCD activé/désactivé, texte sans lissage, image sans lissage, tracé sans lissage et tramage forcé ; les valeurs par défaut conservent la sortie historique et les backends GDI+/Cairo ignorent ces indicateurs
SetDisplayListCacheLimitplafonne le cache des display lists de flux de contenu analysés une seule fois ; une limite positive évince les entrées les moins récemment créées avant l’insertion, zéro rétablit le comportement non borné
Version 3.433.0
Ajouté
- La sélection de l’empreinte d’horodatage des signatures accepte la famille SHA-3 (codes 5..7 dans
SetPAdESSignatureTimeStampDigestAlgorithm), en cohérence avec les options d’empreinte du signataire SetTimeStampRetryCountconfigure 0..10 tentatives TSA supplémentaires après des échecs de transport ou des réponses 5xx, avec un délai linéaire croissant entre les tentativesTPDFlibCertificateInfogagneFriendlyName,ThumbprintSHA1etThumbprintSHA256, lus depuis les propriétés du contexte de certificat pendantEnumCertificates- Le rapport de validation historique AdES gagne
BaselineProfile: 0 pour les sous-filtres non-PAdES, puis 1=B-B, 2=B-T, 3=B-LT, 4=B-LTA, déduits de l’horodatage et des preuves DSS
Version 3.432.0
Ajouté
- Les chaînes de plages de pages acceptent les mots-clés
odd,also even,firstetlast, également comme bornes de plage (3-last), dans toutes les API qui reçoivent une plage ReversePagesinverse l’ordre des pages du document chargéFlattenAnnotsOnPageRangeintègre toutes les annotations d’une plage dans le contenu de la page en un seul appelGetPageContentBoxrapporte le rectangle englobant de l’union de tous les éléments de texte, d’image et de tracé, etAutoCropPagesfixe la CropBox de chaque page à ce rectangle augmenté d’une margeAddBatesNumberingappose des numéros séquentiels complétés par des zéros, avec préfixe et suffixe, à neuf positions de style pavé numériqueExtractDocumentRevisionécrit l’état du document à n’importe quelle révision incrémentale antérieure dans un nouveau fichier, en tronquant la chaîne de révisionsSplitDocumentByOutlinedécoupe le document aux entrées de son signet, jusqu’à un niveau donné, en un fichier par sectionComparePageTextsWithcompare deux documents page par page sur le texte extrait et rapporte le nombre de différences et la première discordanceSanitizeDocumentgagneSANITIZE_XMP_PACKET(valeur 32), qui supprime tout le flux de métadonnées XMP et tous les dictionnaires/PieceInfo
Version 3.431.0
Ajouté
- L’option d’extraction 19 (
SetTextExtractionOptionset la variante en accès direct) retire du résultat extrait le texte en mode de rendu 3, tel que les couches OCR, sans toucher au contenu visible - L’option d’extraction 20 remplace les glyphes des séquences de contenu marqué
/Spanpar leur valeur/ActualTextlors de l’extraction (ISO 32000-1 §14.9.4), en honorant aussi bien les dictionnaires de propriétés en ligne que les ressources de propriétés nommées DAGetTextBlockCharBoxdéduit des boîtes alignées sur les axes par personnage à partir des quadrilatères de bloc et des avancées, pour tracer des rectangles de surlignage et calculer des zones de touche sur des caractères isolésExportFormValuesToJSONsérialise les valeurs des champs AcroForm dans un tableau JSON avec un échappement correct, en ignorant facultativement les champs videsGetPageTextStatisticscompte les caractères, les mots séparés par des espaces et les blocs de n’importe quelle pageGetXMPPropertylit les valeurs simples du paquet XMP du document (en descendant à travers les enveloppesrdf:Alt/rdf:Bag/rdf:Seqet en résolvant les entités XML) etSynchronizeXMPToInforecopie les métadonnées XMP dans le dictionnaire Info- Les inventaires de polices rapportent la taille des programmes intégrés :
TPDFlibDocumentFontgagneFontFileByteset l’enregistrement de diagnostic gagne unEmbeddedBytescumulé
Version 3.430.0
Ajouté
- La recherche de texte gagne quatre nouvelles options :
soDiacriticInsensitivemet en correspondance les requêtes via un repli Unicode 1:1, si bien que les lettres simples retrouvent leurs équivalents accentués (Latin-1, Latin étendu A, grec et cyrillique, la sensibilité à la casse restant honorée en combinaison avecsoCaseSensitive),soWildcardsinterprète*et?dans la requête avec une sémantique de correspondance la plus à gauche et la plus longue compatible avecsoWholeWord,soAcrossLinestrouve les expressions qui enjambent les ruptures de ligne et de bloc en joignant les blocs extraits de chaque page, etsoPreserveStylefait redessiner àSearchAndReplaceTextles remplacements à la taille et à la couleur du texte du bloc remplacé plutôt qu’avec les réglages courants de l’appelant - Les résultats de recherche rapportent désormais la position et la longueur de la correspondance dans le texte du bloc (
MatchStart,MatchLength) plus des fenêtres de contexte optionnelles (ContextBefore,ContextAfter) contrôlées par la nouvelle propriétéSearchContextChars AddTextMarkupFromSearchHitsetHighlightTextSearchHitsconvertissent les résultats de recherche, ou ceux conservés par une sessionBeginTextSearchen cours, en annotations de balisage Highlight / Underline / Squiggly / StrikeOut sur leurs pages- Les aiguilles littérales de recherche de quatre caractères ou plus utilisent désormais une table de saut Boyer-Moore-Horspool avec un classement conservateur sur caractères larges, ce qui accélère les recherches par lot sur de longues pages
Corrigé
- Les polices TrueType intégrées écrites avec un encodage de base WinAnsi et un tableau Differences produisaient une CMap
/ToUnicodequi ne listait que les entrées Differences, si bien que les lecteurs qui s’y fient décodait tous les autres codes WinAnsi accentués en charabia : l’extraction renvoyait des?de substitution, la collecte de blocs pouvait s’arrêter à la ligne concernée et la recherche sensible aux diacritiques manquait ces documents. Le générateur de CMap couvre désormais tout l’encodage de base avec priorité aux entrées Differences, par lots conformes à la spécification de 100 entrées - La comptabilité de fusion des mots dans l’entonnoir de texte insérait une entrée d’avance fantôme lors de l’ajout d’exécutions sans séparateur, décalant d’un cran tout décalage ultérieur par caractère et corrompant les données dérivées telles que les sous-rectangles de résultats de recherche et les espaces déduits des intervalles
Version 3.429.0
Corrigé
- Le sous-ensemblement via
AddTrueTypeSubsettedFontproduisait des documents dont le texte s’affichait vide dans tous les lecteurs : le flux de correspondance CID-vers-GID était silencieusement écrasé par une entrée/Identitycodée en dur, si bien que les CID dérivés de l’Unicode désignaient les mauvais contours de glyphes. Le flux fait désormais autorité et/Identityne subsiste qu’en repli lorsqu’aucune correspondance ne peut être déduite ; les documents sous-ensembles avec jeux de glyphes CJK et mis à jour automatiquement s’affichent à nouveau correctement - Les remplissages de dégradés axiaux et radiaux s’affichaient en noir plein sur le moteur de rendu GDI+ interne :
GdipCreateLineBrushrejetteWrapModeClamp(un mode réservé aux brosses de texture) et l’échec de création de brosse retombait sur le repli noir uni. Les brosses de dégradé sont désormais créées avecWrapModeTileet les remplissages de dégradés s’affichent à l’identique du backend Cairo et des lecteurs externes - La création d’une instance de
TPDFliblevaitEIntOverflowlorsque la bibliothèque était compilée avec le contrôle de dépassement activé (les indicateurs de version des scripts de compilation de la démo en ligne de commande) : le hachage de noms FNV-1a, l’accumulation d’état MD5 et les compteurs de bits MD5 relèvent par conception de l’arithmétique modulaire et s’exécutent désormais avec les contrôles de dépassement localement désactivés. La sortie de versionbuild-Win32-Demo/build-Win64-Demolivrée ne plante plus au démarrage
Version 3.428.1
Ajouté
- Nouvelle démo vitrine
Showcase(Demo\Delphi\Showcase) : elle construit au démarrage un document de sept pages — couverture en dégradé, graphiques vectoriels avec ombrages et motifs, typographie TrueType intégrée, tableaux stylés, une galerie de codes-barres, des liens interactifs avec annotations de révision et signets, et une page de synthèse — puis la prévisualise en direct dans le contrôleTPDFlibViewerintégré - La démo Showcase fonctionne aussi en mode headless (
Showcase.exe <output.pdf>) avec un argumentrenderoptionnel qui exporte chaque page en PNG, de sorte que le pipeline complet du document peut être exercé depuis des scripts de compilation
Corrigé
- L’analyse des flux de contenu ne lit plus de travers l’opérateur de couleur de trait
RG: l’anticipation de référence indirecte dans le décodeur d’objets consommait0 0 0 RGcomme un numérique plus la référence fantôme0 0 R, ce qui corrompait les couleurs de trait après optimisation du contenu et produisait des erreurs de syntaxe d’opérateur dans les lecteurs stricts - L’optimiseur par pénétration du contenu ne supprime plus un setter
cs(espace couleur) répété qui suit un opérateur de couleur :rg/g/kréinitialisent implicitement l’espace couleur, si bien que les remplissages de motif (scn) après des changements de couleur de texte conservent leur/Pattern cset s’affichent à nouveau correctement
Version 3.428.0
Ajouté
- Dix-neuf nouvelles démos console Free Pascal / Lazarus sous
Demo\Lazarus: OutlineBuilder, WatermarkDemo, NamedDestinations, EmbeddedFiles, XmpMetadata, TextBlockExtraction, AnnotationInspector, BarcodeGallery, TaggedPDF, SearchReplace, Redaction, LinearizeDemo, PatternShowcase, DocumentProperties, SecurityPermissionMatrix, PageStitch, OutputStream, MergePDF et PdfToImage - Une couche de compatibilité
IOUtils(TPath / TDirectory / TFile) pour les compilations FPC garde les démos portées identiques au niveau source à leurs équivalents Delphi
Modifié
- Le substitut graphique NOVCL sous Windows matérialise désormais de vrais objets GDI : TBitmap alloue une section DIB top-down, TCanvas possède un DC mémoire et resélectionne les objets GDI de brosse, de crayon et de police lors des changements de propriétés, et TBrush / TPen / TFont reconstruisent leurs handles lorsque les couleurs, les styles ou les attributs de police changent
- Le rendu de pages sous FPC produit désormais une sortie en pixels identique à la compilation Delphi (rastérisation GDI+ via le DC de substitution), ce qui restaure également l’export JPEG et BMP de
PdfToImage
Corrigé
- La création de PDF chiffrés sous FPC corrompait les valeurs de chaînes binaires (relecture du
/IDdu trailer,/Ude chiffrement), rendant la sortie incapable de passer la vérification de rechargement ; les compilations FPC ne passent plus-FcUTF8, dont le marquage de page de code ansistring faisait que la concaténationAnsiString + AnsiCharremplaçait chaque octet au-dessus de $7F par un point d’interrogation
Version 3.427.0
Ajouté
- Prise en charge de Free Pascal / Lazarus : la bibliothèque se compile désormais sous FPC 3.2 (Win64) à partir des mêmes sources que les compilations Delphi, avec les nouveaux scripts
build-Lazarus-Lib,build-Lazarus-Lib-TRIAL,build-Lazarus-Testsetbuild-Win64-Demo-Lazainsi que le paquetPDFlibPasLaz - La compression et la décompression Flate sous FPC passent par le zlib statique fourni avec FPC ; le chiffrement AES lie le même objet unity que les compilations Delphi ; les images JPEG se décodent via le backend GDI+
- Une suite de tests console FPCUnit (
Tests\Lazarus) couvre les allers-retours création/enregistrement/chargement de documents, deflate/inflate, AES et l’extraction de texte, et deux démos console Lazarus (HelloWorld,TextExtract) sont incluses sousDemo\Lazarus
Modifié
- Les préfixes de portée d’unités (
System.SysUtils,Winapi.Windows, ...) ont été retirés de toutes les sources de la bibliothèque afin que les mêmes unités se résolvent sous les deux compilateurs ; les compilations en ligne de commande de la bibliothèque pour Delphi passent désormais explicitement la liste des portées d’unités - Correction de deux coquilles de directive
NO_VCL/NOVCLdans le moteur de rendu et l’export bitmap Cairo, qui n’étaient devenues visibles qu’une fois la configuration Windows NOVCL réellement compilée
Version 3.426.0
Ajouté
- Le rendu de pages peut désormais simuler la surimpression de procédé et d’encres nommées via des API Delphi, DLL et ActiveX configurables
Modifié
- Les états graphiques étendus préservent désormais la sémantique cumulative de
/OP,/opet/OPM, tandis que la composition bornée des pixels conserve les canaux d’encre superposés sur les moteurs de rendu GDI+ et Cairo
Version 3.425.0
Ajouté
- L’extraction d’images préserve désormais les segments de page et globaux JBIG2 dans des fichiers autonomes et conserve les charges fax CCITT dans des enveloppes TIFF autonomes
- Un manifeste de déduplication d’images en lecture seule regroupe les doublons encodés exacts par condensat, identité d’objet, usage par page et octets de charge récupérables, pour les clients Delphi, DLL et ActiveX
Modifié
- Les listes d’images de pages identifient désormais les charges natives JPX et JBIG2 sans forcer l’expansion en bitmap, y compris les flux d’images atteints via des Form XObjects imbriqués
Version 3.424.0
Ajouté
- Les API de fichiers associés au niveau du document créent, énumèrent, cartographient, ajoutent et suppriment désormais l’appartenance
/AFdu catalogue, pour les clients Delphi, DLL et ActiveX - Les annotations RichMedia peuvent désormais réutiliser un fichier intégré ou associé existant, en gardant une seule charge média partagée par le panneau de pièces jointes et le graphe de ressources de l’annotation
Modifié
- La création de fichiers associés accepte des fichiers, des flux Delphi, des chaînes binaires, des tampons DLL et des tableaux d’octets ActiveX, tout en préservant les sommes de contrôle, les descriptions, les métadonnées de relation et les octets binaires nuls
- La suppression d’un fichier intégré supprime désormais aussi les références de fichiers associés correspondantes du catalogue, afin que les documents chargés ne puissent pas conserver d’entrées
/AForphelines
Version 3.423.0
Ajouté
- Les API de contenu facultatif construisent désormais des étiquettes de panneau de calques imbriquées et des branches de groupes, pour les clients Delphi, DLL et ActiveX
- Les API de création, d’appartenance, de suppression et d’inspection de groupes radio ajoutent des contrôles de calques mutuellement exclusifs pour les flux de travail CAO et cartographiques
Modifié
- Les mises à jour de calques verrouillés rapportent désormais leur succès, les configurations alternatives utilisent leurs identifiants corrects en base un et les hiérarchies de calques mal formées sont parcourues avec une protection bornée contre les cycles
- La suppression d’un groupe de contenu facultatif retire ses références des structures d’ordre, d’état, de verrouillage, de radio et d’état automatique des calques dans chaque configuration
Version 3.422.0
Ajouté
- Les API d’annotations 3D PRC intègrent des modèles depuis des fichiers, des flux, des chaînes mémoire, des tampons DLL et des tableaux d’octets ActiveX, avec des vues par défaut nommées et des politiques d’activation explicites
- Les annotations PRC prennent en charge les documents techniques PDF/A-4e tout en promouvant automatiquement la sortie ordinaire vers PDF 2.0
Modifié
- Les annotations PRC et U3D incluent désormais une vue 3D complète, les dictionnaires d’activation et de désactivation, les indicateurs d’annotation imprimables, les noms alternatifs et une apparence normale
- L’intégration U3D historique rejette les profils PDF/A qui n’autorisent pas les annotations 3D et accepte PDF/A-4e
Version 3.421.0
Ajouté
- Les API de parties de document ajoutent le
/DPartRootPDF 2.0, les/DPartshiérarchiques, les feuilles par plages de pages, les niveaux d’enregistrement, les noms de niveaux et les métadonnées/DPMvalidées, pour les clients Delphi, DLL et ActiveX - Les API d’inspection et de cycle de vie exposent la validation de hiérarchie, les décomptes de parties atteignables, la recherche de partie par page, les allers-retours de métadonnées et la suppression complète de la hiérarchie
Modifié
- Les grands ensembles d’enfants utilisent des blocs de tableaux bornés, tandis que la validation vérifie les liens parents, les cycles, la profondeur uniforme des feuilles, la couverture ordonnée et complète des pages, les liens inverses de pages, les jetons de noms XML et des graphes de métadonnées bornés
- La création d’une hiérarchie de parties de document promeut la sortie vers PDF 2.0 et participe à la détection des fonctionnalités des documents chargés ainsi qu’au verrouillage de la version d’enregistrement
Version 3.420.0
Ajouté
DrawHTMLStoryajoute un flux HTML stylisé de haut niveau à travers des colonnes de même largeur et des pages générées automatiquement, pour les clients Delphi, DLL et ActiveX- Les limites de pages finies renvoient une chaîne de continuation réutilisable qui préserve la cascade de feuilles de style active, l’état de style imbriqué, les blocs structurés, les tableaux, les liens, les correspondances de polices et les associations d’images
Modifié
- Les pages d’article générées héritent des dimensions effectives de la page de départ sélectionnée et chaque colonne réutilise les plans de mise en page mesurés et rejoués en cache
- La mise en page d’article rejette les géométries invalides, borne les colonnes et les pages générées, et s’arrête lorsque des cadres consécutifs ne peuvent plus progresser
Version 3.419.0
Ajouté
TPDFlibPrinterajoute une façade de composant VCL avec les méthodes de cycle de vieBeginDoc,Canvas,NewPage,EndDocetAbortpour la création directe de PDF- Les travaux d’impression PDF prennent en charge des dimensions de papier configurables, l’orientation portrait ou paysage, la résolution du canvas en DPI, les options d’import vectoriel, les titres de document et une sortie directe facultative vers un fichier
Modifié
- Chaque travail du composant possède un document PDF indépendant, valide le premier canvas comme les suivants avec une sémantique de pages cohérente, et conserve la sortie achevée pour un traitement ultérieur par la bibliothèque
- Le composant n’ouvre jamais de boîte de dialogue d’impression ni n’accède au spooler du système d’exploitation, ce qui permet au code de dessin VCL existant de migrer sans dépendance d’imprimante physique
Version 3.418.0
Ajouté
RenderPagesToPrintStream,RenderPagesToPrintString,RenderPagesToPrintFile,RenderPagesToPrintDataetRenderPagesToPrintBufferajoutent une sortie d’impression indépendante du pilote, pour les clients Delphi, DLL et ActiveX- Les plages de pages sélectionnées peuvent être émises en PostScript Level 3, EPS monopage, PCL 5c ou PWG Raster, avec des contrôles optionnels de monochromie, recto verso, bascule et cadrage de travaux PCL
Modifié
- PostScript et EPS préservent le contenu vectoriel des pages, tandis que PCL et PWG Raster utilisent des encodeurs par lignes bornés pour une livraison directe aux serveurs et aux périphériques embarqués
- Les flux d’impression sont générés sans ouvrir d’imprimante, sans afficher de boîte de dialogue d’impression et sans soumettre de travail au spooler du système d’exploitation
Version 3.417.0
Ajouté
ExportPageSVGetExportPageSVGToFileajoutent l’export de pages évolutif, pour les clients Delphi, DLL et ActiveX- La sortie SVG peut inclure indépendamment les tracés natifs peints, le texte interrogeable, les images PNG intégrées, les liens d’annotations cliquables et un arrière-plan de page transparent
Modifié
- Les tracés de pages conservent leurs transformations, leur apparence de remplissage et de trait, leur opacité, leurs styles de ligne, leurs règles pair-impair et leurs limites de découpage effectives, sans rastériser la page complète
- Chaque page est traitée en passes bornées et produit un document SVG autonome, sans dépendance d’image externe
Version 3.416.0
Ajouté
DrawSVG,DrawSVGFromFile,GetSVGWidthetGetSVGHeightajoutent le placement et la mesure natifs de vecteurs SVG, pour les clients Delphi, DLL et ActiveX- Le dessin SVG prend en charge les view box, l’alignement selon le rapport d’aspect, les groupes, les définitions et leur réutilisation, les transformations, le découpage, les styles CSS simples et en ligne, l’opacité, les tracés à arcs elliptiques et les formes standard rectangle, cercle, ellipse, ligne, polyligne et polygone
Modifié
- La géométrie SVG est écrite sous forme de tracés PDF évolutifs sans XObjects d’image raster, et la mesure et le dessin répétés réutilisent l’arbre SVG borné analysé le plus récemment
- Les entrées SVG non fiables sont bornées par la taille source, le nombre d’éléments et la profondeur d’imbrication, n’effectuent aucun accès aux ressources externes et utilisent le premier arrêt de couleur comme repli uni déterministe pour les serveurs de peinture en dégradé
Version 3.415.0
Ajouté
DrawFormula,GetFormulaWidthetGetFormulaHeightajoutent la mise en page mathématique imbriquée, pour les clients Delphi, DLL et ActiveX- Le balisage de formules prend en charge les fractions empilées, les exposants et indices simultanés, les racines carrées avec indices optionnels, les lettres grecques, les symboles mathématiques courants, les caractères échappés, les groupes de texte et une imbrication bornée
Modifié
- Le texte des formules utilise la police, la taille de texte, la couleur, la mise en forme et la chaîne de repli sélectionnées, tandis que les traits de fraction et de radical restent du contenu vectoriel
- La mesure et le dessin répétés réutilisent l’arbre de boîtes analysé et mesuré, tandis que le document, l’échelle de mesure et l’état complet du peintre restent inchangés
Version 3.414.0
Ajouté
MarkdownToHTML,DrawMarkdownText,DrawMarkdownTextBox,GetMarkdownTextHeight,GetMarkdownTextWidthetGetMarkdownTextLineCountajoutent la conversion, la mesure, le dessin et la continuation limitée en hauteur de Markdown, pour les clients Delphi, DLL et ActiveX- L’entrée Markdown prend en charge les titres ATX et setext, les paragraphes, les citations en bloc, les listes ordonnées et non ordonnées, les tableaux en tubes avec alignement, le code clôturé et indenté, l’emphase, le texte en gras, le barré, les liens, les images, les liens web automatiques, les échappements et les sauts de ligne explicites
Modifié
- La mesure et le dessin répétés de Markdown réutilisent le HTML converti et le cache de mise en page HTML borné, tandis que les chevrons bruts restent du texte échappé
DrawMarkdownTextBoxrenvoie un jeton de continuation opaque accepté par la même méthode, afin qu’un état en ligne partiellement rendu puisse se poursuivre sur une autre page
Version 3.413.0
Modifié
- La mesure et le dessin HTML partagent désormais des plans de mise en page bornés qui mettent en cache l’analyse, la résolution CSS, la géométrie des lignes et des tableaux, les images, les arrière-plans stylés et les liens
- Les appels correspondants à
GetHTMLTextHeight,GetHTMLTextWidthouGetHTMLTextLineCountpeuvent alimenterDrawHTMLTextsans répéter l’analyse HTML ni le travail de mise en page
Corrigé
- La mesure de HTML avec des arrière-plans de texte stylés n’écrit plus d’opérateurs de rectangle dans le flux de contenu de la page sélectionnée
Version 3.412.0
Ajouté
BeginDeferredPageLayer,EndDeferredPageLayer,ComposeDeferredPageLayers,CancelDeferredPageLayersetGetDeferredPageLayerCountfournissent une composition différée par indice z, pour les clients Delphi, DLL et ActiveX- Les couches négatives se rendent sous le contenu existant de la page, tandis que les couches nulles et positives se rendent au-dessus, avec un ordre d’enregistrement stable pour les indices z égaux
Modifié
- Les couches différées sont conservées comme des Form XObjects à la taille de la page et se composent par une seule opération de placement par couche, sans analyser ni rejouer leurs commandes de dessin
Version 3.411.0
Ajouté
SetPageHeaderFooterVariant,ApplyPageHeaderFooterSetetClearPageHeaderFooterSetfournissent des modèles réutilisables et nommés d’en-têtes et de pieds de page courants, avec des variantes première page, page impaire, page paire et par défaut- Les variantes d’en-tête et de pied de page peuvent rendre du texte brut avec la police courante ou du HTML riche avec mesure automatique de hauteur, expansion de variables par page, alignement, marges et opacité, pour les clients Delphi, DLL et ActiveX
Modifié
- Les en-têtes et pieds de page courants générés sont des artefacts de pagination, préservent l’état de page et de peintre de l’appelant, et prennent en charge des variantes vides explicites qui suppriment le repli pour les pages de titre ou d’ouverture de section
Version 3.410.0
Ajouté
StartPageNumberChapter,AddPageNumberPlaceholderetResolvePageNumberPlaceholdersfournissent un flux de travail en deux passes pour les numéros de pages définitifs du document et des chapitres, à l’intérieur du texte ordinaire du corps- Les modèles de pagination prennent en charge les numéros de pages physiques, les totaux définitifs du document, les noms de chapitres, les numéros de pages relatifs au chapitre et les totaux définitifs de chapitre, pour les clients Delphi, DLL et ActiveX
Corrigé
- Les boîtes de texte en chaînes larges transmettent désormais leur texte fourni au moteur de retour à la ligne au lieu de produire une boîte vide
Version 3.409.0
Ajouté
AutoFitTableColumnsattribue les largeurs de colonnes d’un tableau à partir du contenu stylé des cellules, tout en respectant une largeur exacte de tableau et des limites par colonne définies par l’appelant- Les clients Delphi, DLL et ActiveX partagent le même comportement de dimensionnement automatique des tableaux, y compris les contraintes de cellules fusionnées
Modifié
- Un dimensionnement automatique réussi invalide les mesures de lignes en cache, tandis que des contraintes de largeur irréalisables laissent toutes les colonnes existantes inchangées
Version 3.408.0
Ajouté
DrawTextFlowColumnsfait s’écouler un passage conservé à travers une à 64 colonnes de même largeur, avec des gouttières configurables et un équilibrage facultatif de la région finale- Les clients DLL et ActiveX peuvent désormais créer, dessiner, mesurer, inspecter, rembobiner et libérer des handles TextFlow selon le cycle de vie public complet
Modifié
- Les colonnes équilibrées utilisent des décomptes de lignes exacts lorsque le passage restant tient, tandis que les régions en débordement conservent la pleine hauteur de colonne pour une capacité de page maximale
Version 3.407.0
Ajouté
- Le rendu de texte HTML prend désormais en charge les feuilles de style intégrées, le CSS en ligne, les titres, les blocs structurels, les tableaux avec fusions de colonnes et les images liées au document
SetHTMLImageetClearHTMLImagesexposent des contrôles Delphi, DLL et ActiveX correspondants pour des sources d’images HTML réutilisables
Modifié
- La mesure et le dessin HTML partagent désormais les décisions de cascade et de mise en page résolues, les lignes de tableaux se poursuivent atomiquement à travers les boîtes de texte, et l’état de continuation préserve la mise en forme CSS imbriquée
Version 3.406.0
Ajouté
- TextFlow prend désormais en charge une césure automatique bornée et sensible à la langue pour l’anglais, l’allemand, le néerlandais, le français, l’espagnol, l’italien, le portugais, le russe et le turc, y compris l’héritage de la langue depuis la valeur
/Langdu Catalog du document SetTextFlowLanguageetSetTextFlowHyphenationexposent des contrôles Delphi, DLL et ActiveX correspondants pour la langue et les longueurs minimales de préfixe ou de suffixe
Modifié
- La coupure de lignes de TextFlow mesure désormais les mots complets, n’utilise une recherche bornée que pour les jetons trop grands, et ne rend des traits d’union conditionnels ou automatiques que lorsque la coupure est retenue
Version 3.405.0
Ajouté
- Le repli automatique de police résout désormais les groupes CJK, symboles, mathématiques, écritures complexes et emoji manquants via les faces installées en cache, tout en préservant la mise en forme et l’ordre des exécutions bidirectionnelles
SetAutomaticFontFallback,AddFontFallbacket les API d’inspection de la chaîne de repli exposent des contrôles Delphi, DLL et ActiveX correspondants
Modifié
- Le dessin de texte et la mesure de largeur partagent désormais les mêmes décisions de repli sensibles aux groupes et n’intègrent paresseusement que les polices de repli retenues pour la sortie
Version 3.404.0
Ajouté
- Les glyphes manquants sont désormais détectés comme scalaires Unicode dans le texte brut et mis en forme, conservés dans un rapport JSON borné et exposés via des callbacks Delphi, DLL et ActiveX
SetMissingGlyphPolicypeut préserver le comportement compatible d’abandon avec signalement ou rejeter une opération de texte avant l’écriture du contenu avecLastErrorCode 521
Version 3.403.0
Ajouté
GetAPIScopeReportJSONetClearAPIScopeReportexposent des diagnostics déterministes d’exécution et de flux de contenu via les API Delphi, DLL et ActiveX- Les transitions invalides de tracé, d’état graphique, de mise à jour de page, de contenu marqué, de formulaire, de motif, de page, de document et de finalisation de sortie échouent désormais immédiatement avec
LastErrorCode 117
Version 3.402.0
Ajouté
AnalyzePageSkewJSON,DeskewPageetDeskewPageRangedétectent et corrigent la rotation des pages numérisées via les API Delphi, DLL et ActiveX- L’analyse de redressement utilise des rasters bornés à résolution adaptative et une évaluation grossière-à-fin de profils de lignes, tandis que la correction préserve le contenu PDF original et offre un mode optionnel de remplissage de page
Version 3.401.0
Ajouté
DetectPageBarcodesJSONreconnaît les codes-barres unidimensionnels et bidimensionnels à partir d’une page PDF complète ou d’une région bornée de la page, et renvoie texte, symbologie, orientation, validité, points d’angle et limites sous forme de JSON déterministe- Les analyses de régions ne rendent que les pixels demandés, préservent la page sélectionnée, prennent en charge les masques de format et d’options de décodeur, et exposent des API Delphi, DLL et ActiveX correspondantes
Version 3.400.0
Ajouté
SaveDOCXToStreametSaveDOCXToFileconvertissent des plages de pages PDF en paragraphes WordprocessingML modifiables, titres déduits, listes à puces et numérotées natives, tableaux détectés, styles de police, sauts de page et images PNG positionnées- Le générateur de paquet DOCX déterministe utilise des entrées Deflate brutes vérifiées par CRC sans automation Office, écrit les données d’image au fil du traitement de chaque page, préserve l’ordre explicite des pages et restaure la page PDF sélectionnée
Version 3.399.0
Ajouté
ExportPageMarkdownetExportDocumentMarkdownconvertissent le contenu sémantique des pages en paragraphes Markdown échappés, titres déduits, listes ordonnées ou non ordonnées et tableaux en tubes, avec marqueurs de page et styles de police optionnelsSaveMarkdownToStreametSaveMarkdownToFileécrivent en UTF-8 une page à la fois sans mettre en tampon la sortie complète du document, tandis que les points d’entrée DLL et ActiveX correspondants exposent les flux d’export en chaîne et en fichier
Version 3.398.0
Ajouté
ExportPageHTMLetExportDocumentHTMLcréent un HTML5 autonome avec texte positionné, images PNG intégrées, liens URI et ancres internes de pages- L’export de document préserve l’ordre explicite de la plage de pages, restaure la page sélectionnée, ne conserve qu’un modèle d’extraction de page à la fois et expose des API Delphi, DLL et ActiveX correspondantes
Version 3.397.0
Ajouté
ExtractStructuredPageetExtractStructuredDocumenttransforment le texte des pages en hiérarchies de paragraphes, lignes, segments, tableaux, lignes de tableau et cellules, et exportent le même modèle en JSON, XHTML sémantique ou CSV des tableaux détectés- L’extraction de document ne conserve qu’une hiérarchie de page à la fois, restaure la page sélectionnée et expose des points d’entrée Delphi, DLL et ActiveX correspondants
Version 3.396.0
Ajouté
ApplyOCRTextLayeraccepte un JSON d’OCR indépendant du fournisseur et ajoute un texte invisible filtré par indice de confiance et ajusté aux boîtes englobantes, qui rend les pages numérisées interrogeables sans modifier les pixels rendusOCRPage,OCRDocumentetOnOCRPagefournissent un pipeline OCR enfichable page par page à mémoire raster bornée, tandis que les appelants DLL et ActiveX peuvent combiner le rendu de pages existant avecApplyOCRTextLayer
Version 3.395.0
Ajouté
AddImageFromFileetAddImageFromStreamacceptent désormais les images WebP ; la bibliothèque détecte le conteneur RIFF/WEBP et décode via GDI+, qui fournit un codec WebP intégré sous Windows 10 1809 et ultérieur
Version 3.394.0
Ajouté
SetRenderTargetICCpermet à un appelant de fournir un profil ICC cible afin que les transformations ICC du moteur de rendu fassent passer les couleurs sources par un profil d’épreuve CMJN au lieu du sRGB par défaut, rendant possibles l’épreuvage numérique CMJN et l’aperçu de gamut
Version 3.393.0
Ajouté
OptimizeImagesanalyse chaque image intégrée, la décode, la réencode en JPEG à une qualité fixée par l’appelant et ne remplace le flux original en place que lorsque le JPEG est strictement plus petit — réduisant automatiquement les documents numérisés et les images non compressées tout en protégeant les images qui grossiraient
Version 3.392.0
Ajouté
GetImageInfoJSONanalyse chaque XObject d’image du document et renvoie les métadonnées par image (numéro d’objet, dimensions en pixels, espace couleur, bits par composant, filtre) en JSON sans décoder de données de pixels, si bien que l’audit des inventaires d’images reste en O(nombre d’images) en mémoire plutôt qu’en O(octets totaux d’images)
Version 3.391.0
Ajouté
- Les images JPEG2000 (JPXDecode) sont désormais extraites avec passage direct des octets natifs lorsque le mode d’extraction le permet, préservant le flux compressé original sans décodage-réencodage, en cohérence avec le comportement existant de passage direct JPEG
Version 3.390.0
Ajouté
NewMultiStopAxialShaderetNewMultiStopRadialShadercréent des dégradés avec un nombre quelconque d’arrêts de couleur intérieurs dans n’importe quel espace couleur PDF (DeviceRGB, DeviceCMYK, DeviceGray, ICCBased), à l’aide de fonctions Type 3 à couture enchaînant une interpolation exponentielle Type 2 par segment- Le nouvel enregistrement
TPDFGradientStopporte une position dans[0,1]et les valeurs de couleur par composant pour chaque arrêt
Version 3.389.2
Modifié
- La mise en forme de texte complexe met désormais en cache le SCRIPT_CACHE Uniscribe, le HFONT et le DC par police pour la durée de vie du document, si bien que les tables cmap/GSUB/GPOS analysées de la police survivent d’un appel
DrawShapedTextà l’autre au lieu d’être recréées et libérées à chaque fois
Version 3.389.1
Modifié
- La conversion flottant-vers-chaîne dans l’écriture des flux de contenu utilise désormais une boucle de chiffres en ligne avec une table de puissances de dix précalculée, au lieu du chemin générique
Power+IntToStr+Insert, réduisant nettement la charge processeur de la génération de graphiques à haute densité tout en produisant une sortie identique octet pour octet
Version 3.389.0
Ajouté
SetMemoryBudgetborne la mémoire consommée par les grands documents en plafonnant le seuil de taille des flux décodés et le cache de flux d’objets compressés, maintenant la mémoire de pointe dans un budget fixé par l’appelant
Modifié
- Le cache de flux d’objets compressés du lecteur en accès aléatoire est désormais limité par défaut à 50 entrées au lieu de croître sans limite, si bien que toucher de nombreux flux ObjStm n’accumule plus indéfiniment le contenu décodé
Version 3.388.1
Modifié
- Les jetons de noms PDF analysés pendant le chargement du document sont désormais internés dans un bassin de hachage par structure, si bien que les millions de noms dupliqués des grands documents partagent chacun un tampon unique à comptage de références au lieu d’allouer des chaînes neuves ; les recherches de clés de dictionnaire court-circuitent en comparaisons de pointeurs
Version 3.388.0
Ajouté
- Les polices CFF, OpenType-CFF et à clés CID sont désormais sous-ensemblées à l’enregistrement via le même service
CreateFontPackageque le sous-ensemblement TrueType, n’intégrant que les glyphes réellement dessinés par le flux de contenu et réduisant fortement la taille des documents CJK et OTF - Les sorties CIDFontType0 sous-ensemblées portent désormais un flux
/CIDSetdéclarant les CID intégrés, satisfaisant la règle PDF/A 00032 et les attentes des lecteurs conformes
Version 3.387.0
Ajouté
SetRenderBandingrend une page bande horizontale par bande horizontale dans un bitmap réduit, en composant les bandes en une sortie pleine taille, de sorte que les pages à haute résolution et grand format conservent une mémoire de pointe bornée au lieu d’allouer un bitmap géantGetRenderBandHeightrapporte la hauteur de bande active, ou 0 lorsque le banding est désactivé- De nouvelles API Delphi, DLL et ActiveX de rendu par bandes exposent ce flux de travail sur toutes les surfaces publiques
Version 3.386.0
Ajouté
SetDisplayListCachingenregistre une seule fois le flux de contenu d’une page dans une display list rejouable, si bien que les rendus ultérieurs à n’importe quel zoom ou DPI évitent une nouvelle tokenisation ; les Form XObjects et les procédures de glyphes Type 3 mettent chacun une liste en cacheGetDisplayListCacheInfosignale en JSON si le cache est actif ainsi que le nombre d’entrées et les compteurs de succès et d’échec, etClearDisplayListCacheabandonne les enregistrements et récupère leur mémoire- De nouvelles API Delphi, DLL et ActiveX de display lists exposent ce flux de travail sur toutes les surfaces publiques
Version 3.385.0
Ajouté
StartRenderPageJobrend une page dans une tâche d’arrière-plan via une instance isolée, si bien qu’une grande page ne peut plus bloquer le thread hôte pendant son renduPauseRenderJob,ResumeRenderJobetCancelRenderJobinterrompent une page en cours aux frontières d’opérateurs du flux de contenu, via un indicateur d’annulation coopératif et une porte de pause tissés dans le moteur de renduWaitForRenderJob,GetRenderJobStateetGetRenderJobResultrapportent la progression et le résultat du travail via les codesRENDER_JOB_STATE_*- De nouvelles API Delphi, DLL et ActiveX de travaux de rendu exposent ce flux de travail sur toutes les surfaces publiques
Version 3.384.0
Ajouté
DAOpenFromURLouvre un PDF distant via HTTP en utilisant des requêtes par plages d’octets, ne récupérant que les objets réellement touchés par le lecteur et préchargeant la section de première page des documents linéarisés afin que la page 1 s’affiche en premierGetLinearizedURLAccessPlansonde une URL distante avec une seule petite requête de plage et renvoie un rapport JSON de la longueur totale, de la prise en charge des plages d’octets, de la linéarisation, du nombre de pages, de l’objet première page et de la fin de section, de l’emprise du flux d’indications et de la liste fusionnée des plages d’octets requises par la page 1- La nouvelle option
PDF_NET_OPT_NO_WARMINGet les codes d’erreurPDFLIB_ERROR_NET_OPEN,PDFLIB_ERROR_NET_RANGE_UNSUPPORTEDetPDFLIB_ERROR_NET_HTTPexposent la lecture réseau en Delphi, DLL et ActiveX
Version 3.383.0
Ajouté
SaveQDFToFileetConvertFileToQDFcréent des PDF de diagnostic modifiables à la main, avec mise en forme lisible des objets, commentaires d’identité des objets originaux, expansion des flux de contenu courants et longueurs de flux indirectes réparablesRepairQDFFilerecalcule les longueurs de flux modifiées et reconstruit les données de table des références croisées, les trailers etstartxref, y compris la réparation sur place- De nouvelles API Delphi, DLL et ActiveX de QDF et l’option
PDF_QDF_OMIT_ORIGINAL_OBJECT_IDSexposent ce flux de travail sur toutes les surfaces publiques
Version 3.382.0
Ajouté
PDF_LINEARIZE_OBJECT_STREAMSactive le regroupement borné de flux d’objets et un flux xref principal compressé, tout en conservant des données de références croisées de première page directement lisibles
Modifié
SaveToFileOptionspréserve désormais le regroupement de flux d’objets lorsqueLinearizeetPackObjectStreamssont activés ensemble
Corrigé
LinearizeFileprend désormais en charge des chemins d’entrée et de sortie identiques sans tronquer les octets sources avant que la passe de linéarisation ne les lise
Version 3.381.0
Ajouté
ValidateLinearizationFileetGetLinearizationValidationReportauditent de façon indépendante les dictionnaires Fast Web View, les plages et tables de bits d’indications, les dépendances et frontières d’octets de la première page, les décomptes de pages et l’entrée principale de références croisées
Corrigé
- La sortie linéarisée écrit désormais des tables d’indications de décalages de pages et d’objets partagés déterministes, MSB d’abord, avec des vecteurs alignés sur les octets, des longueurs de pages exactes et des décalages relatifs aux indications
- Les tables d’indications générées ne contiennent plus de largeurs de bits aléatoires, de champs petit-boutistes, de lignes de groupes partagés incomplètes ni de décalages de contenu fictifs pouvant amener des lecteurs conformes à rejeter les données Fast Web View
Version 3.380.0
Ajouté
- Les grands flux Flate peuvent désormais être compressés et décompressés par blocs bornés, y compris l’extraction en flux direct via
GetEmbeddedFileContentToStreametGetEmbeddedFileContentToFile
Modifié
- L’enregistrement de grands flux chiffrés RC4, AES-CBC et AES-GCM écrit désormais le texte chiffré directement vers la destination avec des longueurs exactes précalculées, au lieu de matérialiser puis de déchiffrer des copies temporaires complètes
- Les importations de grands fichiers intégrés se compressent progressivement dans leur flux stocké et les enregistrements chiffrés répétés préservent les octets sources en mémoire et les métadonnées de flux
Version 3.379.0
Ajouté
StartEditJournal, les frontières de transaction explicites, la restauration, l’annulation, le rétablissement, la réinitialisation de l’historique, les requêtes d’état et la récupération après incident sont disponibles pour les appelants Delphi, DLL et ActiveX- Les journaux persistants ajoutent des enregistrements d’état PDF et de curseur à somme de contrôle indépendante, vident les enregistrements complets vers le stockage et récupèrent le dernier commit complet lorsqu’une écriture finale est incomplète ou corrompue
Modifié
- L’annulation, le rétablissement, la restauration et la récupération préservent le handle de document sélectionné tout en invalidant les handles transitoires dont les objets de document sous-jacents ont été remplacés
- La mémoire d’annulation est bornée par le nombre d’étapes configuré, les instantanés ne sont sérialisés qu’aux frontières de transaction, et les mots de passe de document ne sont jamais écrits dans les journaux de récupération
Version 3.378.0
Ajouté
ConvertTextToPathsconvertit le texte de polices de contours et les programmes de glyphes Type 3 en Form XObjects vectoriels réutilisables, sur les pages sélectionnées et dans les Forms imbriqués- Les appelants Delphi, DLL et ActiveX peuvent choisir la conversion récursive des Forms et le nettoyage automatique des ressources de polices sources
Modifié
- Le contenu converti conserve le positionnement du texte, l’espacement, le sens d’écriture, les transformations, les couleurs et les réglages de trait, tout en retirant les opérateurs originaux d’affichage de texte
- Les modes de rendu texte avec découpage et les portées de ressources partagées ambiguës sont rejetés avant toute modification d’un objet du document
Version 3.377.0
Ajouté
CopyPageRangesExacceptePDF_COPY_PAGE_SMART_RESOURCESpour réutiliser les polices, images, espaces couleur, motifs, ombrages et états graphiques équivalents déjà présents dans le document ciblePDF_COPY_PAGE_KEEP_ORDERnomme l’option existante de duplication ordonnée des pages et peut se combiner avec la copie intelligente des ressources
Modifié
- La copie intelligente de pages normalise les numéros d’objets, l’ordre des clés de dictionnaire, l’orthographe des nombres et les longueurs de flux avant hachage, confirme chaque correspondance structurellement et saute les graphes cycliques ou sensibles à l’identité
CollateDocumentsExapplique désormais la réutilisation sémantique des ressources à travers ses documents sources sans allouer d’abord des graphes de ressources dupliqués
Version 3.376.0
Ajouté
TrimPageContentToCropBoxretire les exécutions de texte de premier niveau complètes, les tracés peints, les placements d’images et les invocations de Form XObjects entièrement situés hors d’une CropBox de pageTPDFContentProgram.TraceGraphicsStatePairscapture les états d’instructions avant et après en une seule relecture, tout en poursuivant un traceur appartenant à l’appelant à travers les couches de contenu- Les appelants Delphi, DLL et ActiveX peuvent appliquer des marges signées tout en rognant le fond perdu des pages et en réduisant le contenu conservé
Modifié
- Le rognage à la CropBox préserve les objets sécants ou non résolus, les chemins de découpage, les modes de découpage de texte et les structures internes des Forms partagés, tout en maintenant les avancées relatives du texte après suppression de chaînes
Version 3.375.0
Ajouté
TPDFStructureexposeDecodeMaxDepth,LastDecodeStatusetLastDecodePositionpour une analyse bornée des objets de bas niveau et des diagnostics de limites précis
Modifié
- Les tableaux et dictionnaires PDF s’analysent désormais via une pile d’états bornée explicite, y compris les opérandes imbriqués des flux de contenu de pages
Sécurité
- Les objets directs non fiables plus profonds que la limite par défaut de 256 conteneurs sont rejetés avant de pouvoir épuiser la pile du thread
Version 3.374.0
Ajouté
AddType3Fontcrée des polices Type 3 programmables avec des matrices et des limites de police définies par l’appelantAddType3Glyphécrit des programmes graphiques de glyphes codés en octets, avec métriques, encodage, largeurs et tables d’extraction Unicode automatiquesAddType3FontResourceexpose aux programmes de glyphes les polices, images, états graphiques, ombrages et autres ressources indirectes- Les appelants Delphi, DLL et ActiveX peuvent créer des polices Type 3 de symboles, tampons et usages spéciaux sans installer ni intégrer de programme de police externe
Modifié
- Les mises à jour de glyphes Type 3 reconstruisent en place les tables de police dérivées compactes tout en conservant le handle de police utilisé par les ressources de pages existantes
Version 3.373.0
Ajouté
- Les curseurs d’arborescence de structure parcourent parents, enfants et fratries tout en conservant l’identité des éléments à travers réparations et réordonnancements
ReparentStructTreeCursordéplace ou réordonne des éléments de structure et rejette l’auto-parentage et les cycles de descendantsNormalizeStructTreecanonise les collections d’enfants, répare les liens parents, promeut les éléments directs et supprime les arêtes invalides, dupliquées ou cycliques
Modifié
- La réparation d’arborescence de structure préserve la propriété du contenu marqué et les correspondances de l’arbre parent, tout en rendant les modifications de hiérarchie sûres pour les enregistrements ultérieurs
Version 3.372.0
Ajouté
EnumeratePageElementsrenvoie des handles stables de courte durée pour le contenu de texte, d’image et de tracé modifiableDeletePageElementsupprime un objet énuméré tout en préservant le positionnement relatif du texte ultérieurTransformPageElementécrit une matrice affine autour de l’objet sélectionné sans modifier le contenu non concerné
Modifié
- Les handles d’éléments modifiables valident l’empreinte du contenu original et rejettent les mutations périmées ou ambiguës
Version 3.371.0
Ajouté
ExportObjectJSONdiffuse le trailer complet et le graphe d’objets indirects vers un JSON typé déterministe et réversibleImportObjectJSONvalide et fusionne des graphes d’objets ou remplace le jeu complet d’objets indirectsGetObjectJSONetSetObjectJSONexposent l’inspection et la mise à jour atomiques par objet, en Delphi, DLL et ActiveX
Modifié
- Le JSON de graphe d’objets préserve les noms binaires, les clés de dictionnaire, les chaînes, les flux, les générations de références, les types scalaires et l’ordre des numéros d’objets, sans coercitions JSON ambiguës
Version 3.370.0
Ajouté
- Un chargeur compilé du modèle TSV Arlington fournit des handles réutilisables stables ainsi que les décomptes de définitions et de règles
- La validation syntaxique pilotée par le modèle vérifie les clés d’objets, les entrées requises, les types, la disponibilité selon la version PDF, les références directes et indirectes, les valeurs autorisées et les graphes d’objets liés
- Les API Delphi, DLL et ActiveX valident des fichiers ou des pipelines de validation partagés existants et renvoient des listes de diagnostics structurées
Modifié
- La validation syntaxique réutilise des caches d’analyse et d’objets partagés, choisit les liens ambigus par discriminateurs d’objets et supprime les visites répétées de définitions d’objets
Version 3.369.0
Ajouté
- Des pipelines de validation réutilisables ouvrent et analysent un PDF une seule fois, puis exécutent des tâches PDF/A et PDF/UA ou produisent des rapports combinés sur le lecteur et le cache d’objets partagés
- Les API Delphi, DLL et ActiveX exposent la création de pipelines, l’exécution de tâches, la génération de rapports, l’inspection du nombre d’analyses et la libération explicite
Modifié
CreatePreflightReportetCreateValidationReportpartagent une seule analyse et un cache d’objets paresseux lorsque plusieurs contrôles de conformité sont sélectionnés
Version 3.368.0
Ajouté
AddStructureNamespaceenregistre des espaces de noms de structure PDF 2.0 et écrit des dictionnaires/Namespacepartagés viaStructTreeRoot/NamespacesAddRoleMapNSmet en correspondance des types de structure personnalisés au sein d’un espace de noms ou entre espaces de noms enregistrés- Les sélecteurs d’espace de noms par défaut et par élément, les requêtes d’espaces de noms, les exports DLL et les méthodes ActiveX exposent le flux de travail complet
Modifié
- Les modes d’accessibilité PDF/UA-2 et WTPDF attribuent automatiquement l’espace de noms de structure standard PDF 2.0 aux éléments de structure existants et futurs non assignés
GetStructTreeItemTextrésout les chaînes/RoleMapNSet renvoie l’URI d’espace de noms de l’élément via l’InfoID 9
Version 3.367.0
Ajouté
SetPDFUA2Modeactive les métadonnées PDF/UA-2, le versionnage PDF 2.0, la langue du document, les protections de contenu marqué et les préférences d’affichage du titreSetWTPDFModedéclare le niveau d’accessibilité WTPDF 1.0, le niveau de réutilisation ou les deux, tout en préservant les PDF Declarations non liées- Les accesseurs Delphi, DLL et ActiveX exposent la partie PDF/UA active et le masque de déclaration WTPDF
Modifié
- Les diagnostics PDF/UA reconnaissent la partie 2, exigent
pdfuaid:rev=2024et imposent la version minimale PDF 2.0
Version 3.366.0
Ajouté
SetCryptFilterConfigurationsélectionne indépendamment le chiffrement des chaînes PDF, des flux ordinaires et des flux de fichiers intégrés via/StrF,/StmFet/EFF- Les accesseurs Delphi, DLL et ActiveX exposent chaque cible de chiffrement en attente, tandis que le réglage établi limité aux fichiers intégrés reste compatible
Modifié
- Le chiffrement AES par mot de passe, par clé publique et par empreinte utilise une seule politique de filtres de chiffrement, rejette les configurations sans cible protégée et empêche d’appliquer des politiques sélectives aux gestionnaires RC4
Corrigé
- Les empreintes de chiffrement restaurent désormais leur enregistrement de chiffrement complet et s’enregistrent via le writer d’objets normal, sans tronquer le préfixe d’empreinte ni chiffrer deux fois le contenu des objets
Version 3.365.0
Ajouté
- Les enveloppes non chiffrées PDF 2.0 peuvent transporter un PDF chiffré complet comme document initial masqué de la collection, avec les métadonnées standard de charge chiffrée
- Les API Delphi, DLL et ActiveX créent, identifient, inspectent et extraient des charges chiffrées à partir de données de fichier, de chaîne binaire, de flux ou de tableau d’octets
Modifié
- La création d’enveloppe empêche le chiffrement externe et le PDF MAC, valide les noms de gestionnaires, évite la divulgation du chemin source et préserve exactement les octets de la charge
Version 3.364.0
Ajouté
TPDFlibEUTSLTrustSourcevérifie les signatures XML de la LOTL européenne et des TSL nationales, expose des instantanés de services de confiance et fournit des ancres CA et TSA sensibles au tempsTPDFlibSignatureVerifieraccepte des sources de confiance externes et rapporte le statut de certificat qualifié, de signature électronique, de sceau électronique et de QSCD, avec la provenance du service
Modifié
- Le chargement des listes de confiance échoue fermé face aux signataires non épinglés, aux signatures détachées ou ambiguës, aux algorithmes faibles, aux changements de condensat, aux incohérences de territoire, aux listes périmées, aux critères mal formés et aux entrées réseau ou XML non bornées
- Les rafraîchissements complets de TSL sont transactionnels, tandis que les moteurs de chaînes de certificats combinent ancres manuelles et ancres de source, et les réutilisent par révision de liste de confiance et instant de vérification
Version 3.363.0
Ajouté
TPDFlibPKCS11Clientcharge les modules PKCS #11 2.x et 3.x, énumère les jetons, authentifie les utilisateurs, apparie certificats et clés privées, et signe des empreintes PDF sans enregistrement CSP ni KSP- Les types de jeton, de slot, de mécanisme, de table de fonctions et de callback prennent en charge le chargement direct de modules comme les listes de fonctions gérées par l’application
Modifié
- La signature RSA construit le
DigestInfoDER requis avant leCKM_RSA_PKCSbrut, tandis que la signature ECDSA convertit la sortie P1363 du jeton en DER sur demande - Des durées de vie de module partagées, des sessions persistantes, des chemins d’authentification protégés, une authentification par opération, des tentatives bornées de connexion à chaud et une récupération de session avant opération améliorent la fiabilité et le débit des HSM
Version 3.362.0
Ajouté
TPDFlibCSCClientdécouvre des informations d’identification de signature distantes, obtient des données d’activation de signature liées à l’empreinte ou préchargées, et soumet des signatures d’empreinte isolées ou par lot via l’API CSC- Le client se branche directement sur
OnExternalDigestSign, si bien que les signatures distantes RSA et ECDSA DER réutilisent la construction CMS, le dimensionnement de signature et le chemin de vérification à clé publique existants
Modifié
- Le transport HTTP intégré accepte des en-têtes de requête fournis par l’appelant pour l’authentification OAuth bearer, tout en conservant les limites de taille de réponse et de délai par phase
- Les réponses d’information d’identification, d’autorisation et de signature rejettent désormais les champs JSON dupliqués ou mal formés, les données X.509 ou Base64 invalides, les algorithmes non pris en charge, les tailles de lot incohérentes, les données d’activation périmées et les violations de liaison d’empreinte SCAL
Version 3.361.0
Ajouté
VerifyAdESHistoricaletVerifyAdESHistoricalByNamedérivent automatiquement des instants de contrôle historiques de confiance à partir des horodatages de signature et des horodatages de document couvrantsTPDFlibAdESHistoricalValidationReportexpose les résultats demandés et effectifs de chaîne, la source et l’instant de preuve, la couverture d’archivage, les décomptes d’horodatage et un statut propre à chaque échec
Modifié
- La validation historique de révocation échoue fermé à moins qu’un horodatage de document complet de confiance ne scelle les preuves DSS et VRI courantes
- Les instants de validation de certificats et d’OCSP se convertissent désormais en temps de fichier Windows avec une arithmétique exacte en millisecondes entières, évitant toute dérive aux transitions de validité des certificats
Version 3.360.0
Ajouté
SetSignatureFieldSeedValue,AddSignatureFieldSeedCertificateetClearSignatureFieldSeedValuecréent et gèrent des contraintes/SVstandard pour les champs de signature non signésGetSignProcessSeedValueErrorrapporte la contrainte requise exacte — filtre, SubFilter, empreinte, motif, informations de révocation, certificat, version ou contrainte non prise en charge — qui a empêché la signature
Modifié
- La signature applique désormais les seed values requises du champ de signature après l’ouverture de l’identité sélectionnée et avant toute modification du champ ou de la destination de sortie
- Les contraintes de seed value requises non prises en charge échouent fermé, tandis que les valeurs autorisées séparées par des points-virgules et les certificats DER exacts du signataire sont appliqués uniformément à travers les API Delphi, DLL et ActiveX
Version 3.359.0
Ajouté
AddSignProcessRevocationCRLetAddSignProcessRevocationOCSPintègrent le matériel de validation dans l’attribut signéadbe-revocationInfoArchivaldes signaturesadbe.pkcs7.detachedtraditionnellesClearSignProcessRevocationInforetire tout le matériel de révocation archivé d’un processus de signature avant la production de la signature
Modifié
- Les valeurs
BasicOCSPResponsenues sont normalisées en structuresOCSPResponseréussies, et les CRL identiques octet pour octet ainsi que les réponses OCSP normalisées sont dédupliquées - Les attributs de révocation d’archivage Adobe sont pris en charge à la fois par Windows CryptoAPI et les chemins de signature modernes RSA, ECDSA, Ed25519, CNG et empreinte externe
Version 3.358.0
Ajouté
SetSignProcessContentsEstimatedimensionne les espaces réservés de signature à partir du CMS de base, de la chaîne de certificats en cache, du matériel CRL et OCSP prévu, d’un jeton RFC 3161 attendu et d’une marge de sécurité configurableGetSignProcessEstimatedContentsBytesrapporte la capacité en octets bruts alignée, choisie pour la tentative de signature la plus récente
Modifié
- Les nouveaux processus de signature découvrent automatiquement l’espace supplémentaire de chaîne de certificats dans les caches locaux et appliquent une marge de 15 pour cent avant d’aligner la capacité de
/Contentssur 256 octets - La signature CNG, HSM et par empreinte externe dérive désormais les tailles de signature RSA, ECDSA et Ed25519 du certificat public au lieu de réserver une charge fixe de 16 Kio pour le fournisseur
- L’estimation automatique n’effectue aucune récupération réseau et n’invoque ni clé privée ni callback de signature externe
Version 3.357.0
Ajouté
SetSignProcessAppearanceTemplateconstruit des mises en page de signature visible réutilisables à partir d’espaces réservés de signataire, motif, lieu, contact, date, champ, page et définis par l’applicationSetSignProcessAppearanceVariableajoute des valeurs personnalisées insensibles à la casse à un processus de signature individuel et peut les retirer sans recréer le processus
Modifié
- Les modèles de signature visible prennent en charge des formats configurables de la date de signature et des accolades littérales échappées, tout en préservant les règles de priorité existantes entre image et horodatage de document
- L’expansion des modèles utilise des tailles d’entrée bornées et un tampon de sortie linéaire amorti, de sorte que les grandes mises en page réutilisables n’entraînent pas de copies répétées de chaînes entières
Version 3.356.0
Ajouté
TPDFlibSignatureVerifierpeut ajouter des ancres de confiance X.509 au format DER ou fichier, rapporter leur décompte sans doublons et les effacer sans toucher aux magasins de certificats Windows
Modifié
- Un jeu d’ancres de confiance personnalisées non vide pilote désormais à la fois la validation du certificat du signataire et celle des horodatages RFC 3161 via un moteur racine exclusif en mémoire
- L’effacement du jeu personnalisé restaure le moteur de confiance système par défaut pour les vérifications ultérieures
Sécurité
- La validation par confiance personnalisée exclut les magasins Windows
RootetTrustedPeople, tandis que les certificats intégrés au PDF et au DSS restent du matériel de construction de chaîne non fiable
Version 3.355.0
Ajouté
SetSignProcessExternalDigestSigneret sa variante fichier construisent des signatures CMS détachées autour de résultats RSA ou ECDSA fournis par un signataire externeOnExternalDigestSign,DLSetExternalDigestSignCallbacketSetExternalDigestSignCallbackfournissent des surfaces de callback Delphi, DLL et ActiveX synchrones pour les intégrations HSM et de signature à distance- Les callbacks ECDSA externes peuvent renvoyer soit des signatures DER, soit des valeurs P1363
r || sà largeur fixe
Modifié
- Les signataires externes ne reçoivent que l’empreinte finale des attributs authentifiés CMS et ne sont appelés qu’une fois les plages d’octets PDF et les attributs complets
- Le dimensionnement de l’espace réservé utilise la réserve de signature configurée sans invoquer le signataire externe
- Les signatures vides ou trop grandes hors passage direct font désormais échouer le processus de signature au lieu d’écrire une valeur
/Contentsvide ou tronquée
Sécurité
- Chaque signature renvoyée par l’extérieur est vérifiée par rapport au certificat X.509 configuré avant de pouvoir être écrite dans le PDF
Version 3.354.0
Ajouté
SetSignProcessCNGKeyetSetSignProcessCNGKeyFromFilesignent avec des clés NCrypt nommées issues de fournisseurs de stockage logiciels, TPM, jetons matériels ou cloud, sans exporter de matériel de clé privéeSetSignProcessCNGKeyByHandleaccepte unNCRYPT_KEY_HANDLEappartenant à l’appelant pour des flux de découverte de clés et de politiques gérés par l’applicationSetSignProcessPrivateKeyUIcontrôle si les fournisseurs liés au certificat peuvent afficher des interfaces de code PIN, de consentement, de jeton ou d’approbation cloud
Modifié
- Les clés CNG nommées et empruntées utilisent un chemin de signature NCrypt direct pour les signatures détachées RSA et ECDSA sur les familles d’empreintes SHA-1, SHA-2 et SHA-3
- Le dimensionnement de l’espace réservé de signature CNG n’effectue plus d’opération préliminaire de clé privée, évitant les invites de jeton, approbations distantes, entrées d’audit ou facturations de fournisseur en double
- La signature silencieuse reste le mode par défaut, tandis que le mode interactif retire les indicateurs d’acquisition et de signature silencieuse afin que les fournisseurs externes puissent achever leur flux d’authentification
Sécurité
- Les identités CNG explicites sont vérifiées pour la compatibilité des groupes d’algorithmes avec le certificat, et la signature CMS achevée est vérifiée par rapport au certificat fourni avant d’être acceptée
Version 3.353.0
Ajouté
- Les signatures PDF détachées peuvent être générées et vérifiées avec des certificats ECDSA P-256, P-384 et P-521, à l’aide des familles d’empreintes SHA-1, SHA-2 ou SHA-3
- La signature Ed25519 accepte un certificat X.509 DER avec une graine brute ou une clé privée PKCS #8 non chiffrée, via les interfaces Delphi, DLL et ActiveX
SetSignProcessDigestAlgorithmaccepte SHA3-256, SHA3-384 et SHA3-512 comme codes d’algorithme 5, 6 et 7
Modifié
- Les signatures détachées modernes utilisent un constructeur CMS canonique avec des identifiants d’algorithme d’empreinte et de signature alignés sur les normes, au lieu de dépendre d’identifiants choisis par le fournisseur
- La vérification des signatures modernes valide l’empreinte du contenu détaché, les attributs signés canoniques, l’identité du signataire intégré et la signature à clé publique, sans exiger la prise en charge des algorithmes CryptoAPI historiques
Sécurité
- La vérification Ed25519 rejette les scalaires non canoniques, les encodages de points non canoniques, les clés d’ordre petit, les identités de certificat discordantes et les attributs signés modifiés
Version 3.352.0
Ajouté
EncryptPublicKeycrée des documentsAdobe.PubSecAES-128 ou AES-256 pour plusieurs destinataires à certificats X.509, sans mot de passe partagé- Les destinataires peuvent être chargés depuis des fichiers DER, PEM, PKCS #12 PFX ou les magasins de certificats de l’utilisateur courant ou de la machine locale, et peuvent recevoir des masques d’autorisations PDF indépendants
- Les informations d’identification PFX et de magasin de certificats ouvrent les documents chiffrés à clé publique via les API normales de chargement de fichier, de flux et de chaîne
- Les décomptes de destinataires, les décomptes de groupes d’autorisations, l’état d’authentification et les contrôles du cycle de vie des informations d’identification sont disponibles via les interfaces Delphi, DLL et ActiveX
Corrigé
- La génération de bibliothèque de types ActiveX conserve désormais les méthodes existantes PDF/UA, PDF balisé, artefact, langue du document et fichiers associés, tout en ajoutant les API à clé publique sans déplacer les emplacements d’interface binaire établis
DecryptFileatteint le chemin de réécriture directe AES-256 sans prévérification par le lecteur complet pour les documents chiffrés ordinaires, tout en validant les signaux PDF MAC avant la réécriture du contenu protégé
Sécurité
- Les EnvelopedData CMS sont validés par une analyse DER bornée, les groupes d’autorisations de destinataires sont authentifiés avec leur charge chiffrée de graine, et les enveloppes ambiguës ou mal formées sont rejetées avec des codes d’erreur dédiés
- Les destinataires partageant les mêmes autorisations sont regroupés dans une seule enveloppe afin de réduire la taille de sortie et le travail de dérivation de clés, tout en conservant le transport de clé propre à chaque certificat
Version 3.351.0
Ajouté
SetPDFMACEnabledcrée des jetons d’intégrité PDF MAC autonomes pour les documents chiffrés AES-256 révision 6 et AES-GCM, y compris le sel de dérivation de clé requis, le signal d’autorisations, les plages d’octets et les données d’authentification CMSGetPDFMACStatusetValidatePDFMACexposent les résultats de validation via les interfaces Delphi, DLL et ActiveX
Sécurité
- Les documents protégés sont vérifiés automatiquement après l’authentification par mot de passe et avant l’exposition des pages ; les jetons manquants, le DER mal formé, les algorithmes non pris en charge, la couverture incomplète, les échecs de déballeage de clé et les valeurs d’authentification altérées sont rejetés avec des codes d’erreur dédiés
EncryptFile,EncryptFileExetDecryptFilepréservent désormais les garanties PDF MAC à travers les flux de travail de chiffrement au niveau du fichier et de déchiffrement validé
Version 3.350.0
Ajouté
Encrypt,EncryptFileetEncryptFileExacceptent la force 5 pour créer des documents PDF 2.0 avec chiffrement authentifié AES-GCM 256 bits, dictionnaires de sécurité de révision 7 et déclaration d’extension ISO TS 32003- Le lecteur et les chemins de déchiffrement de fichiers ouvrent les documents AES-GCM et exposent le nouveau mode via
EncryptionAlgorithm,GetEncryptionLeveletSecurityInfo
Sécurité
- Les échecs d’authentification AES-GCM rejettent désormais les chaînes ou flux altérés et amènent
DecryptFileà supprimer toute sortie partielle
Version 3.349.0
Modifié
LinearizeFileordonne désormais les grands graphes d’objets avec une passe de fusion stable enO(n log n)et parcourt les dépendances indirectes avec une pile de travail explicite, évitant le travail d’ordonnancement quadratique et un cadre d’appel par objet atteignable
Corrigé
- La section de première page inclut désormais les dictionnaires d’annotations et leurs apparences, actions et ressources atteignables, permettant aux clients Fast Web View d’afficher les annotations de la première page sans récupérer d’objets au-delà de la frontière de première page
Version 3.348.2
Corrigé
- La bibliothèque se compile désormais sans avertissements ni suggestions sur la compilation Win64. L’initialiseur du hachage de chaînes FNV-1a dépassait la plage
Integer; son accumulateur est donc passé enCardinalavec un résultat masqué identique octet pour octet, et dix affectations dont le compilateur a prouvé qu’elles n’étaient jamais lues — plus une variable inutilisée — ont été retirées. Aucun comportement à l’exécution n’a changé
Version 3.348.1
Corrigé
- Le contrôle de visualisation se compile à nouveau sous Delphi XE5 et XE6. Son gestionnaire DPI par moniteur utilisait
WM_DPICHANGED, une constante de message absente deWinapi.Messagesavant XE7, si bien que la matrice de compilation d’essai — qui cible encore les anciennes chaînes d’outils — s’arrêtait surPDFlibViewer.pasavec une erreur d’identifiant non déclaré. La constante est désormais déclarée localement uniquement sur les compilateurs qui ne la fournissent pas déjà, laissant le traitement DPI à l’exécution inchangé
Version 3.348.0
Ajouté
ConvertToPDFAtransforme un document ordinaire en document d’archivage en un seul appel : il retire ce que la partie choisie interdit, ajoute ce qu’elle exige, déclare la partie que le document revendique, puis vérifie le résultat.- La revendication n’est rapportée comme satisfaite que si la vérification réussit. Un fichier qui se dit d’archivage sans l’être passe à travers les très systèmes qui l’auraient sinon intercepté ; le verdict vient donc de la vérification et non de la tentative.
GetPDFAConversionReportliste ce qui a été fait et, là où le document reste en deçà, ce qui fait obstacle.
Version 3.347.1
Corrigé
SanitizeDocumentsupprime désormais réellement le JavaScript qu’il rapporte supprimer. Il demandait à la liste de paquets une entrée avant la première, n’obtenait rien et s’arrêtait avant d’avoir retiré le moindre script — un document assaini exécutait donc encore ses scripts à l’ouverture.- La suppression du dernier script retire désormais aussi l’arbre de noms vide qu’elle laisse derrière lui, faute de quoi il indiquait encore à un lecteur que le document transportait des scripts.
Version 3.347.0
Ajouté
RepairDocumentMetadatamet en accord les deux endroits où un PDF dit qui l’a écrit. Un validateur lit à la fois les informations du document et le paquet XMP, et rejette un fichier où ils divergent ; or la plupart des fichiers échouant sur ce point n’ont simplement jamais eu leur moitié XMP écrite.- Lorsqu’une seule moitié porte une valeur, l’autre en est remplie, si bien que rien de déjà consigné n’est perdu.
- Un document réglé sur un mode PDF/A retrouve son identification de norme si elle a été perdue, ce qui arrive chaque fois qu’un appelant fournit son propre paquet. Sans elle, un validateur lit le fichier comme un PDF ordinaire et rapporte chaque règle de la partie revendiquée comme non satisfaite.
- Renvoie le nombre d’entrées réparées.
Version 3.346.0
Ajouté
RecolorDocumentconvertit désormais les dégradés qu’un document peint. L’espace couleur du dégradé et les arrêts qui le portent se déplacent ensemble, si bien qu’un dégradé converti se lit comme une seule couleur et non comme un canal pris pour un niveau de gris.- Les dégradés écrits à l’intérieur du motif qui les peint, ou dans les ressources d’ombrage d’une page, sont trouvés aussi bien que ceux disposant de leur propre objet.
Modifié
- Un dégradé construit à partir d’une fonction échantillonnée ou PostScript est laissé tel quel, et les types maillés également, qui portent leurs couleurs dans un flux plutôt que dans une fonction. Réécrire cela est une opération distincte de la conversion d’une couleur.
Version 3.345.0
Ajouté
RecolorDocumentconvertit désormais une image indexée en convertissant sa table de couleurs, laissant chaque échantillon conserver l’index qu’il détenait déjà. Une telle image se convertit quel que soit le compactage ou la compression de ses échantillons, y compris les images à palette sous lesquelles une capture d’écran ou un graphique est habituellement enregistré.
Version 3.344.0
Ajouté
RecolorDocumentconvertit désormais les images qu’une page dessine aussi bien que les couleurs qu’elle règle, si bien qu’un document passé en gris n’affiche plus d’images en couleur sur des pages grises.- Les masques doux et les masques pochoir sont laissés intacts. Les deux se lisent comme une couverture et non comme une couleur, et en convertir un ferait afficher à la page le masque comme une image.
Modifié
- Une image est convertie lorsqu’elle porte huit bits par composant, un espace couleur périphérique et soit aucune compression, soit du Flate simple. Une image JPEG ou fax devrait être réencodée, ce qui est une opération distincte de la conversion de ses couleurs ; elles conservent donc leurs propres octets.
Version 3.343.0
Ajouté
- Déplacez un document entier, ou une seule page, dans un seul espace couleur.
RecolorDocumentetRecolorPageprennent 1 pour gris, 2 pour RVB et 3 pour CMJN, et renvoient le nombre de couleurs converties. - Utile avant d’envoyer un travail à une presse qui attend un seul espace, ou pour passer un document couleur en gris sans le redessiner. La géométrie, le texte et les images restent exactement tels qu’ils étaient ; seuls les opérateurs de couleur changent.
- Une couleur déjà réglée dans l’espace cible est laissée telle quelle, si bien qu’une page dont les couleurs n’ont pas à changer conserve ses octets originaux.
- Les couleurs réglées via un espace ICCBased, Separation, Indexed ou Pattern sont laissées en l’état. Les convertir sans lire leur profil changerait l’aspect de la page au lieu de le préserver.
Version 3.342.0
Ajouté
- Archivage PDF/A-4, la partie de la norme bâtie sur PDF 2.0.
SetPDFAModeaccepte trois nouveaux modes : 9 pour PDF/A-4, 10 pour PDF/A-4e, qui admet en outre la 3D et les médias riches, et 11 pour PDF/A-4f, qui permet un fichier intégré de n’importe quel format. - Un document de partie 4 est identifié comme la norme l’exige : par numéro de partie et année de publication de sa partie, sans lettre de conformité pour le PDF/A-4 simple, et avec la lettre E ou F pour les deux extensions.
- Chaque fichier intégré d’un document de partie 4 indique son lien avec le document, comme l’exigent les parties 3 et 4.
Modifié
- Le contrôle PDF/A reconnaît la partie 4, juge ses fichiers au regard de PDF 2.0 plutôt que de 1.7, et signale un fichier de partie 4 qui n’indique pas son année de révision.
Version 3.341.2
Corrigé
- Les documents PDF/A-3 et PDF/UA indiquent désormais le lien de chaque fichier intégré avec le document. La relation n’était écrite que pour les pièces jointes après la première et jamais pour la dernière, si bien qu’un document avec une seule pièce jointe — le cas ordinaire — n’en portait aucune et échouait la validation sur ce point.
- Le rapport PDF/UA ne néglige plus le dernier fichier intégré lors de la vérification de la présence de la relation.
Version 3.341.1
Corrigé
- Le contrôle PDF/A lit désormais la marque de norme portée par un fichier. Il ne le pouvait pas, et chaque fichier était donc jugé selon la partie 1 quoi qu’il déclarât : un document PDF/A-2 ou PDF/A-3 valide était signalé comme ne portant aucune marque et comme étant de version trop élevée, ce qui est l’inverse de la vérité.
- La marque est lue que le producteur l’ait écrite comme élément ou comme attribut. Les deux relèvent du XMP ordinaire, si bien que n’accepter qu’une forme laissait les fichiers d’autres producteurs paraître non marqués.
Version 3.341.0
Corrigé
- Le texte vertical utilise désormais la forme verticale de chaque caractère. Les crochets, le trait voyelle longue et les petits kana se dessinent différemment lorsque le texte descend la page, et une police nomme elle-même ces formes ; jusqu’ici les formes horizontales étaient dessinées, ce qui laissait les crochets couchés en travers de la colonne au lieu de s’élever le long d’elle.
- Les formes sont tirées de la propre caractéristique verticale de la police, si bien que chaque fonte fournit ce que son concepteur a dessiné plutôt qu’une substitution devinée à partir du caractère.
GetVerticalTextHeightmesure les formes qui seront dessinées, de sorte qu’une colonne dont les caractères changent de forme reste correctement mesurée.- Une fonte ne nommant aucune forme verticale se dessine exactement comme avant.
Version 3.340.0
Ajouté
- Écriture verticale, pour le texte japonais et chinois composé le long de la page.
SetVerticalWritingModel’active et les appels ordinaires àDrawTexts’écoulent alors vers le bas ;GetVerticalWritingModela rapporte. Composer du texte verticalement supposait auparavant de placer chaque caractère à la main. - Le texte ainsi dessiné passe par une police Type0 en mode d’écriture verticale portant les métriques verticales propres de la fonte, si bien qu’un lecteur avance chaque caractère de la distance prévue par son concepteur plutôt que d’un pas uniforme, et la copie du texte restitue les caractères originaux.
- Une fonte ne portant pas ses propres métriques verticales avance d’un em par caractère, ce que ferait un lecteur avec la valeur par défaut.
GetVerticalTextHeightindique jusqu’où une chaîne descendra la page avant d’être dessinée, etDrawVerticalTextdessine une exécution verticalement sans changer le mode.- Les formes horizontale et verticale d’une même fonte sont tenues à part, si bien qu’une page peut porter les deux sans que l’une perturbe l’autre.
Version 3.339.0
Ajouté
- Le balisage automatique couvre désormais les tableaux. Avec le nouveau bit de tableau activé,
DrawTableRowsreporte le tableau, ses lignes et ses cellules dans l’arbre de structure, si bien qu’un lecteur peut dire dans quelle colonne se trouve une valeur au lieu de lire tout le tableau comme une suite de texte sans lien. SetTableHeaderRowCountindique combien de lignes de tête sont des en-têtes, etGetTableHeaderRowCountle rapporte. Ces lignes s’écrivent comme cellules d’en-tête portant une portée de colonne, ce qui permet à un lecteur de nommer l’intitulé de la valeur qu’il parcourt.- Les lignes d’en-tête ainsi nommées restent à leur place. Les répéter en haut de chaque page demeure une décision de mise en page prise avec
DrawTaggedTableRows.
Modifié
AUTOTAG_DEFAULTcouvre désormais les tableaux en plus du texte, du mobilier de page et des figures. Passer le mode sous forme de nombre conserve ce qu’il a toujours signifié.
Version 3.338.0
Ajouté
- Le balisage automatique couvre désormais les images. Avec le nouveau bit de figure activé, une image dessinée devient une figure dans l’arbre de structure, si bien qu’un lecteur y accède au lieu de passer dessus en silence.
RegisterFiguredonne la description que portera la prochaine image. Un lecteur lit cette description à la place de l’image, et c’est là tout ce qu’un lecteur non voyant en retire.RegisterDecorationindique que la prochaine image est un filet, une bordure ou un fond sans signification, et elle se dessine à l’intérieur d’un artefact de mise en page, si bien qu’un lecteur la saute au lieu d’annoncer une image qui ne dit rien.- Les deux réglages se consomment sur une seule image, de sorte qu’une ultérieure n’hérite jamais d’une description destinée à une antérieure.
Modifié
AUTOTAG_DEFAULTcouvre désormais les figures en plus du texte et du mobilier de page, si bien que demander le défaut demande les trois. Passer le mode sous forme de nombre conserve ce qu’il a toujours signifié.- Un titre enregistré avec
RegisterHeadingattend désormais le texte qu’il nomme. Une image dessinée entre-temps devient une figure et laisse le titre au texte qui suit, au lieu de prendre lui-même le niveau de titre.
Version 3.337.1
Corrigé
- Un document construit avec le seul
BeginTagest désormais marqué comme balisé. Jusqu’ici un tel fichier portait un arbre de structure complet qu’aucun lecteur ne regardait, car un lecteur tient un document pour non balisé tant que le catalogue ne dit pas le contraire (ISO 32000-1 §14.7.1) ; les technologies d’assistance annonçaient la page comme si elle n’avait aucune structure. - La marque n’est ajoutée que lorsqu’un arbre de structure est réellement écrit, de sorte qu’un document sans balises reste signalé comme non balisé, et un réglage
SetMarkInfofait par l’appelant est laissé en l’état.
Version 3.337.0
Ajouté
- Balisage structurel automatique.
SetAutoTagModeactive un mode où le dessin ordinaire porte sa propre structure : le texte devient un paragraphe, le texte dessiné juste aprèsRegisterHeadingdevient un titre de ce niveau, et les en-têtes et pieds de page courants deviennent des artefacts qu’un lecteur saute. Produire un document accessible supposait auparavant d’envelopper chaque appel de dessin dansBeginTagetEndTagà la main - L’activation du mode marque aussi le document comme balisé, ce dont un lecteur a besoin avant de considérer la structure comme présente
- Le balisage automatique s’efface à l’intérieur d’une balise ouverte à la main, si bien qu’une partie du document peut être décrite par l’appelant et le reste laissée à la bibliothèque, sans que les deux ne s’imbriquent
- Rien n’est balisé à l’intérieur d’un artefact, et un texte vide n’ouvre aucun élément, de sorte qu’aucun des deux ne peut produire un élément de structure qu’un lecteur annoncerait comme vide
Version 3.336.0
Ajouté
- Flux de texte, pour conduire un même passage à travers plusieurs boîtes, colonnes ou pages.
NewTextFlowreçoit le texte etDrawTextFlowremplit une boîte avec ce qui tient, en laissant le flux sur le premier mot qu’il n’a pas pu prendre, de sorte que la boîte suivante continue exactement là MeasureTextFlowindique combien de lignes le texte restant exige à une largeur donnée, sans rien dessiner, si bien qu’une mise en page peut être dimensionnée avant d’être engagée- Une boîte sans place pour une ligne ne prend rien et laisse le flux intact, de sorte qu’en proposer une ne perd jamais de texte
SetTextFlowMinLinesgarde ensemble un nombre fixé de lignes : une boîte qui ne pourrait en prendre moins n’en prend aucune et les repousse, plutôt que de laisser une ligne isolée au bas d’une colonneGetTextFlowRemaining,TextFlowFinishedetRewindTextFlowrapportent et réinitialisent la progression ; dessiner une boîte abandonnait auparavant tout ce qui débordait, sans moyen de savoir ce qui était perdu
Version 3.335.0
Ajouté
- Table des matières automatique. Les titres sont enregistrés avec
RegisterHeadingpendant l’écriture du corps, puisDrawTOCles compose : chaque entrée en retrait selon son niveau, un train de points rejoignant un numéro de page aligné à droite, et la ligne entière pointant vers le titre - Un titre retient où il pointe plutôt que le numéro de page qu’il avait, si bien qu’insérer la page de sommaire devant le corps achevé — ce qui renumérote chaque page visée — laisse chaque entrée et chaque lien corrects
MeasureTOCindique combien de pages la liste exigera avant tout dessin, etDrawTOCrenvoie le nombre d’entrées placées, de sorte qu’une liste plus longue qu’une page se dessine en rappelant la méthode avec le décompte déjà placéPopulateOutlineFromHeadingstransforme les mêmes titres en signets de document, imbriqués par niveau- Un intitulé trop large pour la place que laisse son numéro de page est raccourci d’un caractère à la fois et reçoit des points de suspension, plutôt que d’être autorisé à couler sous le numéro
Version 3.334.1
Corrigé
- La sélection d’une page après insertion de pages devant elle atteignait la page qui portait ce numéro avant l’insertion, si bien que dessiner des pages liminaires dans un document existant pouvait écrire sur la mauvaise page du corps. La sélection de page suit désormais la nouvelle numérotation
Version 3.334.0
Ajouté
GetSignatureModificationVerdictrépond à la question qu’un lecteur se pose réellement au sujet d’un document signé : les mises à jour ajoutées après cette signature sont-elles de celles que son niveau de certification autorise ? Une signature certifiante porte un niveau d’autorisations, et le verdict contrôle chaque révision ultérieure au regard de ce niveau, si bien qu’ajouter du matériel de validation se lit comme permis tandis qu’une réécriture de page nonGetSignatureEffectiveMDPLevelrapporte le niveau en vigueur etGetSignatureModificationDetailnomme la révision et la nature du changement derrière la réponse- Le verdict distingue "rien n’a été ajouté", "seulement des changements permis", "quelque chose de non permis", "impossible à déterminer" et "la signature ne se termine pas sur une frontière de révision". Ce dernier cas signifie que des octets se trouvent à l’intérieur de la plage que la signature prétend couvrir
- Le doute n’est jamais rapporté comme une approbation : une certification dont la structure n’a pu être vérifiée, un verrou de champs dont les champs affectés sont introuvables, une révision contenant de l’illisible, ou des octets au-delà de la plage signée ne formant aucune révision reconnaissable se rapportent tous comme indéterminés plutôt que comme permis
Modifié
- Un tableau indirect dont rien ne rend compte est désormais signalé comme indéterminé plutôt que comme comptabilité. La liste d’annotations ou de contenu d’une page est un tableau, et la réécrire change ce que le document montre en laissant chaque dictionnaire intact
Version 3.333.0
Ajouté
- Inspection des révisions incrémentales. Une signature couvre les octets de la révision dans laquelle elle a été écrite, et tout ce qui est ajouté ensuite est une mise à jour distincte dont le contenu détermine si la signature vaut encore pour le document tel qu'il est maintenant.
GetDocumentRevisionCount,GetDocumentRevisionStartetGetDocumentRevisionEnddisposent ces révisions, etGetSignatureRevisionIndexindique à laquelle une signature se termine GetDocumentRevisionKindrapporte ce qu'une mise à jour a fait, comme le plus engageant des objets qu'elle a touchés : comptabilité, matériel de validation, horodatage de document, signature, champ de formulaire, annotation ou contenu de document. Ajouter du matériel de validation pour la validation à long terme ne ressemble donc plus à une édition du documentGetDocumentRevisionChangesliste chaque objet qu'une mise à jour a ajouté, modifié ou supprimé, avec ce qu'il est et, pour un dictionnaire modifié, quelles clés diffèrent réellementGetDocumentRevisionsCompleterapporte si toute l'historique était récupérable. Une chaîne rompue, cyclique ou plus longue que ce que le lecteur suivra laisse les mises à jour les plus anciennes invisibles, et les comptes sont alors une borne inférieure plutôt qu'une réponse- Un objet dont la version antérieure ne peut être lue, ou dont le corps de flux n'a jamais été comparé, est signalé comme indéterminé plutôt que comme inoffensif : une mise à jour qui réécrit une page en laissant son dictionnaire intact n'est pas confondue avec un reconditionnement
Version 3.332.0
Ajouté
ApplyPAdESLongTermValidationpromeut un PDF déjà signé vers PAdES-B-LT en un seul appel. Il construit le chemin de certificats du signataire depuis la signature elle-même, rassemble le matériel OCSP et CRL pour chaque maillon via les adresses nommées par les certificats, et écrit les certificats et données de révocation dans le document security store avec une entrée VRI pour la signature, en une seule mise à jour incrémentale.ApplyPAdESLongTermValidationToStreamécrit le résultat dans un flux au lieu d'un fichier- Le comportement est configurable via un masque d'options
PADES_LTV_*: écrire ou non l'entrée VRI, interroger ou non les répondeurs OCSP, revenir ou non aux CRL, suivre ou non les adresses d'émetteur pour compléter le chemin, et ignorer ou non la révocation pour une racine auto-émise - Un nom de champ vide traite chaque signature en une seule révision ; un champ nommé ne traite que celui-là
GetPAdESLTVCertificateCount,GetPAdESLTVCRLCount,GetPAdESLTVOCSPCountetGetPAdESLTVErrorrapportent ce que le dernier appel a rassemblé et pourquoi il s'est arrêté prématurément, afin qu'un résultat partiel sur un répondeur injoignable soit visible plutôt que silencieux- Le matériel identique à un élément déjà préparé est écrit une seule fois et référencé par chaque signature qui en a besoin, et une signature ne portant aucun certificat lisible est signalée plutôt que présentée comme une promotion réussie
Version 3.331.0
Ajouté
- Une signature porte son propre chemin de certification, si bien que le matériel dont un profil de validation à long terme a besoin peut être lu depuis le seul fichier signé.
GetSignatureSignerCertificateDER,GetSignatureEmbeddedCertificateCountetGetSignatureEmbeddedCertificateDERrenvoient les certificats qu'une signature intègre, etGetSignatureCertificateChainLengthainsi queGetSignatureCertificateChainDERles ordonnent en un chemin partant du signataire vers l'extérieur GetSignatureContentsHashHexrenvoie la clé sous laquelle une entréeAddPAdESDSSVRIest adressée, calculée à partir de la signature elle-même- Le certificat du signataire est identifié que la signature le désigne par émetteur et numéro de série ou par identifiant de clé de sujet, et un chemin s'arrête au dernier émetteur que la signature porte réellement plutôt que de prétendre être complet
Corrigé
- Le lecteur DER rejette une longueur d'élément déclarée supérieure aux données au lieu de laisser une valeur quasi maximale faire déborder son contrôle de bornes, et le parcours des extensions de certificat ne lit plus au-delà de la fin d'un certificat tronqué ou trop long. Les deux sont atteignables depuis un document forgé, donc les accesseurs ci-dessus restent sûrs sur une entrée non fiable
- Les accesseurs de signature lisent le document avec un handle partagé, donc ils répondent pendant qu'un vérificateur ou une visionneuse a déjà le fichier ouvert, au lieu d'échouer comme si la signature était absente
Version 3.330.0
Ajouté
- Demandes d’état OCSP :
BuildOCSPRequestencode une demande RFC 6960 pour un certificat et son émetteur,FetchOCSPResponsel’envoie au répondeur et renvoie sa réponse, etAddPAdESDSSOCSPFromCertificateseffectue les deux opérations puis classe le résultat dans le magasin de sécurité du document - L’adresse du répondeur est facultative : si elle est omise, celle indiquée par le certificat est utilisée, de sorte qu’un appelant disposant de la chaîne de certificats n’a rien d’autre à configurer
- Une paire de certificats qui ne correspond pas réellement est refusée avant tout envoi, plutôt que de produire la réponse "unknown" du répondeur, qui pourrait être interprétée comme un problème de révocation
- Seule une réponse réussie est stockée ; un répondeur ayant répondu
tryLaterouunauthorizedest signalé parGetTimeStampErrorplutôt que classé comme une réponse d’état
Version 3.329.0
Corrigé
- La réutilisation d’un même tableau de résultats au fil d’appels d’énumération successifs ne laisse plus fuir les chaînes des cases qu’un appel ultérieur ne remplit pas. Le modèle documenté "appel pour compter, redimensionnement, nouvel appel" était concerné lorsqu’un appel renvoyait moins d’éléments que la capacité du tableau, et le texte abandonné s’accumulait pendant toute la vie du processus
- Les points d’entrée concernés comprennent
EnumPageContentStates,EnumPageContentStatesEx,EnumAttachments,EnumDocumentFonts,EnumPageElements,EnumNamedDestinations,EnumSignatures,EnumFormFields,GetFormValues,GetTextInAreaExainsi que les appels d’énumération de recherche textuelle, d’actions de champs et de certificats
Modifié
- Le paramètre de tableau de résultats de ces appels est désormais transmis comme
varplutôt queout. Le code Delphi et C++Builder existant se compile et se lie sans modification ; seule différence visible, les cases après le nombre renvoyé conservent leur contenu antérieur au lieu d’être silencieusement vidées
Version 3.328.0
Ajouté
- Les certificats indiquent désormais où contrôler leur état :
GetCertificateOCSPURLs,GetCertificateIssuerURLsetGetCertificateCRLURLslisent dans un certificat les adresses du répondeur, du certificat émetteur et de la CRL, sans exiger de connaître le site de publication de l’autorité pour constituer les données de validation à long terme FetchRevocationMaterialtélécharge les données depuis ces adresses, tandis queAddPAdESDSSCRLFromURLetAddPAdESDSSCertificateFromURLles téléchargent puis les classent en une étape dans le magasin de sécurité du document- Les adresses ne désignant aucune ressource récupérable, par exemple un nom de répertoire ou une adresse électronique, sont ignorées au lieu d’être présentées comme téléchargeables
Version 3.327.0
Ajouté
- Client d’horodatage RFC 3161 intégré :
SetTimeStampServeretSetTimeStampOptionsconfigurent l’autorité, l’algorithme de hachage, la politique demandée, l’emploi du nonce et le délai ;FetchTimeStampTokenrenvoie un TimeStampToken pour tout condensat ApplyPAdESSignatureTimeStampcomplète une signature PAdES-B-T en un appel : il hache la valeur de signature, obtient le jeton auprès de l’autorité configurée et l’ajoute comme attribut d’horodatage, remplaçant l’ancien échange en trois étapes que l’appelant devait organiser- Lorsqu’un nonce est employé, le jeton doit renvoyer la même valeur ; une réponse rejouée ou substituée est donc refusée au lieu d’être incorporée au document
GetTimeStampStatusetGetTimeStampErrorindiquent l’état propre à l’autorité's et son texte d’échec, afin qu’une demande refusée explique sa cause
Version 3.326.0
Ajouté
- Le moteur PDFium écrit désormais les mêmes formats d’image que GDI+ et Cairo.
RenderPageToFile,RenderPageToStreametRenderPagesToFilesacceptent BMP (option 0), JPEG (1), PNG (5), GIF (6), TIFF (7) et TIFF G4 (10) aprèsSelectRenderer(3), au lieu du seul BMP - La qualité JPEG définie par
SetJPEGQualityet les réglages TIFF actifs s’appliquent aussi à la sortie PDFium ; changer de moteur ne modifie donc plus l’encodage du fichier produit
Corrigé
- Demander PNG ou un autre format non BMP à PDFium renvoyait auparavant 0 tout en laissant un fichier vide. Les applications proposant le choix du moteur produisaient silencieusement une sortie illisible lorsque PDFium était sélectionné
- Demander à PDFium un format de métafichier non pris en charge (WMF, EMF, EPS, EMF+, HTML5) indique désormais les formats disponibles via
LastRenderErrorau lieu de présenter BMP comme seule option
Version 3.324.0
Modifié
- PDFium reçoit désormais le document par une source de données en flux plutôt que par un tampon résident. Le rendu et l’impression sérialisaient auparavant le document puis le recopiaient dans une chaîne, doublant son coût mémoire pour chaque page ; cette copie a disparu et PDFium ne lit que les blocs nécessaires
- Le rendu d’une plage vers des fichiers analyse le document une seule fois pour tout le lot plutôt qu’une fois par page ; une longue plage ne relit donc plus le fichier entier pour chaque image écrite
- Les anciennes versions de PDFium dépourvues du point d’entrée en flux continuent de fonctionner sans changement par le chemin en mémoire
Corrigé
- Le test rapide du moteur cherchait les bibliothèques facultatives PDFium et Cairo un répertoire trop haut et ignorait silencieusement les deux moteurs ; il les trouve désormais et exerce les vrais chemins de rendu
Version 3.323.0
Ajouté
CreateValidationReportetSaveValidationReportproduisent un rapport de validation PDF/A et PDF/UA-1 structuré en XML ou JSON. Chaque constatation comporte l'identifiant de règle, la norme qui la possède, un nom de règle court, la clause ISO qu'elle applique, une sévérité et le nombre d'objets affectés, et le rapport se termine par des statistiques de réussite/échec par norme et au niveau du document- Une norme qui n'a pas été demandée est signalée comme
not-checkedplutôt que comme une réussite silencieuse, de sorte qu'une exécution partielle ne peut pas être confondue avec un bulletin de santé vierge - Les pipelines de génération peuvent désormais filtrer sur un identifiant de règle ou une clause ISO au lieu de faire correspondre des sous-chaînes dans le texte : la famille de rapports preflight produit d'abord un rapport humain et convertit ce texte en JSON, HTML ou CSV, tandis que le rapport de validation est assemblé à partir de la sortie de contrôle brute et conserve les champs lisibles par machine intacts
Version 3.322.0
Ajouté
- La référence documente désormais les quatre types publics déclarés à l'externe utilisés sur la surface
TPDFlibqui n'avaient auparavant pas de page dédiée :TPDFlibProgressEvent,TPDFlibLogger,TPDFlibCertificateInfoetTPDFlibWatermarkBase, complétant la couverture des types publics d'événement, de journalisation, de résultat d'énumération et de filigrane
Version 3.321.0
Ajouté
CheckDocumentPolicyévalue des règles maison déclaratives telles queFonts.NotEmbedded = 0,Security.Encrypted = noouDocument.Pages <= 500par rapport au document et signale chaque règle comme réussie ou échouée avec la valeur réelle, transformant une porte d'ingestion pour les éditeurs, archives et imprimeries en configuration plutôt qu'en code d'inspection écrit à la main
Version 3.320.1
Corrigé
- Dessiner du texte dans un mode PDF/A sans charger au préalable une police ne provoque plus d'erreur : PDF/A exige que chaque programme de police soit intégré, le raccourci implicite vers une police intégrée a donc été refusé et aucune police n'était sélectionnée, et
DrawTextet les autres appels de texte plantaient au lieu de dessiner - Le chemin de police implicite résout désormais une police réelle intégrable pendant qu'un mode PDF/A est actif, de sorte que le texte dessiné sans appel
AddTrueTypeFontexplicite est intégré et reste conforme ; un appel direct àAddStandardFontreste refusé sous PDF/A - Sur les hôtes où aucune police intégrable ne peut être résolue, le dessin revient aux mesures intégrées au lieu de planter et signale le manquement de conformité via
LastErrorCode605, de sorte que le fichier peut être intercepté avant d'être publié comme conforme
Version 3.320.0
Ajouté
GetDocumentFeatureReportrenvoie un rapport de fonctionnalités structuré en un seul appel — métadonnées du document, décomptes de pages et d'objets, état du chiffrement, inventaires des polices et des images, balisage et signets, champs de formulaire, signatures, pièces jointes et la répartition en octets par catégorie — remplaçant la bonne douzaine de requêtes séparées qu'un pipeline de catalogage ou d'ingestion devait auparavant assembler
Version 3.319.0
Ajouté
SetCollectionView,AddCollectionField,SetCollectionSortetSetCollectionItemValueconstruisent des portefeuilles PDF par-dessus les pièces jointes existantes, de sorte qu'un ensemble de fichiers intégrés est présenté comme un paquet navigable avec ses propres colonnes, ordre de tri et valeurs par fichier au lieu d'une simple liste de pièces jointesGetCollectionViewetGetCollectionFieldCountsignalent le mode de présentation et le nombre de colonnes déclarées d'un portefeuille chargé
Version 3.318.1
Corrigé
- L'option d'extraction de texte 12 (ignorer le texte pivoté) supprime désormais les séquences pivotées quelle que soit leur orientation : un quart de tour dans le sens horaire et un quart de tour dans le sens inverse étaient traités différemment, de sorte que les notes de marge latérales étaient écartées dans une direction et renvoyées dans l'autre
- La même option conserve le texte incliné qui est seulement cisaillé, comme une italique synthétique, et la tolérance évolue désormais avec la taille du texte et la transformation de page, de sorte que les grands titres inclinés ne sont plus écartés comme s'ils étaient pivotés
Version 3.318.0
Ajouté
DecodeAllStreamsdéveloppe les flux compressés d'un document sur place, de sorte que l'enregistrer produit une copie dont les flux de contenu, les métadonnées et la structure peuvent être lus directement par les outils de diff, l'examen médico-légal et les flux de travail de support ; les images, les flux de prédiction et les flux de référence croisée conservent leur encodage, et les flux d'objets sont d'abord matérialisés pour que rien ne soit perdu
Version 3.317.0
Ajouté
SetTrappedetGetTrappeddéclarent et lisent l'état de trapping du document que PDF/X exige, écrit comme le nom/Trappedque la spécification appelle plutôt que comme une chaîne de texteSetOutputIntentSubtypeetGetOutputIntentSubtyperé-étiquettent l'intent de sortie, de sorte qu'un profil couleur chargé peut décrire une condition d'impressionGTS_PDFXau lieu de la condition d'archivageGTS_PDFA1que les modes PDF/A créent
Version 3.316.0
Ajouté
SetEncryptEmbeddedFilesOnlyetGetEncryptEmbeddedFilesOnlyrestreignent le chiffrement AES aux fichiers intégrés : le document s'ouvre et se rend dans n'importe quel lecteur sans invite de mot de passe tandis que ses pièces jointes restent chiffrées, l'arrangement standard pour les factures, dossiers médicaux et dossiers d'affaires dont les pages de garde sont publiques mais dont la charge utile ne l'est pas
Version 3.315.0
Ajouté
- L'option d'extraction de texte 18 pivote les séquences peintes à 90, 180 ou 270 degrés dans le cadre de lecture horizontal et regroupe chaque quart de tour séparément, de sorte que les notes de marge pivotées, les en-têtes de tableau et les étiquettes d'axe de graphique s'extraient en lignes lisibles au lieu de s'entremêler avec le texte droit ou d'être écartées
Corrigé
DASetTextExtractionOptionsaccepte l'option 16 (désuffixage) et l'option 17 (séparation de mots par écart de caractères) au lieu de les rejeter, et le chemin d'extraction à accès direct transmet désormais les options 15, 16 et 17 à l'extracteur, de sorte que la suppression des règles de soulignement, le désuffixage et la séparation par écart de caractères s'appliquent aux descripteurs de fichier de la même manière qu'à un document chargé
Version 3.314.0
Ajouté
GetFontHasToUnicodesignale si la police sélectionnée porte une correspondance Unicode, et l'inventaire des polices gagne un champHasToUnicodecorrespondant par police plus un résuméNoToUnicodeCount, de sorte que les documents peuvent être vérifiés pour des polices sûres pour l'extraction et convertibles en PDF/A-*u ou PDF/UA avant le traitement
Version 3.313.0
Ajouté
SetPDFAModegagne le mode 8 pour PDF/A-2u (ISO 19005-2 Level U), le niveau de conformité qui déclare des correspondances de texte Unicode sans autoriser les fichiers intégrés, complétant la famille PDF/A-2 aux côtés des modes 2b et 2a existants
Version 3.312.0
Ajouté
GetObjectByPathetGetObjectByPathCountlisent n'importe quel nœud de l'arbre d'objets via des expressions de chemin telles queRoot/Pages/Kids[0]/MediaBox[2]oupages[0]/Type— types, valeurs scalaires, formes sérialisées et décomptes d'éléments en un appel, remplaçant le parcours d'objet écrit à la main pour les sondes de métadonnées, les vérifications de conformité ponctuelles et les diagnostics de support
Version 3.311.0
Ajouté
SetBlackPointCompensationdéclare la compensation du point noir (ON, OFF ou Default) pour le dessin ultérieur via l'état graphique/UseBlackPtCompde PDF 2.0, permettant aux sorties de prépresse et de preuve de fixer les conversions ICC de tons foncés qui étaient auparavant privées à la visionneuse ; la version du document est élevée automatiquement et les modes PDF/A rejettent l'état
Version 3.310.0
Ajouté
SetCompressionLeveletGetCompressionLevelexposent le niveau deflate pour chaque compression que la bibliothèque effectue : 0 conserve le moteur accéléré SIMD par défaut, 1 privilégie le débit et 9 comprime les archives au minimumRecompressStreamsre-deflate chaque flux FlateDecode simple du document sélectionné au niveau courant et conserve l'encodage le plus petit par flux, réduisant les documents qui ont été écrits à l'origine avec un réglage de compression rapide sans toucher à leur contenu
Version 3.309.0
Ajouté
SetObjectStreamModeetGetObjectStreamModeajoutent un contrôle de flux d'objet à trois états : désactiver, générer (par défaut) ou préserver, où préserver conserve le regroupement compressé original du fichier chargé's et écrit les conteneurs à l'identique, rendant les conversions des fichiers PDF 1.5+ existants moins coûteuses parce que rien n'est dépaqueté ni regroupé
Modifié
- En mode préserver, les membres modifiés depuis le chargement sont promus en objets de niveau supérieur afin que leurs changements soient enregistrés, et tout membre compressé restant sélectionne automatiquement la forme de flux de référence croisée binaire
Version 3.308.0
Ajouté
CheckDocumentStructureexécute une vérification d'intégrité structurelle en un appel : chaque objet et flux est forcé à travers son décodeur, les flux Flate simples sont strictement vérifiés contre le marqueur de fin zlib afin que les données tronquées soient interceptées, et le rapport signale les trailers manquants, les catalogues et pages non résolvables, les gestionnaires de chiffrement non pris en charge et les fichiers réparés par balayage d'octets avec des constatations par objet et une ligne de synthèse
Version 3.307.0
Corrigé
- Les documents endommagés qui utilisent des flux de référence croisée se réparent désormais avec succès : la reconstruction brute récupère les membres des flux d'objets compressés et, lorsqu'aucun mot-clé de trailer n'existe nulle part dans le fichier, synthétise le trailer à partir du catalogue de document joignable le plus récent, de sorte qu'un décalage startxref cassé ne rend plus ces fichiers inouvraibles
Version 3.306.0
Ajouté
ExportDocumentDataécrit les clés d'information du document, tout l'arbre des signets et les plages d'étiquettes de page en texte brut modifiable au format de ligne dump_data classiqueImportDocumentDataapplique le même format en retour — les clés d'information sont mises à jour, l'arbre des signets est reconstruit avec les niveaux d'imbrication et les pages de destination, et les plages d'étiquettes de page sont remplacées — permettant l'édition de signets en masse et la migration des métadonnées entre documents en un appel dans chaque sens
Version 3.305.0
Ajouté
AuditDocumentSpacedécompose l'utilisation en octets du document's par catégorie — images, programmes de police et dictionnaires, flux de contenu, Form XObjects, flux d'objets, fichiers intégrés, métadonnées, arbre de structure, annotations, arbre de pages et autre — avec des décomptes d'objets, des totaux en octets et des pourcentages, répondant à la question de savoir pourquoi un fichier est aussi grand qu'il est et quelle optimisation paie le mieux
Version 3.304.0
Ajouté
StructTreeItemCount,GetStructTreeItemTextetGetStructTreeItemIntPropertylisent l'arbre de structure d'un document balisé sous forme de liste d'éléments aplatie en parcours en profondeur — types d'éléments (bruts et mappés par rôle), texte alternatif et réel, langue, titres, identifiants de contenu marqué, numéros de page et relations parent/enfant
Modifié
- Le lecteur d'arbre de structure se protège contre les documents endommagés : les cycles de référence, les numéros d'objet hors plage et les arbres imbriqués au-delà de 64 niveaux sont coupés au lieu de boucler
Version 3.303.1
Corrigé
- Les tampons de sous-couche translucides créés par
StampTextetStampImagene laissent plus transparaître leur opacité dans le contenu de page original — l'état de transparence est désormais confiné au tampon lui-même, de sorte que la page conserve son opacité complète
Version 3.303.0
Ajouté
OverlayDocumentPagestamponne les pages d'un autre document ouvert sur les pages du document sélectionné, une page source par page cible, au-dessus ou en dess du contenu existant — papier à en-tête, arrière-plans de page continus et modèles de formulaire numérisés en un appel- L'épuisement de la source est configurable : arrêter, parcourir en boucle les pages source, ou continuer à répéter la dernière page source ; une option supplémentaire empêche le tampon d'être agrandi au-delà de sa taille naturelle
Modifié
- Les tampons de document sont ajustés au CropBox de la page cible's et placés à l'endroit sur les pages portant une entrée
/Rotate, et chaque page source est importée une fois comme Form XObject partagé afin que les modèles répétés ne dupliquent jamais leurs ressources
Version 3.302.0
Corrigé
- Les mots de passe AES-256 sont désormais traités avec SASLprep (RFC 4013) avant le hachage, de sorte que les mots de passe contenant des espaces non ASCII, des traits d'union conditionnels, des caractères de compatibilité ou des séquences de combinaison s'ouvrent correctement dans Acrobat et les autres lecteurs conformes
- L'ouverture de documents AES-256 essaie d'abord le mot de passe préparé standard et revient à la forme héritée en octets, de sorte que les fichiers écrits par des versions antérieures avec des mots de passe non ASCII continuent de s'ouvrir
Ajouté
- Le code d'erreur 604 signale un mot de passe AES-256 rejeté par SASLprep parce qu'il contient des points de code interdits ou enfreint les règles bidirectionnelles
Version 3.301.0
Ajouté
SplitDocumentToFileséclate le document sélectionné en un lot de fichiers de sortie avec un nombre fixe de pages chacun, en utilisant un emplacement%pde nom de fichier
Modifié
- Le fractionnement par lots analyse le document source une fois et copie chaque morceau depuis la même structure en mémoire, remplaçant la ré-analyse complète répétée qu'une boucle sur
ExtractFilePageseffectue pour chaque plage
Version 3.300.0
Ajouté
CollateDocumentsfusionne les pages de plusieurs documents ouverts dans le document sélectionné en rotation, prenant un nombre configurable de pages de chaque source par tour (A1, B1, A2, B2, …)CollateDocumentsExaccepte une liste de plages de pages par source où les plages descendantes telles que3-1inversent une source, de sorte que les passages recto et verso inversé du scanner fusionnent en ordre de lecture en un appel
Modifié
- Les fusions collationnées importent chaque source via une seule carte d'objets et entrelacent par réordonnancement des pages, de sorte que les polices et images partagées au sein d'une source ne sont écrites qu'une seule fois quelle que soit la taille du groupe
Version 3.299.0
Ajouté
SetDeterministicDocumentIDetGetDeterministicDocumentIDbasculent l'identifiant de fichier du trailer vers une valeur reproductible afin que des entrées identiques produisent des octets de sortie identiques pour la mise en cache de génération, le stockage adressable par contenu et la comparaison de régression au niveau des octetsSetDocumentIDSeedfournit une graine explicite pour l'identifiant de fichier reproductible ; sans graine l'identifiant est dérivé des métadonnées du document, de l'en-tête de version et du nombre de pages
Modifié
- Les identifiants de fichier reproductibles sont rafraîchis uniquement lors des enregistrements complets ; les mises à jour incrémentielles et les documents chiffrés conservent leur identifiant existant afin que les signatures et les fichiers protégés par mot de passe continuent de s'ouvrir correctement
Version 3.298.0
Ajouté
AddLinkToArticleThreadetSetOutlineArticleThreadconnectent les points chauds de page et les signets à un fil d'article ou à un perle via des actions Thread standardAddActionNextArticleThreadetPDF_ACTION_BUILDER_THREADajoutent des actions Thread aux flux de travail d'actions chaînées, de formulaire, de page et de document
Modifié
- Les cibles d'action Thread utilisent des références indirectes stables de fil et de perle et rejettent les index invalides sans modifier le conteneur de destination
- Les constructeurs d'actions de champ de formulaire rejettent les actions supplémentaires lorsque le mode PDF/A est actif, préservant l'interdiction PDF/A des dictionnaires
/AAde champ et de widget
Version 3.297.0
Ajouté
- La référence de la DLL plate
DLdocumente désormais tous les points d’entrée ANSI à suffixeA(char), ajoutant 353 pages de référence qui reflètent leurs équivalents Unicode avec des signaturesPAnsiCharDelphi etconst char *C exactes BufferUtilities,DirectAccessFunctionalityetMiscellaneousFunctionsont été reconstruits en tant que pages d’index de groupes de fonctions propres, pilotées par le schéma de catégories commun, en corrigeant les balisages défectueux, les sections mal étiquetées et les puces manquantes- L’index de navigation et l’index de recherche partagé couvrent désormais l’ensemble de la surface DLL pour les appelants Unicode et ANSI
Corrigé
- Suppression de l’entrée obsolète
SetLogger, qui n’avait aucun symbole correspondant dans le code source ; la propriété documentée estLogger
Version 3.296.0
Ajouté
AddAlternateImage,AlternateImageCount,GetAlternateImageInfoetRemoveAlternateImagefournissent une création et une inspection typées des variantes d’image d’affichage et d’impression- Les images alternatives peuvent être associées à un groupe de contenu optionnel ou à un dictionnaire d’appartenance, tandis qu’une variante par image de base peut être sélectionnée comme valeur d’impression par défaut
Modifié
- Le moteur de rendu intégré sélectionne désormais les images alternatives de contenu optionnel lorsqu’une image de base est masquée et respecte la valeur d’impression par défaut sur les destinations d’impression
FindImagesenregistre désormais les XObjects d’image alternatifs accessibles depuis les ressources de page afin que les variantes importées reçoivent des handles d’image utilisables
Version 3.295.0
Ajouté
AddArticleThreadcrée une navigation d’article conforme aux normes avec des métadonnées typées, des rectangles de page ordonnés, des liens de perle circulaires et des tableaux de perles par pageArticleThreadCount,GetArticleThreadInfoetGetArticleThreadBeadinspectent les fils d’article créés ou importés avec un parcours borné des cycles de liens endommagés
Modifié
DeletePagessupprime désormais les fils d’article qui perdent toutes leurs perles et répare les liens circulaires des fils survivants- Le suivi des pages supprimées conserve désormais des références de page indirectes stables afin que le nettoyage du plan et des articles ne puisse pas dériver lorsque le curseur de l’arbre des pages se déplace
Version 3.294.0
Ajouté
SearchTextBatcheffectue des recherches sur plusieurs requêtes de texte pendant que chaque extraction de page est résidente et renvoie l’index de requête d’origine en base zéro avec chaque occurrenceSearchTextBatchEachfournit la même recherche en passe unique via un rappel de streaming avec signalement de progression et annulation
Modifié
- La recherche de texte à requête unique et par lot partage désormais un même cœur de correspondance, préservant la sémantique de casse, de mot entier et de plage de pages tout en évitant l’extraction répétée de pages, le pliage de texte et le travail de géométrie des occurrences
Version 3.293.1
Corrigé
- La rastérisation du dégradé maillé ne échoue plus à compiler sur aucune version de Delphi, résolvant
E2089 Invalid typecastsur les conversions réel vers flottant dans le painter GDI+ - Le rendu parallèle de pages par lot compile désormais sur Delphi XE5 et XE6, où
System.Threadingn’est pas disponible ; les chaînes d’outils plus anciennes reviennent au chemin de rendu série comme sur les environnements non Windows - La détection des capacités d’impression ne déclenche plus d’erreur de types incompatibles sur les versions héritées de Delphi en alignant l’appel
SetPrinteravec le reste du code d’impression - L’énumération du magasin de certificats se compile désormais sur RAD Studio 10.3 Rio, qui abandonnait auparavant avec une erreur interne du compilateur lors de l’optimisation de la routine d’énumération
Version 3.293.0
Ajouté
- Les dictionnaires d’appartenance de contenu optionnel peuvent désormais être créés, mis à jour et énumérés avec les politiques de compatibilité
AnyOn,AllOn,AnyOffetAllOff - Les expressions de visibilité
/VEimbriquées de PDF 1.6 prennent en chargeAnd,OretNotvia une représentation préfixée compacte partagée par Delphi et C++Builder
Modifié
- Les portées de contenu optionnel, les flux de contenu, les pages capturées, les images, les champs de formulaire et les annotations acceptent désormais soit un handle de groupe, soit un handle d’appartenance
- Le rendu évalue d’abord les expressions
/VEvalides et revient à/OCGsplus/Ppour les expressions mal formées ou non prises en charge
Corrigé
- Le contenu optionnel imbriqué ne peut plus rendre un contenu visible lorsqu’un groupe ou une appartenance englobant est masqué
- Les dictionnaires d’appartenance sans groupes de contenu optionnel effectifs laissent désormais la visibilité inchangée comme l’exige la spécification PDF
Version 3.292.0
Ajouté
EnumAttachmentssignale désormais les dates de création et de modification, les sommes de contrôle hexadécimales, les relations de fichiers associés et les numéros d’objet de spécification de fichier pour les pièces jointes de document et d’annotationValidateAttachmentChecksumvérifie à la demande une charge utile de pièce jointe par rapport à sa somme de contrôle stockée, tandis que les fichiers nouvellement intégrés reçoivent désormais automatiquement des métadonnées de somme de contrôle
Corrigé
SetEmbeddedFileAFRelationshipaccepte désormais les mêmes index de fichiers intégrés en base 1 que le reste de l’API de pièces jointes, y compris les documents à pièce jointe unique
Version 3.291.0
Ajouté
DeduplicateResourcesconsolide désormais les flux d’image, de formulaire, de motif, de dégradé, de fonction, de profil ICC, de programme de police, de CMap, de CharProc Type 3, de fichier intégré, de métadonnées et de PostScript en doublons exacts sur l’ensemble d’un document chargé- La déduplication des ressources fournit des indicateurs de type indépendants, une analyse à sec, une collecte orpheline facultative et des statistiques détaillées de hachage, de comparaison, de charge utile, de référence et par catégorie
Modifié
- La détection des doublons canonise les dictionnaires de flux complets indépendamment de l’ordre des clés, hache chaque charge utile candidate une fois avec SHA-256 et confirme les compartiments correspondants octet par octet avant de rediriger les références
- Les groupes d’équivalence exacte conservent le numéro et la génération d’objet les plus bas pour une sortie déterministe, tandis que les cycles d’objet direct mal formés et les différences sémantiques de dictionnaire restent non fusionnés
Version 3.290.0
Modifié
PurgeUnusedResourcescalcule désormais une fermeture de dépendance transitive sur les motifs de tuilage, les glyphes Type 3, les états d’apparence d’annotation, les groupes de masque doux ExtGState, les images, les dégradés et les espaces colorimétriques imbriqués- Les options de nettoyage par défaut activent désormais l’analyse des dépendances de motif, Type 3, apparence, masque doux et image, avec des indicateurs indépendants pour les appelants nécessitant un balayage plus restreint
- Les programmes de contenu imbriqués et les entrées de dépendance sont mis en cache, les portées de ressources partagées sont privatisées avant l’élagage et les cycles mal formés sont bornés par des gardes de flux actif et de profondeur
Corrigé
- Les ressources de page utilisées uniquement via les espaces colorimétriques d’image, les bases Indexed, les alternatives Separation ou DeviceN, les espaces sous-jacents de motif, les alternatives ICCBased ou les dictionnaires de dégradé ne sont plus supprimées comme inutilisées
- Les ressources utilisées uniquement par les CharProcs Type 3, les cellules de motif de tuilage, les apparences d’annotation ou les groupes de masque doux de transparence ne sont plus supprimées de leur propre portée ou héritée
Version 3.289.0
Ajouté
PurgeUnusedResourcessupprime désormais les ressources de page nommées qui ne sont pas référencées par les calques de contenu sélectionnés et peut renvoyer des statistiques détaillées par catégorie- Le nettoyage des ressources prend désormais en charge les plages de pages, le signalement à sec, la progression et l’annulation, l’analyse récursive des Form XObjects, la suppression des ProcSets obsolètes et la collecte facultative d’objets orphelins
Modifié
- L’analyse des ressources suit désormais la sensibilité à la casse des noms PDF, les ressources de formulaire héritées, les espaces colorimétriques d’image en ligne personnalisés et les sept catégories de ressources standard
- Les programmes de formulaire répétés sont mis en cache, les ensembles de ressources utilisées utilisent une recherche triée et les entrées de dictionnaire sont supprimées par ordre décroissant pour des performances prévisibles sur les grands documents
Corrigé
- La suppression des entrées de dictionnaire invalide désormais les index de clés des grands dictionnaires afin que les recherches ultérieures ne puissent pas renvoyer d’entrées obsolètes
- Les flux mal formés et les opérateurs inconnus préservent par défaut l’ensemble de leur portée de ressources, tandis que les dictionnaires de ressources partagés ou hérités sont clonés avant mutation
Version 3.288.0
Ajouté
- Les signatures numériques peuvent désormais émettre des structures complètes de certification DocMDP et de verrouillage de champ FieldMDP, avec des rapports d’autorisation structurelle pour chaque signature sélectionnée
- Les horodatages de document RFC 3161, les horodatages de signature, l’injection de jetons PAdES-B-T, la validation de chaîne de certificats, les preuves OCSP et le matériel de validation DSS ou VRI disposent désormais de workflows complets de création et de vérification
- Les annotations RichMedia prennent désormais en charge les ressources intégrées, les paramètres d’activation et de désactivation, les apparences d’affiche, l’énumération, l’extraction et la suppression
- L’impression en poster prend désormais en charge l’imposition vectorielle des pages, les repères de chevauchement et de coupe, le placement sensible aux marges matérielles et les plans de tuilage réutilisables
- Les tableaux balisés émettent désormais une structure sémantique Table, TR, TH et TD avec des identifiants stables, des associations d’en-tête, des portées, des en-têtes répétés et une décoration artifactisée
- La visionneuse fournit désormais une édition AcroForm accessible au clavier pour les champs de texte, de choix, de case à cocher, de radio et de bouton-poussoir tout en distribuant les actions à l’application hôte
Modifié
- Les dégradés maillés basés sur fonction Type 1 et de Type 4 à 7 sont désormais rendus via l’évaluation de fonction native et la tessellation maillée bornée
- Le rendu couleur ICCBased partage désormais les transformations mises en cache entre les images et les dégradés tout en préservant le comportement d’espace colorimétrique calibré
- Les sauvegardes incrémentielles reconstruisent désormais les flux d’objets et les flux de références croisées de manière cohérente, et les signatures sélectionnées sont vérifiées par rapport à leur propre révision signée
Corrigé
- Les demandes d’horodatage de signature SHA-1 hachent désormais la valeur de signature du signataire avec SHA-1 au lieu de revenir à SHA-256
- Les remplacements de verrouillage de champ rejetés ne suppriment plus une configuration de verrouillage de champ précédemment valide
- Les widgets radio avec des noms d’état d’apparence en double préservent désormais le widget sélectionné et maintiennent les widgets frères éteints
Version 3.287.0
Modifié
- Les dictionnaires d’image en ligne suivent désormais les limites de commentaire, de délimiteur, de littéral, d’hexadécimal, de tableau et de dictionnaire PDF avec une imbrication bornée
- Les charges utiles d’image en ligne utilisent désormais une terminaison sensible au format pour les données raw, DCT, ASCII85, ASCIIHex, RunLength et Flate
- La découverte de charge utile Flate effectue désormais une décompression bornée depuis l’offset de flux de contenu avec une comptabilité exacte des octets compressés, tandis que les filtres sans perte chaînés partagent un plafond de sortie de bout en bout
- Les flux ASCII85, ASCIIHex, LZW, de prédicteur, de profil colorimétrique et d’image auxiliaire appliquent désormais une sortie intermédiaire bornée sans allocations temporaires surdimensionnées
Corrigé
- Les images en ligne mal formées ou tronquées ne lisent plus au-delà des données source, ne bouclent plus sur des valeurs non terminées et ne conservent plus d’état obsolète lors de la réutilisation du décodeur
- Les lignes d’image compactées calculent désormais les bits de composant avant l’arrondi d’octet, empêchant les longueurs incorrectes pour les images RGB à faible nombre de bits et multi-lignes
- Les espaces colorimétriques de ressources préservent désormais leurs noms d’origine tout en dérivant les nombres de composants Lab, ICCBased indirects et DeviceN et en décodant les flux de palette Indexed sous des limites strictes
- Les limites d’image en ligne rejettent désormais de manière cohérente les dimensions invalides, les profondeurs de bit, les filtres non pris en charge, les chaînes de filtres non sûres, les flux compressés et les marqueurs de fin ambigus
- Le rendu couleur Indexed valide désormais chaque accès à la palette et rejette les données de recherche tronquées au lieu de lire au-delà de la table décodée
- Les prédicteurs PNG 10 à 15 se décodent désormais correctement pour les flux Flate et LZW, rejettent les filtres de ligne invalides et valident toutes les tailles de ligne et d’état avant l’allocation
- Les charges utiles JPEG et JPEG 2000 vérifient désormais leurs dimensions encodées, composants, précision, structure de marqueur, longueurs de boîte et empreinte de stockage décodé avant l’allocation d’image
- La validation d’image en ligne limite désormais le stockage bitmap compacté et étendu et borne les profils ICC, les globals JBIG2 et les paramètres de filtre terminal
- Les charges utiles de filtre binaire contenant du texte de marqueur de fin intégré continuent désormais jusqu’au premier candidat qui passe la validation de format bornée
Version 3.286.0
Modifié
- La tokenisation des flux de contenu respecte désormais les limites PDF des espaces, commentaires, délimiteurs, chaînes littérales, chaînes hexadécimales et noms
- La séparation du texte et le remplacement des ressources utilisent désormais des tampons de sortie à croissance géométrique pour traiter linéairement les grands flux de contenu
- Les processeurs de flux de contenu réutilisables réinitialisent désormais l’état dérivé de sortie et d’analyse avant chaque appel à
Process
Corrigé
- Les chaînes littérales ou hexadécimales mal formées ou tronquées ne lisent plus au-delà du tampon source et n’émettent plus de jeton vide supplémentaire
- Le remplacement des ressources préserve désormais la casse des noms PDF, accepte une barre oblique initiale facultative et met à jour les correspondances en double de manière déterministe
- Les opérandes XObject et d’ombrage au début d’un flux sont désormais exclus de la sortie texte, tandis que les opérateurs de restauration sans correspondant n’annulent plus les états graphiques enregistrés ensuite
Version 3.285.0
Modifié
- L’encodage LZW utilise désormais une consultation de dictionnaire en temps constant et des écritures mises en tampon ; le décodage emploie des tables compactes de préfixes et suffixes avec croissance géométrique de la sortie
- Le décodage du prédicteur Flate traite désormais les lignes directement dans le tampon de sortie et prend en charge les échantillons TIFF compactés, sur 8 bits et sur 16 bits avec tout nombre de composantes
- Les flux Deflate stockés écrivent désormais dans un résultat préalloué à la taille exacte, et les wrappers zlib libèrent correctement leurs tampons temporaires en cas d’échec de compression ou de décompression
Corrigé
- Les changements de largeur de code LZW suivent désormais la sémantique PDF de
EarlyChangepour les codes de 9 à 12 bits, y compris la réinitialisation du dictionnaire etEarlyChange=0 - Le décodage LZW refuse désormais les codes futurs incorrects et les flux de bits tronqués sans lire au-delà du tampon source
- Les prédicteurs PNG utilisent désormais la largeur en octets arrondie au supérieur d’un pixel, conservent les lignes décodées précédentes et complètent sans risque une dernière ligne partielle
- Le décodage du prédicteur TIFF traite désormais uniformément les composantes sur 1, 2, 4, 8 et 16 bits dans les chemins LZW et Flate
Version 3.284.0
Modifié
- Les recherches dans les tampons parcourent désormais des blocs fixes de 64 Kio, utilisent des tables d’octets pour l’appartenance aux ensembles et préservent la position de l’appelant sur tous les chemins de recherche
- Les conversions Unicode, Latin-1, de condensat hexadécimal et ARC4 réservent désormais une sortie bornée une seule fois au lieu d’agrandir plusieurs fois chaînes et tableaux temporaires
- L’encodage ASCII85 lit désormais les flux d’entrée par blocs de 32 Kio, tandis que le décodage emploie une arithmétique entière exacte et écrit directement dans un tampon de sortie préalloué
- Le hachage MD5 des chaînes évite désormais un flux mémoire temporaire, la comparaison des condensats examine chaque octet et la préparation de clé ARC4 n’alloue plus de tableau de clé développé
Corrigé
DistanceToAnyByterenvoie désormais le décalage correct au-delà de son premier bloc au lieu de relire le même préfixe et de surcompter les octets ignorés- Les lectures de tampon adossées à un flux respectent désormais le nombre réel d’octets renvoyé par les flux personnalisés, en réduisant le résultat et en avançant uniquement du nombre d’octets reçus
- La réduction de longueur d’un tampon borne désormais la position courante, et les sources pointeur nil ou flux nil se comportent comme des entrées vides au lieu d’exposer une mémoire incorrecte
- Le décodage Latin-1 mappe désormais toute la plage 0x00-0xFF au lieu de remplacer les octets 0x7F-0xFF
- Le décodage ASCII85 préserve désormais le groupe maximal valide sur 32 bits
s8W-!et s’arrête au premier marqueur de fin sans perte de limite due aux virgules flottantes
Version 3.283.0
Ajouté
TPDFlibSignatureVerifierpeut désormais énumérer les champs de signature et signataires CMS, ouvrir des fichiers, flux ou chaînes, puis vérifier un champ et un signataire choisis par index ou nom de champ- Les rapports détaillés séparent désormais l’intégrité cryptographique de la couverture de la révision signée, de celle du fichier courant, des révisions ultérieures, de la validation stricte de l’intervalle Contents et des erreurs cryptographiques natives
Modifié
- La validation CMS détachée transmet désormais les deux segments ByteRange à Windows CryptoAPI en blocs bornés plutôt que de matérialiser tout le PDF en mémoire
- Les champs de signature sous des tableaux Kids AcroForm imbriqués et les entrées
/FT /Sighéritées sont désormais énumérés avec leurs noms entièrement qualifiés, et les dictionnaires directs de valeur de signature sont pris en charge
Corrigé
- La validation ByteRange refuse désormais débordement, chevauchement, troncature, intervalle ne correspondant pas exactement au jeton hexadécimal
/Contentschoisi et révision signée ne se terminant pas à son propre%%EOF - La recherche de certificat ne revient plus à un certificat incorporé sans rapport lorsque l’identifiant du signataire CMS choisi ne correspond exactement à aucun couple émetteur-numéro de série
- Les mises à jour incrémentielles utilisant des flux de références croisées incluent désormais l’entrée de type 1 propre à l’objet de flux de références croisées, empêchant les validateurs PDF stricts de signaler une entrée autoréférencée absente après signature
Version 3.282.1
Modifié
- Les enregistrements complets reconstruisent désormais les flux d’objets importés depuis le graphe d’objets actif, préservent les racines privées de la bande-annonce et conservent les générations d’objets libres sans réutiliser les numéros structurels
- Les flux de références croisées dimensionnent désormais leurs champs de décalage pour les grands fichiers, préallouent leur charge utile, incluent leur propre entrée et préservent les clés d’extension de la bande-annonce
Corrigé
- L’empaquetage en flux d’objets écrit désormais de vrais conteneurs
/ObjStmet des entrées de membre de type 2 au lieu de seulement basculer vers un flux xref - Le ramasse-miettes n’écrit plus les numéros d’objet absents comme entrées actives au décalage zéro et émet désormais une chaîne liée d’objets libres dans les références croisées en texte et en flux
- Les PDF empaquetés chargés peuvent désormais être enregistrés plusieurs fois avec l’empaquetage activé ou non, sans conserver de flux obsolètes, perdre de membres actifs ni exiger de réparation des références croisées
Version 3.282.0
Ajouté
- Les couleurs ICCBased importées utilisent désormais le profil ICC incorporé pour la peinture vectorielle, les ombrages de fonction et de maillage, les palettes indexées, les images bitmap brutes, CCITT, JBIG2, JPEG CMYK et JPEG 2000
Modifié
- Les transformations ICC utilisent désormais une table de consultation bornée de Windows Color System avec interpolation multilinéaire, remplaçant l’aller-retour PNG temporaire employé pendant le rendu des images
- Le moteur respecte désormais les intentions de rendu du flux de contenu et de l’état graphique,
/Ranged’ICCBased,/Decodedes images et les masques de clé de couleur du domaine d’origine, tout en validant le nombre de canaux du profil selon le dictionnaire d’espace colorimétrique PDF - Les utilisations répétées du même profil et de la même intention de rendu partagent désormais une table de consultation entre couleurs vectorielles, motifs, ombrages et images
Corrigé
- Les flux de profils ICC chiffrés ne sont désormais déchiffrés que pendant leur décodage puis restaurés, et les profils incorporés ne sont plus compressés deux fois lors de l’écriture des images
Version 3.281.0
Ajouté
- Le moteur GDI+ intégré peint désormais les ombrages PDF importés fondés sur des fonctions ainsi que les maillages libres, en treillis, de Coons et tensoriels (types 1 et 4 à 7), y compris la transparence et le découpage
- Les dictionnaires d’ombrage prennent désormais en charge les tableaux Function par composante, les espaces Lab, CalGray et CalRGB étalonnés, les transformations de teinte Separation et DeviceN, les fonds PatternType 2 et le découpage BBox dans GDI+ et Cairo
Modifié
- Les fonctions d’ombrage de type 1 emploient désormais un échantillonnage adaptatif borné des couleurs avec sondes supplémentaires au quart de cellule, offrant plus de précision sur les détails étroits et moins de travail sur les zones constantes ou lisses
- Les matrices PatternType 2 autour des maillages d’ombrage ne sont désormais composées qu’une fois dans GDI+ et Cairo, préservant le placement translaté, mis à l’échelle et pivoté du motif
- Les composantes de couleur des maillages sont désormais interpolées dans leur espace source avant l’évaluation de Function et la conversion RGB, préservant les fonctions non linéaires, les dégradés DeviceCMYK et l’ordre correct des transformations colorimétriques gérées
- Les surfaces de Coons et tensorielles utilisent désormais une subdivision bornée par l’erreur en pixels du périphérique, produisant des courbures élevées plus lisses aux grandes tailles de rendu
- Les flux d’ombrage et Function chiffrés sont décodés par les callbacks cryptographiques du document, et les enregistrements de sommets de type 5 respectent l’alignement d’octets requis
Version 3.280.1
Corrigé
MergeFileList/MergeFileListFast/MergeFileListStrictlaissaient fuir une paireTSmartPDFReader/TSmartPDFDocumentet ses objets lorsqu’un fichier non PDF figurait dans la liste : le lecteur et le document étaient créés avant le bloctryqui les libère, de sorte qu’un échec d’analyse sur le contenu incorrect du fichier abandonnait le lecteur déjà créé au lieu de laisser le gestionnaire d’exception le nettoyer ; la construction se fait désormais dans letryprotecteur pour les préanalyses mono et multifichier- L’analyse des ombrages de maillage (
TPLMeshShading.Parse, types 1 et 4 à 7) laissait fuir l’objet/Functiondécodé à chaque analyse : les sorties anticipées comme la fin normale omettaient de le libérer ; il est désormais libéré dans un blocfinallyquelle que soit la sortie deParse TPDFlibSignDoc.Closeremet désormais à nil ses champs lecteur, document et informations après libération, et les chemins d’exception deOpen,OpenStreametOpenStringlibèrent les objets intelligents partiellement créés au lieu de seulement effacer la référence au flux, évitant une fuite lorsqu’une cible de signature échoue en cours d’ouverture
Version 3.280.0
Ajouté
- L’énumération de catégories d’erreur
TPDFlibErrorCategory(ecSuccess/ecStructure/ecSave/ecCrypto/ecGeneric/ecCompliance/ecAcroForm) complète la taxonomie numériqueLastErrorCode, permettant de classer les échecs sans mémoriser les plages ; elle est exposée parTPDFlib.LastErrorCategory,TPDFlib.ErrorCategory(Code)etTPDFlib.ErrorMessage(Code) - Les codes d’erreur de champ 701 à 704 (champ introuvable, en lecture seule, AcroForm absent, valeur incorrecte) possèdent des messages lisibles, afin de distinguer "champ verrouillé" de "champ inexistant" plutôt que de recevoir un échec générique
- La variante d’écriture forcée
SetFormFieldValueForcedcontourne le garde de lecture seule ; elle est utilisée en interne parSetFormValues(SkipReadOnly=False)afin que les importations en masse puissent remplacer les champs verrouillés lorsque l’appelant le demande explicitement
Modifié
SetFormFieldValuedéfinit désormaisLastErrorCodeà 701/702/703 en cas d’échec (champ introuvable, en lecture seule ou AcroForm absent) au lieu de renvoyer silencieusement 0 ;LastErrorCategoryest une lecture non consommatrice permettant d’inspecter la catégorie avant le code numérique
Version 3.279.0
Ajouté
ReplacePageRangesremplace le contenu visuel de pages depuis un autre document ouvert sans changer le nombre de pages ni l’identité des objets de page cibles, préservant signets, liens, annotations et widgets de formulaire déjà attachés
Modifié
- La copie de pages entre documents ne crée et ne supprime plus de page temporaire supplémentaire avant d’importer la plage demandée
Version 3.278.0
Ajouté
PrintPagesAdvancedapplique copies, assemblage, recto verso, orientation, couleur, qualité, format de papier et bac d’entrée à toute expression de plagePrintPages, tout en conservant un profil d’imprimante et un seul travail
Modifié
- Les réglages avancés sont validés avant le démarrage, les valeurs positives de qualité supérieures aux quatre préréglages nommés sont appliquées comme DPI, et les identifiants de papier ou de bac peuvent utiliser toute la plage positive de leurs champs
DEVMODE
Corrigé
- La récupération de références croisées endommagées transmet désormais ses lectures de blocs bornés à la surcharge traditionnelle
TStream.Readsous Win64, préservant l’instrumentation et le comportement des flux personnalisés avec des E/S séquentielles de 64 Kio
Version 3.277.0
Modifié
- La récupération de références croisées endommagées analyse désormais les données source par blocs séquentiels de 64 Kio plutôt que de repositionner le flux pour chaque caractère correspondant, en gardant une mémoire auxiliaire bornée pour les grands PDF et les flux non mémoire
- La récupération valide les jetons complets d’objets indirects, ignore les données ressemblant à des objets dans commentaires, chaînes et flux, confirme la fin d’un flux par le jeton
endobjsuivant, préserve les en-têtes coupés entre deux lectures et choisit le dernier dictionnaire de bande-annonce valide
Corrigé
- La reconstruction de bande-annonce accepte désormais les dictionnaires imbriqués et les délimiteurs dans les chaînes littérales, sans être tronquée aux 2048 premiers octets ni à la première paire
>>apparente
Version 3.276.0
Ajouté
ActivateWebLinksetActivateWebLinksExanalysent une seule fois le texte existant de chaque page et créent des annotations de lien URI sans doublon pour HTTP, HTTPS,www., FTP,mailto:et les adresses électroniques nues, avec options de détection et de bordure- Les liens générés utilisent la géométrie des caractères correspondants, des quadrilatères précis pour le texte pivoté ou incliné lorsque permis, les indicateurs d’impression PDF/A, la progression et l’annulation, puis restaurent la page sélectionnée ; les documents PDF balisés et PDF/UA sont protégés des mises à jour incomplètes de l’arbre de structure
Modifié
SetAutoCreateWebLinksutilise désormais le même détecteur sensible aux limites et la même normalisation de cible pour créer les liens du nouveau texte, avec prise en charge dewww., FTP et des adresses électroniques nues
Corrigé
- La mise à jour de
/Contents, du nom, de la date, du titre ou du sujet d’une annotation n’écrase plus le sous-type d’un dictionnaire d’action existant ; les actions URI et autres restent donc valides après modification des métadonnées
Version 3.275.0
Ajouté
ExtractPageRangeText,SavePageRangeTextToStreametSavePageRangeTextToFileextraient une plage analysée en une passe avec des séparateurs de pages définis par l’appelant ; les sorties flux et fichier écrivent progressivement en UTF-8, sans tampon texte de la taille du documentSetPageBoxRangeetRemovePageBoxRangeappliquent les modifications de limites de page à la syntaxe standard des plages tout en préservant la page sélectionnée par l’appelantSetPageTransitionRangeetSetPageTransitionRangeExappliquent des transitions de présentation anciennes ou étendues aux plages de pages, avec progression par page et annulationGeneratePageThumbnailsrend les pages demandées directement dans une mémoire réutilisable et attache leurs images/Thumbsans fichiers intermédiaires ni opérations de progression imbriquées
Version 3.274.0
Corrigé
- Le rendu GDI+ des ombrages axiaux respecte désormais le tableau PDF
/Extend:SetupGDIPlusPatterntransmetWrapModeClamplorsqu’une extrémité est prolongée, comme Cairo, au lieu de toujours employerWrapModeTile, afin de peindre correctement les couleurs terminales hors de l’axe
Ajouté
- La bulle d’indication de défilement (
"Page N / M") affichée pendant le déplacement de la barre verticale se masque automatiquement après 3 secondes d’inactivité via un gestionnaireWM_TIMER, au lieu de rester jusqu’à un autre événement de défilement ZoomInStep/ZoomOutSteps’alignent désormais sur les pourcentagesActualSize(100 %),FitWidthetFitPagelorsqu’ils se situent entre le zoom courant et le préréglage suivant de l’échelle à 14 niveaux, comme les visionneuses PDF professionnelles- Le cache disque de pages écrit un marqueur de version (
cache.version) et efface toute sa racine lorsque la version de la bibliothèque change, afin qu’une mise à niveau ne réutilise jamais des bitmaps obsolètes rendus par un ancien chemin
Version 3.273.1
Corrigé
- Les conteneurs de flux d’objets et objets de flux xref créés à l’enregistrement fuyaient car ils contournaient l’inscription par
TPDFStructure.AddObject; les deux sites utilisent désormais la fabriqueNewStreamWithDictqui suit la propriété, supprimant la fuiteTPDFStreamsignalée par le banc d’essai avecReportMemoryLeaksOnShutdown - La valeur
/Sizedu flux de références croisées était inférieure d’une unité : elle doit dépasser d’un le plus grand numéro d’objet du fichier, et le flux xref est lui-même l’objet indirectMaxObj+1;/Sizevaut donc désormaisMaxObj+2
Modifié
- L’optimiseur local des flux de contenu retire aussi les opérateurs de matrice de texte identité (
1 0 0 1 0 0 Tm), couvrantcmetTmavec le même contrôle d’identité à six opérandes - Le GC mark-sweep préserve l’objet 1, dictionnaire de paramètres
/Linearized, lorsque le document source était linéarisé, car ce dictionnaire n’est jamais référencé depuis/Rootmais doit subsister
Version 3.273.0
Ajouté
- L’empaquetage des flux d’objets à l’enregistrement (
TPDFDocument.PackObjectsIntoStreams) rassemble les objets indirects non-flux admissibles, les sérialise dans des flux d’objets PDF 1.5 (/Type /ObjStm) compressés avec Flate et émet un flux binaire de références croisées (/Type /XRef) contenant les entrées de types 0, 1 et 2, réduisant de 10 à 40 % les fichiers riches en objets - L’indicateur
TPDFlibSaveOptions.PackObjectStreamset les APITPDFlib.SetPackObjectStreams/GetPackObjectStreamssont activés par défaut et conditionnés automatiquement par la version PDF : PDF 1.5+ active l’empaquetage et les flux xref, tandis que PDF 1.4 et antérieur conserve les références croisées textuelles pour compatibilité ;TPDFlib.GetLastSaveUsedObjectStreamsindique si le dernier enregistrement a réellement empaqueté les objets
Version 3.272.0
Ajouté
- Le ramasse-miettes mark-sweep des objets indirects non référencés (
TPDFDocument.GarbageCollectUnusedObjects) parcourt le graphe depuis les racines de la bande-annonce (/Root,/Info,/Encrypt) et supprime tout objet inaccessible, stoppant la croissance due aux pages supprimées dont les polices, contenus et XObject deviennent orphelins - L’indicateur
TPDFlibSaveOptions.GarbageCollectet les APITPDFlib.SetGarbageCollect/GetGarbageCollectpermettent d’activer le GC pendant un enregistrement complet, désactivé par défaut pour compatibilité ;TPDFlib.GarbageCollectObjectsl’exécute immédiatement et renvoie le nombre d’objets orphelins supprimés
Version 3.271.0
Ajouté
- L’optimiseur local de flux de contenu (
TPDFContentPeepholeOptimizer) réécrit le flux analysé avant compression Flate en supprimant les opérateurs PDF redondants : matricescmidentité, pairesq/Qvides, objetsBT/ETvides, chemins sans effet terminés parnsans découpage, setters d’état graphique répétés etninutiles après peinture ; toutes les transformations préservent exactement le rendu visible - L’indicateur
TPDFlibSaveOptions.OptimizeContentStreamset les APITPDFlib.SetOptimizeContentStreams/GetOptimizeContentStreamspermettent d’activer ou non cette réécriture pendantCompressContent/CompressPage; elle est activée par défaut
Modifié
TPDFDocument.CompressPagetransmet désormais l’indicateur d’optimisation à l’arbre de pages afin que la passe locale s’exécute dansTPDFPageTree.Compressavant la compression Flate existante, cumulant réduction des opérateurs et compression des octets
Version 3.270.0
Ajouté
- Le nouveau
PLParseDefaultAppearancedécode une chaîne d’octets d’apparence par défaut/DA(ISO 32000-2 12.7.4.3) en nom de ressource de police, taille et couleur de remplissage, avec les opérateursrg,ketG, afin que les apparences de champs et d’annotations respectent le style de l’auteur
Modifié
- L’assemblage des flux de contenu de page (
TPDFRenderer.GetContents) concatène désormais les tableaux/Contentsmultiparties avec unTStringBuilderplutôt que parResult := Result + chunk, éliminant la croissance O(n^2) des pages comportant de nombreuses parties
Version 3.269.0
Ajouté
- Les nouveaux
BeginMarkedContent/EndMarkedContentécrivent directement des séquences de contenu marqué avec propriétés d’accessibilité (/Alt,/ActualText,/Lang,/E) dans la liste de propriétés BDC selon ISO 32000-2 14.9.2–14.9.5, permettant aux lecteurs d’écran d’obtenir le texte de substitution sans entrée d’arbre de structure - Le lecteur d’annotations expose
GetAnnotEffectiveBorder, qui applique la priorité de l’Errata #287, où le dictionnaire de style/BSprime sur l’ancien tableau/Border, et résout en un appel largeur, style et motif de tirets - Les documents de signature exposent
GetSignatureSeedValuepour lire le dictionnaire de valeur initiale (/SV, ISO 32000-2 12.7.5.5 Tables 236–237) : filtre obligatoire, SubFilters autorisés et méthodes de condensat permises, afin que le signataire respecte les contraintes de l’auteur GetSignatureFieldLocklit le dictionnaire initial FieldMDP/Lock(Table 238) : action (/All,/Include,/Exclude) et noms des champs à verrouiller lors de la signature
Version 3.268.0
Ajouté
- Le nouveau
PLParsePDFDateanalyse les dates ISO 32000-2 7.9.4 (D:YYYYMMDDHHmmSSOHH'mm') enTDateTimelocal, en respectant le préfixe obligatoireD:, la dépendance séquentielle des champs et le décalage UT (+/-/Zavec minutes apostrophées facultatives), et renvoie l’équivalent local de l’instant indiqué - Le décodage des chaînes de texte (
PLDecodeTextString) reconnaît désormais le BOM UTF-8 de PDF 2.0 (EF BB BF) selon 7.9.2.2.1, afin que les métadonnées UTF-8 ne soient plus interprétées comme PDFDocEncoding - Les spécifications de fichier exposent
GetFileNameselon la priorité PDF 2.0 (Path > UF > F) de l’Errata #444, ainsi que les accesseursGetEmbeddedFileStreametGetRelatedFilespour les dictionnaires/EFet/RF - Les lecteurs d’annotations exposent
GetAnnotNormalAppearance,GetAnnotDefaultAppearanceetGetAnnotOffStateAppearance, qui appliquent les règles de priorité des Errata #23/#34/#42/#170 : AP/N fait autorité, DA sert de chaîne d’octets de repli et l’état Off se trouve sous le nomOff - La validation PDF/UA signale le nouveau code 10045 lorsqu’un type de structure non standard n’aboutit pas à un type standard par la chaîne RoleMap (ISO 14289-1:2014 7.1), avec protection contre les cycles jusqu’à une profondeur de 8
- Les audits de polices PDF/A et PDF/UA vérifient désormais qu’une police CIDFontType2 incorporée possède un
/CIDToGIDMapdont la valeur est le nomIdentityou un flux, et non seulement que l’entrée existe (ISO 32000-1 9.7.4)
Modifié
- La recherche dans les arbres de noms (
NameTreeLookup) effectue désormais une recherche binaire dans le tableau triéNamesselon ISO 32000-2 7.9.6 avant de revenir à un parcours linéaire, faisant passer les grandes recherches EmbeddedFiles/JavaScript/Dests de O(n) à O(log n) dans les fichiers conformes - L’ensemble des types de structure PDF/UA standard inclut désormais les ajouts PDF 2.0 (
Artifact,DocumentFragment,FENote,MarkedContent,Title), afin que les contrôles de non-remappage et de terminaison reconnaissent tout le vocabulaire de balises
Version 3.267.0
Ajouté
EnumPageContentStatesExpeut énumérer récursivement les instructions de Form XObject avec profondeur configurable, protection contre les cycles et ordre d’exécution en profondeur- Les instantanés de contenu exposent désormais l’identité de l’arbre d’invocation, avec le flux, le XObject parent, l’identité de portée des ressources, l’état du parcours Form et le nombre de descendants
- Les traceurs de contenu autonomes peuvent enregistrer des polices délimitées par portée et initialiser un état d’exécution Form isolé avec concaténation de matrice et découpage par boîte englobante
Modifié
- Le traçage récursif sélectionne indépendamment chaque dictionnaire de ressources Form, hérite des ressources appelantes pour les anciens Forms compatibles, préserve l’identité des polices héritées et met en cache les programmes Form décodés entre invocations répétées
Version 3.266.0
Ajouté
- Les séquences de texte renvoyées par
GetTextRunsportent désormais l’origine du glyphe (OriginX/OriginY) et toutes les composantes de matrice (Tm11/Tm12/Tm21/Tm22/TmDX/TmDY) capturées en rejouant BT, Td, TD, Tm et T* avec les opérateurs d’affichage, permettant de localiser les glyphes sans passe textuelle distincte - Le décodage des ombrages de maillage transmet désormais les espaces Lab, CalRGB et CalGray au gestionnaire de couleurs au lieu de les convertir en noir, produisant les remplissages corrects des maillages libres et de Coons non DeviceRGB
- La rédaction émet désormais une véritable annotation
/Subtype /Redactavec/Rect, couleur intérieure/ICet texte de superposition facultatif, en plus de la suppression du contenu, afin que les lecteurs compatibles marquent la zone assainie - Les opérations de la bibliothèque émettent des journaux structurés aux limites de chargement et d’enregistrement par le
Loggerauparavant inactif, avec horodatage UTC ISO-8601 et sortie fichierTStreamWritermise en cache qui ne rouvre plus le fichier à chaque ligne - Le nouveau fixture
Tests.Memoryprotège les cycles créer/tracer/enregistrer/libérer etNewDocumentcontre les régressions du tas, et le lanceur console active désormaisReportMemoryLeaksOnShutdown - L’interprétation EMF compte désormais les enregistrements inconnus ou privés via la propriété
UnknownRecordCount, rendant visibles les lacunes auparavant silencieuses des métafichiers
Modifié
- La recherche de clé de dictionnaire (
TPDFDictionary.FindIndexByKeyName) construit paresseusement un index de hachage à adressage ouvert au-delà de 16 entrées, transformant en sondage O(1) le parcours linéaire dominant des recherches Resources/ColorSpace/Font/ExtGState du moteur - La conversion gamma sRGB (
XYZ2RGB) utilise une table partagée de 4096 entrées plutôt que trois appelsPower(x, 1/2.4)par pixel, et le cube Lab vers XYZ emploie des multiplications directes ; ces opérations dominaient le coût par pixel des images Lab ou ICC - La recherche de page (
TPDFPageTree.GetPage) renvoie désormais le dictionnaire mis en cache lors d’accès répétés au lieu de reparcourir l’arbre de pages - La distribution des opérateurs de flux de contenu (
ContentOperatorFromName) répartit les 73 opérateurs selon leur premier octet, réduisant le parcours linéaire par jeton à quelques comparaisons - L’audit d’espace colorimétrique PDF/A descend désormais dans l’espace de base ou alternatif d’Indexed, Separation, DeviceN et ICCBased jusqu’à une profondeur de 8, afin de signaler une transformation DeviceCMYK cachée ou un nom Lab nu
- La finalisation des polices façonnées parcourt désormais l’ensemble des glyphes utilisés enregistré lors du dessin au lieu d’examiner quatre fois les 65 536 emplacements à chaque enregistrement
- Les routines d’échappement de chaînes, XFDF, tampons et jetons de variables construisent leur sortie avec
TStringBuilderou une allocation en deux passes, éliminant les concaténations O(n^2) des chemins critiques d’enregistrement et d’exportation de formulaires - Le chiffrement et le déchiffrement des flux AES réutilisent leur tampon de blocs entre les itérations au lieu de le réallouer à chaque bloc
- L’analyse des glyphes composites TrueType agrandit désormais géométriquement le tableau des composantes plutôt que d’ajouter un élément à la fois
- Dans les ombrages de maillage,
ReadBitslit en une passe le minimum d’octets couvrants etWriteBitspréalloue le tampon de sortie, éliminant les réallocations par bit - Le point de contrôle de cercle du peintre utilise une constante kappa précalculée et la mise au carré des arcs emploie
Sqrplutôt quePower
Corrigé
- Correction d’une rupture de compilation non Windows dans
PDFlibParallel, où la signature du corps stub dePDFlibRenderPagesParallelne correspondait pas à la déclaration de l’interface
Version 3.265.0
Ajouté
- Ajout de 59 démonstrations console C++Builder pour aligner la suite C++Builder sur Delphi, portant le total de 33 à 92 démonstrations couvrant les mêmes surfaces d’API
- Extension de Demo/C++Builder/index.html de 35 à 92 entrées avec les sections Navigation, Color & ICC, Barcode & media et Structure & compliance
Corrigé
- Correction des 33 fichiers cbproj C++Builder existants qui omettaient 20 unités de bibliothèque (PDFlibMeshShading, PDFlibGraphics, PDFlibWindows, PDFlibParallel, PDFlibLogger, PDFlibMail, PDFlibViewer, etc.) de leur liste DelphiCompile, empêchant toutes les démonstrations C++Builder de compiler
Version 3.264.0
Ajouté
- Les instantanés d’état graphique de contenu résolvent désormais les opérandes
Docomme XObject image, Form ou PostScript et indiquent leurs noms de ressource, numéros d’objet et limites transformées - Les instantanés Form exposent la
/Matrixet la/BBoxd’origine ainsi que les indicateurs de ressource, groupe, groupe de transparence et Form de référence - Les traceurs de contenu autonomes peuvent préenregistrer les flux XObject avec
RegisterXObject
Modifié
- L’énumération des états de contenu précompile désormais les ressources XObject de la page sélectionnée et calcule les limites d’invocation depuis les quatre coins transformés
Version 3.263.0
Ajouté
- Les instantanés d’état graphique exposent désormais les limites et le point courant du chemin, sa complexité, les règles de découpage en attente et les limites effectives de découpage
- Les traceurs de contenu autonomes peuvent initialiser une limite de découpage explicite avec
SetInitialClipBounds
Modifié
- L’énumération des états de contenu suit désormais le découpage différé
WetW*, les extrema cubiques transformés exacts, la restauration du découpage parq/Qet les limitesCropBoxde la page sélectionnée
Version 3.262.0
Ajouté
- Les instantanés d’état graphique indiquent désormais le mode d’écriture de la police, le déplacement exact du texte pour chaque instruction et la résolution ou non des métriques
- Les traceurs de contenu autonomes peuvent fournir les mesures de police par
OnMeasureText
Modifié
- L’énumération des états de contenu avance désormais les matrices de texte pour
Tj,TJ,'et"en utilisant les métriques de polices simples ou composites, la mise à l’échelle horizontale, l’espacement et les règles d’écriture verticale
Version 3.261.0
Ajouté
- Le traçage d’état graphique peut désormais résoudre les ressources
ExtGStatede page, notamment transparence, fusion, surimpression, masques doux, contrôles de périphérique et références de polices incorporées TPDFContentStateTrackerpeut préenregistrer des dictionnaires d’état graphique externe pour l’analyse autonome des programmes de contenu
Modifié
- Les paramètres d’état graphique externe s’appliquent désormais cumulativement et participent aux instantanés complets de sauvegarde et restauration
q/Q
Version 3.260.0
Ajouté
- Ajout du traçage en une passe de l’état graphique effectif des programmes de contenu structurés et des pages sélectionnées complètes
- Les instantanés exposent CTM, matrices de texte, style de ligne, motif de tirets, couleurs, état du texte et profondeur de pile graphique avant ou après chaque instruction
Modifié
- L’énumération des placements d’images transforme désormais les quatre coins du carré unité, produisant des limites correctes sous rotation et cisaillement
Version 3.259.0
Ajouté
- Ajout d’assistants typés pour l’heure, les motifs spéciaux et les masques arbitraires des champs de formulaire interactifs
- Ajout de la validation de plage avec limites indépendamment facultatives et compatibles avec zéro
- Ajout des calculs somme, moyenne, produit, minimum et maximum de champs avec inscription automatique dans l’ordre de calcul
Sécurité
- Les chaînes JavaScript générées échappent désormais guillemets, barres obliques inverses, caractères de contrôle et séparateurs de lignes JavaScript
Version 3.258.0
Ajouté
- Ajout de la création d’action
SetOCGStatetypée pour les événements de champs, les actions existantes et les chaînes d’actions - Les actions de contenu facultatif préservent les changements d’état de gauche à droite, les groupes répétés et la préférence facultative de relation par boutons radio
Modifié
- L’énumération des actions de contenu facultatif renvoie désormais des handles de groupes canoniques qui effectuent un aller-retour par les API d’écriture
Version 3.257.0
Ajouté
- Ajout de l’écriture complète de destinations distantes explicites avec pages indexées à zéro, tous les types d’ajustement standard, valeurs XYZ nullables et préférences de fenêtre à trois états
- Ajout de l’écriture complète d’actions de lancement pour fichiers portables, paramètres Windows, répertoires par défaut et opérations d’ouverture ou d’impression
- Les handles d’action existants peuvent désormais mettre à jour ces charges utiles ou les ajouter à des chaînes d’actions sans API dupliquées propres aux conteneurs
Sécurité
- Les générateurs d’action GoTo distante et Launch refusent désormais le mode PDF/A avant de modifier une chaîne d’actions
Version 3.256.0
Ajouté
- L’inspection des actions GoTo distantes indique désormais destinations nommées et explicites, pages cibles indexées à zéro, types d’ajustement, coordonnées et valeurs de zoom
- L’inspection des actions Launch indique désormais paramètres d’application Windows, répertoires par défaut et opérations d’ouverture ou d’impression
- Les informations d’action distinguent une préférence
/NewWindowabsente d’une valeur false explicite et identifient les cibles fondées sur des tableaux
Version 3.255.0
Ajouté
- Ajout de générateurs typés pour les actions de destination distante nommée et de lancement d’application externe
- Les générateurs d’action URI prennent désormais en charge les demandes de mappage de coordonnées par l’indicateur standard
/IsMap - Les nouveaux types d’action fonctionnent avec les API de cycle de vie, de champs et de chaînes via l’interface étendue existante
Version 3.254.0
Ajouté
- Ajout de 14 démonstrations Delphi de couverture d’API pour les surfaces sans démonstration dédiée : OutlineBuilder, NamedDestinations, DocumentActions, EmbeddedFiles, LinearizeDemo, BarcodeGallery, XfaFields, TaggedPDF, OutputIntent, HtmlTextFlow, RichMediaAnnotations, MailSendDemo, TextBlockExtraction et PadesDssDemo
- Ajout des sections Navigation, Color & ICC, Barcode & media et Structure & compliance à l’index des démonstrations Delphi, portant le total de 56 à 92
- Ajout de guides Readme.en-us.html pour les 20 démonstrations qui n’en possédaient pas
Modifié
- Application de Formatter.config à toutes les sources de démonstration Delphi afin d’unifier espacement des opérateurs, indentation et casse des mots-clés, et définition de NewLineBeforeThen à False pour conserver If...Then sur une ligne
- Renforcement de la gestion des erreurs des démonstrations GUI classiques : les valeurs de retour de SaveToFile sont systématiquement contrôlées, les durées de vie de TPDFlib et des objets secondaires sont protégées par try/finally, et les messages d’échec incluent LastErrorCode
Corrigé
- Correction de la polarité inversée de SaveToFile dans ImageToPdf, qui traitait la réussite comme un échec, et arrêt de l’ouverture d’un fichier obsolète par AddTrueTypeSubsettedFont lorsque l’enregistrement échoue
- Correction de fuites de ressources dans CreateWithImageToStream, DoInTheStream, CanvasText, ExtractText, ExtractImage, PdfDecrypt, PdfEncrypt et PdfPermission, où des instances TPDFlib, TStream, TBitmap, TOpenDialog ou TStringList pouvaient échapper à un chemin d’exception
- Suppression de code mort dans AddFormattedTitle (allocation RectParts inutilisée et try/except redondant autour de StrToFloatDef) et MultiFunction (appel SetTextSize écrasé)
Version 3.253.0
Ajouté
- Ajout de détails d’action typés pour les actions thread, son, film, contenu facultatif, rendition, transition et vue 3D
- Ajout de la recherche réutilisable de handles d’action et de l’énumération ordonnée des états de contenu facultatif
- Ajout d’enregistrements complets de transitions PDF couvrant les styles replacement, Fly, Push, Cover, Uncover et Fade
Corrigé
- Les transitions Wipe et Glitter stockent désormais leur direction dans
/Di, lisent la durée d’affichage dans le dictionnaire de page et effacent à la fois les entrées de transition et de durée - Les styles de transition standard antérieurs à PDF 1.5 ne forcent plus une version de sortie PDF 1.5
Version 3.252.0
Ajouté
- Ajout de la découverte en une passe des actions de champs avec détails typés pour les déclencheurs principaux, de widget et de champ
- Ajout de l’énumération complète de l’ordre de calcul, de la recherche par champ et de la suppression pour les formulaires interactifs
- Extension des instantanés de champs en masse avec l’ordre de calcul et le nombre d’actions
Modifié
- Les déclencheurs de cycle de vie des widgets prennent désormais en charge les actions d’ouverture, fermeture, visibilité et masquage de page avec la gestion de version PDF 1.5 requise
Version 3.251.0
Ajouté
- Ajout de l’énumération en une passe des destinations nommées dans les anciennes entrées du Catalog et les arbres de noms modernes, avec résolution de la page et des paramètres de vue
- Ajout de la suppression des destinations nommées, des légendes complètes de boutons-poussoirs, du positionnement du texte des boutons et des noms de mappage des champs
- Extension des instantanés de champs en masse avec noms de mappage, légendes des boutons et position du texte
Corrigé
- L’édition des arbres de noms prend désormais en charge les valeurs de destination directes et utilise un encodage d’index multinœud sans ambiguïté
Version 3.250.0
Ajouté
- Ajout d’instantanés de champs en une passe avec identité, type, page, indicateurs, valeurs et état Choice
- Ajout de requêtes typées sur les indicateurs des champs Choice ainsi que d’accesseurs validés pour l’index sélectionné et le premier index visible
Corrigé
- Les champs Choice à sélection unique ne conservent plus un tableau multisélection
/I, et le passage de la multisélection à la sélection unique remplace désormais l’ancien tableau/Vpar une chaîne
Version 3.249.0
Ajouté
- Ajout d’un parcours de recherche textuelle avec état en une passe, permettant d’itérer sur les occurrences mises en cache sans extraire les pages deux fois
- Ajout de l’exportation groupée des valeurs de formulaire et de leur application par nom, avec protection facultative des champs en lecture seule
Version 3.248.0
Ajouté
- Ajout de sélections persistantes dans Viewer avec géométrie en espace de page, texte extrait, énumération, effacement et événement de cadre pouvant opposer un veto
- Ajout de la capture bitmap exacte de la fenêtre visible courante et de sa sortie fichier, superpositions persistantes comprises
Version 3.247.0
Ajouté
- Ajout de commandes Viewer indépendantes pour la modification des formulaires par l’utilisateur et l’activation des annotations
- Ajout d’une couleur de premier plan configurable pour les éditeurs de champs texte et Choice
Version 3.246.0
Ajouté
- Ajout de styles typés de terminaison de ligne, couleurs intérieures de formes, modes de surbrillance des liens, alignement FreeText, état ouvert des annotations Text et symboles Caret
- Les setters d’annotations valident les sous-types compatibles et élèvent automatiquement la version PDF minimale lorsque nécessaire
Version 3.245.1
Corrigé
- Correction du dimensionnement des pages et de la disposition des mémos dans l’export FastReport : les rapports A4 gardent leur échelle, le texte reste dans les limites du mémo et les cadres non configurés demeurent masqués
Version 3.245.0
Ajouté
- Ajout de
OnPasswordafin qu’une application puisse fournir un autre mot de passe après le refus de l’identifiant initial d’un document chiffré - Les nouvelles tentatives de mot de passe fonctionnent uniformément pour les chargements depuis fichier, flux ou chaîne, indiquent le numéro de tentative suivant et permettent au gestionnaire d’annuler
Sécurité
- Les callbacks de mot de passe sont limités à seize tentatives au total, chacune utilisant un analyseur et un état de déchiffrement neufs
Version 3.244.0
Ajouté
- Ajout de
SetXMPPropertyExpour écrire en toute sécurité des propriétés scalaires dans les espaces de noms XMP définis par l’appelant - Les valeurs XMP personnalisées sont échappées par le DOM XML, les écritures répétées remplacent la propriété correspondante et les noms XML incorrects ou réservés sont refusés
Version 3.243.0
Ajouté
- Ajout d’actions typées de cycle de vie du document pour les déclencheurs avant fermeture, avant et après enregistrement, puis avant et après impression
- Ajout d’actions typées d’ouverture et de fermeture de page avec prise en charge commune des générateurs d’actions URI, nommées, JavaScript, de formulaire et de destination
- Ajout de méthodes d’inspection et de suppression des actions pour tous les déclencheurs de cycle de vie des documents et pages
Version 3.242.0
Ajouté
- Ajout de
SaveChanges, qui ajoute les modifications au fichier chargé d’origine puis recharge automatiquement la chaîne xref mise à jour pour les enregistrements incrémentiels répétés SaveChangesvalide le mot de passe de rechargement avant l’écriture et préserve le handle public du document sélectionné après rechargement
Modifié
AppendToFilerefuse désormais une cible dont la longueur courante diffère de la source chargée, évitant d’ajouter des décalages incrémentiels obsolètes à un fichier modifié extérieurement
Version 3.241.0
Ajouté
- Ajout de
GetLastOutlineetGetLastChildOutlinepour accéder directement à la fin d’une liste de signets - Ajout de
GetOutlineChildCountetGetOutlineSiblingIndexpour inspecter légèrement l’arbre de signets sans allouer un instantané complet
Version 3.240.0
Ajouté
- Ajout de
SaveAllAttachmentsExavec stratégies d’écrasement, d’omission et de renommage automatique des conflits, plus un callback de nommage par pièce jointe - Les exportations de pièces jointes réduisent désormais les noms demandés à des noms de feuille sûrs et protègent les noms de périphériques réservés Windows
Corrigé
- Correction de
SaveAllAttachments, qui renvoyait sans écrire de fichiers parce que son instantané de pièces jointes était compté mais ni alloué ni rempli
Version 3.239.0
Ajouté
- Ajout de
OnPageMouseDown,OnPageMouseMoveetOnPageMouseUpafin que les hôtes Viewer reçoivent des numéros de page à partir de un et des coordonnées PDF en points depuis le haut, indépendamment du zoom, du défilement et de la rotation - Ajout de
RegionAtClientPoint,ActiveRegionetOnActiveRegionChangepour distinguer liens, annotations non-liens et champs lorsque le pointeur entre ou sort - Ajout de
CreatePDFlibViewerDefaultPopupMenuetInstallPDFlibViewerDefaultPopupMenu, qui réunissent les classes d’action Viewer existantes dans un menu contextuel prêt à l’emploi pour copier, zoomer, ajuster, pivoter, naviguer, enregistrer et imprimer
Version 3.238.0
Ajouté
- Ajout de
OnOperationProgressavec type d’opération, phase de cycle de vie, unités courantes et totales, pourcentage et détail, tout en préservant le callback historiqueOnProgress - Les points d’entrée fichier, flux et chaîne de chargement, enregistrement, recherche, fusion et rendu signalent désormais les phases initiale et terminale ; les opérations ayant une progression intermédiaire signalent aussi
opRunning - Définir
CancelpendantopStartingouopRunningactive l’étatAbortexistant, offrant un chemin d’annulation unique aux anciens et nouveaux appelants
Corrigé
LoadFromFilepréserve désormais le code 404 pour un mot de passe incorrect au lieu de l’écraser par l’erreur générique de chargement 401 après nettoyage
Version 3.237.0
Ajouté
- Ajout de
SearchTextEachetTPDFlibSearchHitEventpour émettre immédiatement chaque occurrence sans allouer ni dimensionner de tableau de résultats SearchTextetSearchTextEachsignalent désormais la progression par page viaOnProgresset respectentAbortcomme l’annulation du callback ; cette dernière emploie l’état d’abandon existant jusqu’àResetAbort- Le panneau de recherche Viewer et la couche de surbrillance consomment désormais l’API en flux en une passe, supprimant leurs anciennes limites de 256 lignes et 512 surbrillances
Corrigé
- La recherche de mots entiers continue désormais après une occurrence de sous-chaîne antérieure dans le même bloc afin de trouver une correspondance ultérieure correctement délimitée
Version 3.236.0
Ajouté
- Ajout de
GetPrinterCapabilitiespour capturer un instantané actif du pilote d’imprimante sans démarrer de travail - Le résultat typé
TPDFlibPrinterCapabilitiescomprend identifiants, noms et dimensions millimétriques des papiers, identifiants et noms des bacs, prise en charge du recto verso, de la couleur, du paysage et de l’assemblage, port d’imprimante et nombre maximal de copies indiqué par le pilote - Les pilotes omettant les métadonnées de papier ou de bac renvoient tout de même les autres capacités avec des tableaux vides, tandis qu’un nom d’imprimante incorrect produit un instantané entièrement remis à zéro
Version 3.235.0
Ajouté
- Ajout de
SendDocumentByMailpour enregistrer le document chargé dans un PDF temporaire et l’envoyer comme pièce jointe SMTP par le fournisseur Windows CDO intégré - Ajout du point d’extension à comptage de références
IPDFlibMailProvider, permettant de fournir un autre transport, de prendre en charge les hôtes non Windows et de tester les flux de messagerie sans réseau - Chaque envoi utilise un répertoire temporaire isolé, assainit le nom affiché de la pièce jointe puis supprime PDF et répertoire après le retour du fournisseur ;
GetLastMailErrorsignale les échecs de validation, d’enregistrement, de transport et de plateforme
Version 3.234.0
Ajouté
- Ajout d’espaces réservés variables dans les textes de tampon, d’en-tête et de pied de page :
<%PageNo%>,<%TotalPages%>,<%ShortDate%>,<%LongDate%>,<%ShortTime%>et<%LongTime%>sont développés par page avec les jetons classiques &-tokens - Tout espace réservé
<%name%>personnalisé est résolu par le nouvel événementOnCalcVariable, qui reçoit le nom et le numéro de page puis fournit le remplacement ; numéros séquentiels, codes de lot et champs client peuvent ainsi être tamponnés sans prétraitement, et restent littéraux sans gestionnaire
Version 3.233.0
Ajouté
- Ajout de la détection exposant/indice à l’extraction : le nouveau
GetTextBlockVAlignindique la classification de ligne de base de chaque bloc's (0 = ligne de base, 1 = exposant, 2 = indice) par rapport à sa ligne visuelle, afin de reconnaître formules chimiques, exposants et appels de note - Un bloc est classé exposant ou indice lorsqu’il est nettement plus petit que le texte dominant de la ligne's et que son centre vertical se situe au-dessus ou en dessous du centre dominant dans une hauteur de texte
Version 3.232.0
Ajouté
- Ajout de la séparation en mots au niveau des caractères :
SetTextExtractionOptions(17, 1)rescinde les séquences sans espace aux pas d’avance très supérieurs à l’avance médiane de la séquence's ; les documents peignant des lignes entières en un opérateur avec des espaces simulés par crénage extraient ainsi des mots distincts dans les modes 7 et 9 à 11 deGetPageText - Les tableaux d’avances restent alignés avec le texte élargi, préservant la cohérence des quadrilatères de blocs et des largeurs par caractère
Version 3.231.0
Ajouté
- Ajout de l’export texte en grille fixe préservant la mise en page :
GetPageText(11)mappe la géométrie sur une grille monospacée ; les lignes sont regroupées par base, chaque bloc rejoint la colonne calculée selon la largeur moyenne et les cellules courtes sont complétées par de vraies espaces, afin de conserver tableaux et formulaires dans les lecteurs texte, terminaux et diffs sans tabulations - La page de référence de
GetPageTextdocumente désormais les modes ordre de lecture (9), tableau séparé par tabulations (10) et grille fixe (11)
Version 3.230.0
Ajouté
- Ajout de la suppression des césures :
SetTextExtractionOptions(16, 1)réunit les mots coupés entre deux lignes ("inter-" en fin de ligne suivi de "national" devient "international") dans les sorties par ligne des modes 7 et 9 deGetPageText - L’heuristique ne fusionne que lorsqu’une lettre précède le trait d’union et qu’une minuscule commence la ligne suivante, de sorte que plages numériques, noms propres et majuscules de début de phrase conservent leurs traits d’union
Version 3.229.0
Ajouté
- Ajout de l’événement
OnBeforeSnapshotau contrôleTPDFlibViewer: il se déclenche avant la capture d’une région déplacée et Handled annule la copie par défaut dans le Presse-papiers afin que l’application traite elle-même la zone - Exposition de
PrefetchEnabled: le thread de prérendu en arrière-plan peut désormais être désactivé ou réactivé à l’exécution, avec arrêt immédiat puis redémarrage sur le document ouvert - Exposition de
DiskCacheMaxDocuments: le nombre de documents conservés par le cache disque intersession avant élagage est désormais réglable, avec 10 par défaut
Version 3.228.0
Ajouté
- Ajout de la navigation précise au contrôle
TPDFlibViewer:GoToPagePointaccède à une page et place un point donné en haut à gauche de la fenêtre, afin que destinations de liens et résultats de recherche arrivent exactement en vue - Ajout du contrôle programmatique du défilement : pas en pixels par
ScrollBy, propriétés en lecture/écritureHScrollPos/VScrollPospour synchroniser deux visionneuses côte à côte, etGetScrollPosForPageindiquant l’ancre de défilement de chaque page's en mode continu - Ajout des passerelles publiques
ClientPointToPageetPageRectToClientRectentre pixels client et espace utilisateur de page avec zoom, rotation et défilement ; les tests d’atteinte internes partagent désormais la géométrie exacte du rendu et fonctionnent aussi sans parent graphique
Version 3.227.0
Ajouté
- Ajout d’événements d’état de vue au contrôle
TPDFlibViewer:OnZoomChangese déclenche à chaque modification effective du zoom, y compris pas prédéfinis, recalcul d’ajustement, rotation ou DPI, tandis queOnHScroll/OnVScrollsuivent le défilement pour synchroniser les interfaces sans interrogation - Le déplacement du curseur de défilement vertical affiche désormais une bulle "Page N / M" prévisualisant la page d’arrivée, utile dans les longs documents ; la propriété
ScrollHintEnabled, activée par défaut, permet de la désactiver
Version 3.226.0
Ajouté
- Achèvement du cycle remplissage-enregistrement dans
TPDFlibViewer:SaveToFileetSaveToStreamréécrivent le document affiché, modifications de formulaire validées comprises, sur disque ou dans un flux, après validation de tout éditeur ouvert - Les champs texte multilignes utilisent désormais un véritable mémo : Entrée insère un saut, Ctrl+Entrée valide et Échap annule ; les champs monolignes conservent la validation par Entrée
- Tab et Shift+Tab parcourent dans l’éditeur les champs texte et Choice modifiables du document's en suivant leur page's ;
FocusNextFormFieldexpose la même navigation par programme
Version 3.225.0
Ajouté
- Ajout du zoom par échelle prédéfinie à
TPDFlibViewer:ZoomInStepetZoomOutStepalignent le zoom sur la séquence standard (1, 5, 10, 25, 50, 75, 100, 150, 200, 400, 800, 1600, 2400, 3200 %), à partir du zoom effectif afin que les modes d’ajustement progressent naturellement ; les actions de barre d’outils utilisent la même échelle - Ctrl+molette parcourt désormais l’échelle de zoom prédéfinie, tandis que la molette seule continue de faire défiler
- Ajout des raccourcis : Ctrl+'+'/'-' parcourt le zoom, Ctrl+1/2/3 sélectionne taille réelle, ajustement en largeur et ajustement à la page, et Shift+Up/Down accède à la première ou dernière page
Version 3.224.0
Ajouté
- Ajout de
CreateSelfSignedCertificateavec points d’entrée Delphi, DLL et ActiveX : génère un certificat RSA autosigné, signature SHA-256, sujet, validité et longueur configurables, puis l’exporte avec sa clé privée dans un PFX protégé, prêt pourSignFileet les API de signature, sans autorité externe - Le certificat est créé dans un conteneur de clés jetable supprimé après export ; seul le PFX conserve la clé. Les certificats autosignés sont destinés aux tests et documents internes, et les lecteurs les déclarent non fiables sauf installation explicite
Version 3.223.0
Ajouté
- Ajout de
TPDFlibShapeWatermarkà la couche de filigranes composables : rectangles, cercles, ellipses, polygones, chaînes de courbes de Bézier et lignes sont tamponnés sur une plage avec couleurs de remplissage et de trait, largeur et opacité, via le mêmeApplyWatermarkque les filigranes texte et image - Rectangles, cercles et ellipses utilisent Width/Height ; polygones, courbes et lignes obtiennent leur géométrie de
SetPoints, par paires X,Y locales, afin que la grille Position à neuf points et le placement personnalisé s’appliquent à chaque forme ; les géométries dégénérées sont refusées
Version 3.222.0
Ajouté
- Ajout de
AddLinkToEmbeddedPDFavec points d’entrée Delphi, DLL et ActiveX : une zone de page ouvre un PDF incorporé au document par son nom EmbeddedFiles et accède à une page choisie, au moyen de l’action GoToE standard d’ISO 32000-1 §12.6.4.4 avec demande facultative de nouvelle fenêtre ; la version passe automatiquement à PDF 1.6 GetAnnotActionInfoet ses équivalents pour signets et champs reconnaissent désormais les actions GoTo incorporées et indiquent le nouveau typeakGoToE, le nom de cible, la relation parent/enfant, la spécification de fichier facultative et l’indicateur /NewWindow
Version 3.221.0
Ajouté
- Ajout de
SetSignProcessAppearanceTextavec points d’entrée Delphi, DLL et ActiveX : les signatures numériques peuvent afficher automatiquement nom du signataire, motif, lieu et date, avec libellés facultatifs ("Signed by:", "Reason:", ...) choisis par masque de bits - Le bloc texte est disposé dans le rectangle du champ en Helvetica avec couleur configurable ; une taille 0 ajuste automatiquement les lignes. Une image définie par
SetSignProcessFieldImageFromFilereste prioritaire, et les horodatages de document ignorent cette apparence
Version 3.220.0
Ajouté
- Ajout du remplissage interactif des formulaires dans
TPDFlibViewer: cliquer une case ou un bouton radio le bascule, tandis qu’un champ texte ou Choice ouvre un éditeur sur place, Entrée validant, Échap annulant et la sortie validant ; les champs en lecture seule restent inchangés et la page est rerendue - Chaque écriture déclenche le nouvel événement
OnFormFieldValueChanged, etHighlightFormFieldsavecFormHighlightColorpeint un fond translucide sur chaque zone saisissable afin de rendre les champs visibles - Ajout des équivalents programmatiques
FormFieldAtPagePoint,GetFormFieldPageRect,ToggleCheckBoxField,SetFormFieldValueAndRefresh,BeginEditFormFieldetCommitInplaceEditor, qui pilotent le même mécanisme sans souris
Version 3.219.0
Ajouté
- Ajout de l’interaction avec les annotations dans
TPDFlibViewer: cliquer une annotation non-lien déclencheOnAnnotClickavec page, index et sous-type, tandis queAnnotAtPagePointexpose le test d’atteinte par programme, en ignorant les compagnons Popup - Survoler une annotation affiche désormais son texte Contents comme info-bulle du contrôle's, avec
AnnotHintsactivé par défaut et la propriété standardShowHint - Ajout de
SaveAnnotAttachmentToFilepour écrire sur disque le fichier incorporé d’une annotation FileAttachment's et achever le flux cliquer-pour-enregistrer de la visionneuse
Version 3.218.0
Ajouté
- Ajout d’un cache disque de pages intersession à
TPDFlibViewer: définirDiskCacheFolderconserve les pages rendues sur disque, permettant de rouvrir instantanément un document récent sans nouveau rendu - Les pages en cache sont indexées par une empreinte du chemin du document's, de sa taille et de sa date d’écriture ; modifier le fichier invalide donc les pages obsolètes, et le cache conserve dix documents en élaguant les moins récemment utilisés
- Ajout du compteur
DiskCacheHits, qui indique combien de rendus de pages ont été évités par le cache disque
Version 3.217.0
Ajouté
- Ajout de l’unité
PDFlibViewerActionsavec vingt descendantsTActionprêts à l’emploi pourTPDFlibViewer, couvrant navigation, zoom, rotation, impression, dialogues ouvrir et enregistrer sous, copie du texte sélectionné et cinq modes d’outil souris sans code de liaison - Chaque action cible une visionneuse par sa propriété
Vieweret actualise automatiquement ses états activé, selon document, page ou sélection, et coché, selon ajustement ou outil actif ; toutes sont inscrites dans la catégorie losLab PDF de l’éditeur Action List - Ajout de
TPDFlibViewer.EffectiveZoomPercent, qui indique le zoom effectivement appliqué, facteurs calculés d’ajustement en largeur ou à la page compris, afin que les pas de zoom s’y appuient
Version 3.216.0
Ajouté
- Ajout de la surbrillance des résultats dans
TPDFlibViewer:HighlightSearchHitsrecherche tout le document et peint une barre translucide persistante sous défilement, zoom et rotation, avecClearSearchHighlights,SearchHighlightCountet la couleurSearchHighlightColor TPDFlibSearchPanel.RunSearchpeint aussi les barres dans la visionneuse associée ; la nouvelle propriétéHighlightInView, activée par défaut, permet de le désactiver, afin que les résultats apparaissent sur les pages et pas seulement dans la liste
Version 3.215.0
Ajouté
- Ajout des modes d’outil souris à
TPDFlibViewerviaViewerMode: sélection de textevmSelectpar défaut, déplacementvmHand, zoom par cadrevmZoom, capture vers le Presse-papiersvmSnapshotet surbrillance translucide persistantevmHighlight - Ajout de
CaptureRegionpour rendre toute région client avec pages et surbrillances dans un bitmap de l’appelant, de l’événementOnSnapshotet du commutateurSnapshotToClipboard, ainsi que deAddHighlightRegion/ClearHighlightRegions/HighlightRegionCountavecHighlightColorpour des surbrillances ancrées à la page
Version 3.214.0
Ajouté
- Ajout de l’impression à
TPDFlibViewer:PrintDocaffiche le dialogue Windows standard pour imprimante, plage, copies et assemblage, puis transmet le travail au moteur d’impression de la bibliothèque's ;PrintDoc(False)imprime tout sur l’imprimante par défaut sans interface - Ajout de
PrintDocRangepour une impression entièrement programmable avec nom d’imprimante, plage, nombre de copies et indicateur d’assemblage
Version 3.213.0
Ajouté
- Ajout de la rotation de vue à
TPDFlibViewer:RotateClockwise90etRotateAntiClockwise90pivotent les pages par pas de 90 degrés, etViewRotationlit ou définit directement l’angle 0, 90, 180 ou 270 - La rotation est un attribut de vue pur : le document reste intact, liens et sélection fonctionnent sous tous les angles, les zooms d’ajustement s’adaptent à la forme pivotée et un nouveau document réinitialise la vue à 0 degré
- Les bitmaps de pages pivotées sont mis en cache par angle, afin que le retour à un angle réutilise le rendu antérieur
Version 3.212.0
Modifié
- Compatibilité SOM XFA datasets améliorée :
GetXFAFormFieldValueetSetXFAFormFieldValueacceptent les prédicats FormCalc simples comme$data.Receipt.Detail.[Total_Price > 200].Descriptionet mettent à jour chaque nœud correspondant lorsqu’un prédicat sélectionne un sous-ensemble
Version 3.211.0
Modifié
- Compatibilité SOM XFA datasets améliorée :
GetXFAFormFieldValueetSetXFAFormFieldValueacceptent les sélecteurs Data DOM#dataGroupet#dataValueavec occurrences numériques ou jokers, par exemple$data.Receipt.#dataGroup[0].#dataValue[0]
Version 3.210.0
Modifié
- Compatibilité SOM XFA datasets améliorée :
GetXFAFormFieldValueetSetXFAFormFieldValueacceptent la racine$recorddans les paquets hors traitement d’enregistrements, afin que$record.Taxet$record/Detail[0]/Total_Pricepartent de l’élément d’enregistrement externe
Version 3.209.0
Modifié
- Échange d’annotations XFDF amélioré : les exportations écrivent désormais les attributs standard de bordure
width,styleetdashesdepuis les valeurs/BSdes annotations PDF, et les importations restaurent ces attributs sur les annotations insérées
Version 3.208.0
Modifié
- Échange d’annotations XFDF amélioré : les exportations écrivent désormais les attributs standard
creationdateetopacitydepuis les valeurs PDF/CreationDateet/CA, et les importations les restaurent sur les annotations insérées
Version 3.207.0
Modifié
- Échange d’annotations XFDF amélioré : les exportations écrivent désormais les noms standard
flagsdepuis les valeurs PDF/F, et les importations restaurent ces noms dans les indicateurs de l’annotation insérée
Version 3.206.0
Modifié
- Compatibilité SOM XFA datasets améliorée :
GetXFAFormFieldValueetSetXFAFormFieldValueacceptent les jokers d’enfants directs comme$data.Receipt.*.Total_Pricepour lire ou mettre à jour les branches correspondantes sans sélectionner les champs homonymes du parent
Version 3.205.0
Modifié
- Compatibilité SOM XFA datasets améliorée :
GetXFAFormFieldValueetSetXFAFormFieldValueacceptent les sélecteurs descendants comme$data..Total_Priceet$data.Receipt..Total_Pricepour lire ou mettre à jour le premier descendant correspondant
Version 3.204.0
Modifié
- Compatibilité SOM XFA datasets améliorée :
GetXFAFormFieldValueetSetXFAFormFieldValueacceptent la propriétéparentdans des chemins comme$data.Receipt.Detail[1].parent.Taxpour lire ou mettre à jour les données sœurs du parent du nœud sélectionné
Version 3.203.0
Modifié
- Gestion des occurrences SOM XFA datasets améliorée :
GetXFAFormFieldValueetSetXFAFormFieldValueprennent en charge les sélecteurs[*]comme$data.Receipt.Detail[*].Total_Pricepour lire ou mettre à jour chaque nœud répété correspondant
Version 3.202.0
Modifié
- Compatibilité des chemins SOM XFA améliorée : les API de datasets et de champs de modèle préservent les points littéraux dans les chemins à barres obliques et acceptent les points échappés comme
Line\.Itemdans les chemins SOM à points
Version 3.201.0
Modifié
- Compatibilité des chemins XFA datasets améliorée : les API de valeurs de champs acceptent les chemins à barres après les racines SOM standard telles que
$data/...,xfa.datasets.data/...etxfa.datasets/...
Version 3.200.0
Modifié
- Compatibilité SOM XFA datasets améliorée : les API de valeurs acceptent la forme courte standard
!data..., y compris les chemins!data/...à barres obliques
Version 3.199.0
Modifié
- Compatibilité des chemins de modèle XFA améliorée : les API de modification acceptent les chemins à barres renvoyés par l’énumération des noms de champs, notamment
$template/...
Version 3.198.0
Modifié
- Compatibilité des espaces de noms XFA datasets améliorée : les API de valeurs lisent et mettent à jour les nœuds selon leur nom XML local lorsque les données métier utilisent leur propre préfixe, et l’énumération des noms renvoie des chemins sans préfixe
Version 3.197.0
Modifié
- Échange d’annotations XFDF amélioré : les exportations incluent désormais les attributs communs
nameetdatedepuis/NMet/M, les importations les restaurent, etSetAnnotStrPropertyaccepte désormais la balise 104 pour les dates de modification
Version 3.196.0
Modifié
- Énumération des noms de champs XFA améliorée : les API de listes parcourent chaque enregistrement de données de premier niveau et renvoient les champs feuilles sans ajouter les groupes conteneurs comme champs
Version 3.195.0
Modifié
- Compatibilité XFA datasets améliorée : les API de valeurs lisent et mettent à jour les paquets XDP complets dont le paquet datasets utilise un élément
datasans préfixe
Version 3.194.0
Corrigé
- Mise à jour des champs de modèle XFA améliorée : les API acceptent les racines SOM standard
$templateetxfa.template, et les modifications limitées au modèle sont correctement enregistrées dans les flux XDP complets
Version 3.193.0
Modifié
- Adressage des champs XFA amélioré : les API de valeurs acceptent les racines SOM de données standard
$dataetxfa.datasets.dataen plus des chemins relatifs
Version 3.192.0
Modifié
- Traitement des paquets XML XFA amélioré : les flux dotés d’un BOM UTF-16 ou de motifs d’octets XML UTF-16 sont décodés avant l’analyse XML, préservant les valeurs de formulaire UTF-16 dans les API de lecture et d’écriture
Version 3.191.0
Modifié
- Création de paquets XFA améliorée :
SetXFAFromStringcrée désormais le conteneurAcroFormrequis lorsque le document n’a aucune donnée de formulaire, remplace l’ancien état XFA analysé lorsqu’un paquet complet est stocké et garde le paquet disponible pour les API de champs
Version 3.190.0
Modifié
- Échange d’annotations XFDF amélioré : les exportations écrivent l’attribut commun
colordepuis le tableau RGB PDF/C, et les importations restaurent les valeurscolor="#RRGGBB"dans le tableau de couleur de l’annotation insérée
Version 3.189.0
Ajouté
- Ajout des API d’échange d’annotations XFDF
ExportAnnotationsToXFDF,ExportAnnotationsToXFDFString,ImportAnnotationsFromXFDFetImportAnnotationsFromXFDFString, qui lisent et écrivent les données ISO 19444<annots>des commentaires d’annotation textuels, avec page, rectangle, titre, sujet et contenu brut
Version 3.188.0
Modifié
- Importation XFDF des champs de texte enrichi améliorée : les champs contenant
<value-richtext>préservent le XML enrichi dans la valeurRVtout en appliquant le repli brut<value>lorsqu’il existe
Version 3.187.0
Modifié
- Échange XFDF des champs Choice multisélection amélioré : les éléments
<value>répétés sont importés dans le tableau des valeurs choisies, et l’exportation écrit un élément<value>par choix plutôt que de les aplatir dans un nœud échappé
Version 3.186.0
Modifié
- Exportation XFDF des champs enrichis améliorée : les champs dont la valeur
RVest enrichie incluent désormais un élément<value-richtext>tout en préservant le repli brut<value>
Version 3.185.0
Modifié
- Importation XFDF des champs enrichis améliorée : si un champ fournit
<value-richtext>sans<value>brut, l’importateur extrait le texte XHTML et l’applique au champ AcroForm correspondant au lieu de l’ignorer
Version 3.184.0
Modifié
- Échange de données XFDF amélioré : les exportations utilisent l’espace de noms standard avec
xml:space="preserve", émettent des éléments<field>imbriqués pour les noms AcroForm hiérarchiques, omettent les valeurs parentes non terminales, écrivent en UTF-8 et importent le XFDF à espaces souples avec champs imbriqués, attributs entre apostrophes, CDATA, entités XML et références numériques
Version 3.183.0
Ajouté
- Ajout de
SanitizeDocument(Flags), qui retire en un appel le JavaScript global, OpenAction du Catalog, les actions /A des annotations et les métadonnées Author/Subject/Keywords/Creator/Producer dans /Info et XMP, et peut supprimer toutes les annotations. Les bitsSANITIZE_JAVASCRIPT/SANITIZE_ACTIONS/SANITIZE_METADATA/SANITIZE_ANNOTATIONS/SANITIZE_OPEN_ACTIONse combinent ;SANITIZE_ALLapplique tout, fermant la fuite où une rédaction visuelle laissait métadonnées ou scripts récupérables - Ajout de
TPDFAnnots.RemoveAnnotAction(Index)pour retirer le dictionnaire d’action /A d’une annotation, utilisé par SanitizeDocument et également utile seul
Version 3.182.0
Ajouté
- Les éléments image renvoyés par
EnumPageElementsportent désormais leur véritable rectangle de placement au lieu de zéros. La nouvelle méthodeTPDFContentProgram.EnumImagePlacementsparcourt le flux en suivant CTM (cm/q/Q) et mappe le carré unité de chaque opérateurDodans les coordonnées de page - Ajout de quatre démonstrations : DocumentProperties pour les propriétés et leur aller-retour, FormProperties pour la grille de propriétés par champ, SignatureValidator pour énumérer et vérifier les signatures, et Reader pour une visionneuse VCL TPDFlibViewer avec ouverture, navigation, zoom et copie de texte
Version 3.181.0
Ajouté
- Ajout de
SetXMPProperty, qui expose le moteur XMP existant PDFlibXMP par la façade publique et définit toute propriété Dublin Core, XMP Basic, Adobe PDF, PDF/A ID, PDF/UA ID ou XMP Media Management par espace de noms et clé sans écrire manuellement de RDF XML - Ajout de
ImportFormDataFromFDF/ImportFormDataFromFDFString, qui analysent le tableau FDF /Fields, chaque entrée<< /T (name) /V (value) >>, appliquent chaque valeur au champ AcroForm nommé et inversent l’échappement octal et parenthèses EscapePDFText, comblant l’asymétrie de l’export seul - Ajout de
ExportFormDataToXFDF/ExportFormDataToXFDFString/ImportFormDataFromXFDF/ImportFormDataFromXFDFStringpour l’échange bidirectionnel XFDF, équivalent XML moderne de FDF - Les six setters XMP par espace de noms (
SetDublinCore,SetXMPBasic,SetAdobePDF,SetPDFA,SetPDFUA,SetXMPMM) sont désormais publics surTPDFlibXMP, permettant aux appelants avancés de piloter directement le moteur
Version 3.180.0
Ajouté
- Ajout de
SearchAndReplaceTextInContent, qui remplace réellement le texte du flux de contenu en réécrivant sur place les opérateurs Tj/TJ/'/" viaTPDFContentProgram.ReplaceTextRun, contrairement àSearchAndReplaceTextqui masque seulement les glyphes. Le texte d’origine disparaît du flux. Les occurrences viennent deSearchText, chaque rectangle est associé à son instruction parFindInstructionsInRect, puis la couche est réécrite
Version 3.179.0
Ajouté
- Ajout du journal interne structuré
TPDFlibLoggerdans l’unitéLib/PDFlibLogger.pas, avec quatre niveaux Debug/Info/Warn/Error, callback hôteOnLog, sortie fichier facultative protégée contre les threads et table de messagesPDFlibErrorMessagepour les codes numériques existants ; il est exposé surTPDFlibpar la propriétéLogger - Ajout de
RenderPagesToFilesParallel, qui rend une plage vers un fichier par page au moyen d’un poolTTaskavec une instanceTPDFlibpar worker, TPDFlib n’étant pas thread-safe, etCoInitializepar thread pour GDI+ ; les rendus raster liés au processeur évoluent presque linéairement avec les cœurs
Version 3.178.0
Ajouté
- Ajout de
EnumCertificatespour énumérer tous les certificats d’un magasin Windows ("MY", "Root", etc.) avec sujet, émetteur, numéro de série, validité, HasPrivateKey et Qualified, détecté par un nouveau décodeur DER PDFlibASN1 de l’extension eIDAS QCStatements OID 0.4.0.1862.1.7, remplaçant la limite antérieure deSetSignProcessCertFromStoreà un seul certificat par CN - Ajout de
SetSignProcessCertFromStoreByHandlepour sélectionner un certificat de signature par handle PCCERT_CONTEXT brut issu de l’énumération, selon tout critère tel que qualification, validité ou empreinte, plutôt que seulement le CN Subject - Ajout de
RedactRegion, qui supprime réellement texte, chemins vectoriels et XObject image dont la zone peinte croise un rectangle, en modifiant le flux contrairement àMaskRect, avec remplissage noir et annotation /Redact facultatifs. L’analyseur de PDFlibContentModel suit la CTM viaFindInstructionsInRect - Ajout des fonctions minimales de décodage DER (
DERDecodeLength,DERFindExtensionByOID) à PDFlibASN1 pour inspecter les extensions de certificats dans le processus sans CryptDecodeObjectEx
Version 3.177.0
Ajouté
- Ajout d’API d’assemblage de pages par capture vectorielle Form XObject :
StitchPageOverlaysuperpose une page avec opacité facultative,StitchPagesSideBySideplace deux pages côte à côte sur une page plus large etStitchPagesVerticallyempile une plage en grande page verticale, tout en préservant la fidélité vectorielle - Ajout d’une couche de modèles de filigranes composables dans
Lib/PDFlibWatermark.pas:TPDFlibWatermarkBaseavec placement à neuf points (wpTopLeft..wpBottomRightpluswpCustom),TPDFlibTextWatermark,TPDFlibImageWatermarketTPDFlibCompositeWatermark, qui applique récursivement une liste de sous-filigranes à une plage partagée - Ajout de
TPDFlib.ApplyWatermarkcomme point d’entrée pratique déléguant à la plage et aux réglages propres du modèle de filigrane
Version 3.176.0
Ajouté
- Ajout de constantes nommées de format de rendu (
PDF_RENDER_BMP,PDF_RENDER_EMF,PDF_RENDER_EMFPLUS,PDF_RENDER_EMF_DUAL, etc.) correspondant 1:1 aux valeurs entièresOptionsacceptées parRenderPageToFile,RenderPageToStream,RenderPagesToFilesetRenderDocumentToFile - Ajout de l’énumération
TPDFlibMetafileFormatet des méthodes pratiquesRenderPageToMetafileStreametRenderPageToMetafileFile, qui acceptent une variante nommée mfEMF, mfEMFPlus, mfEMFDual ou mfWMF plutôt qu’un entier nu - Ajout du mode de sortie EMF+ Dual, valeur Options 11 / mfEMFDual, qui enregistre les commandes GDI et GDI+ dans le même métafichier pour les anciens consommateurs limités à GDI
- Ajout de l’énumération
TPDFlibClipboardFormatet deRenderPageToClipboard, qui place une page rendue dans le Presse-papiers Windows comme métafichier amélioré CF_ENHMETAFILE, bitmap DIB CF_DIB, texte Unicode CF_UNICODETEXT ou les trois à la fois - Ajout de l’unité
Lib/PDFlibClipboard.pasavec assistants Win32 de bas niveau pour le Presse-papiers employés parRenderPageToClipboard - Ajout de la compatibilité DPI complète par moniteur à
TPDFlibViewer: propriété publiqueScreenDPI, surchargeCreateWnddétectant les DPI avecGetDpiForWindowouGetDeviceCapsen repli, et gestionnaireWM_DPICHANGEDreconstruisant la disposition et vidant le cache lors d’un changement de moniteur - Ajout de
TPDFRenderer.SetEMFPlusMetafileTypepour choisir au niveau du moteur entre l’enregistrement EMF+ Only et EMF+ Dual
Corrigé
- Correction de la page de référence
RenderPageToFile, où la liste des valeurs Options était placée par erreur dans la ligne Page et où la cellule Options était vide
Version 3.175.3
Ajouté
- Ajout de l’unité Lib/PDFlibTableExport.pas, qui rend tout TDataSet en tableau PDF paginé avec en-tête stylé, alternance de lignes, colonnes numériques alignées à droite et continuation automatique, ainsi que de la démonstration console Demo/Delphi/DataSetExport chargeant customer.FDS de RAD Studio avec FireDAC
Version 3.175.2
Ajouté
- Ajout des projets complets Demo/ReportBridges, qui créent un rapport minimal avec FastReport, QuickReport et ReportBuilder puis l’exportent en PDF par le pont Addons correspondant, avec build-ReportBridges.cmd fournissant chemins sources et symboles de contrôle afin que la compilation standard conserve des stubs
Version 3.175.1
Ajouté
- Ajout d’une démonstration Delphi de matrice d’options JBIG2 parcourant les combinaisons SymbolExtract, SkipBlackDots, BlackDotSize et LossyLevel face aux références CCITT G4 et Flate, avec sorties PDF, CSV et résumé par ligne
- Ajout d’une démonstration Delphi Pattern couvrant ombrages RGB axiaux et radiaux, maillage de Coons et motif de pavage personnalisé appliqué au remplissage, au trait et au texte
- Ajout d’une démonstration Delphi de matrice fax CCITT comparant Group 3 1-D, Group 3 2-D et Group 4 avec les bits BlackIs1 et Interpolate, et indiquant taille de sortie et nom /Filter
- Ajout sous Addons de ponts d’export FastReport, QuickReport et ReportBuilder qui rendent un rapport préparé en PDF Library for Delphi PDF par les surfaces natives objet, métafichier et DrawCommand du moteur
Version 3.175.0
Modifié
- Extension de la démonstration WorkflowGallery avec une matrice de variantes d’annotations consignant remplissages de surbrillance, styles de balisage, icônes de notes, FreeText, Caret et Stamp dans des rapports CSV et HTML compagnons
Version 3.174.0
Modifié
- Extension de la démonstration C++Builder AdvancedWorkflowMatrix afin de mapper navigation d’actions, flux PDF/A et AcroForm, diagnostics de polices, livraison en flux et assistants récents de compression de scans dans les rapports de matrice
Version 3.173.0
Ajouté
- Ajout de la démonstration Delphi DeliveryWorkflowMatrix pour sorties PDF Web et CGI en flux, validation des miniatures et flux de livraison avec filigranes à partir d’un seul tampon PDF généré
Version 3.172.0
Ajouté
- Ajout d’API pratiques d’arbre de signets pour insertion ordonnée de frères, création d’enfants, suppression de sous-arbres et énumération en préordre avec parent, frère, niveau, page cible, état ouvert et titre
Version 3.171.0
Ajouté
- Ajout de la démonstration console Delphi FontDiagnosticsMatrix pour chemins de polices CJK et Unicode, mises à jour de sous-ensembles TrueType, sondes des polices installées, énumération des polices du document et rapports de diagnostic
Version 3.170.0
Ajouté
- Ajout de la démonstration console Delphi CanvasMigrationMatrix pour migration Canvas DC, points d’entrée de contenu et chemins bruts, assistants de couleurs Delphi, texte rempli par motif, filigranes, miniatures et aperçus de validation rendus
Version 3.169.0
Ajouté
- Ajout des démonstrations console Delphi LayerCompositionMatrix, TransparencyMaskMatrix et ComplianceFormWorkflowMatrix pour politique d’impression/export du contenu facultatif, composition Pattern/Form XObject, comparaison des masques, exemples PDF/A-1b, flux d’actions AcroForm, reconstruction des apparences et signatures visibles
Version 3.168.0
Ajouté
- Ajout des démonstrations console Delphi ImageCompressionMatrix et SecurityPermissionMatrix avec rapports PDF, CSV et HTML pour choisir une stratégie de compression d’images, compresser les scans, régler le rendu JPEG et auditer les profils d’autorisations chiffrées
Version 3.167.0
Ajouté
- Ajout d’API d’assistance nommées pour encodage bitmap JBIG2, options d’import EMF, actions d’événements AcroForm et actions chaînées, afin d’utiliser des commutateurs explicites plutôt que des masques entiers manuels
Version 3.166.0
Ajouté
- Ajout d’une démonstration console C++Builder AdvancedWorkflowMatrix exécutable avec sorties PDF, CSV et HTML, mappant migration avancée de canevas, import EMF, compression d’images, AcroForm, signature, sécurité, PDF/A, contenu facultatif, motifs et Form XObject aux points d’entrée C++Builder
Version 3.165.0
Ajouté
- Ajout d’une démonstration Delphi de matrice de navigation par actions couvrant actions d’ouverture, JavaScript de document, liens de fichiers incorporés, liens GoTo distants, actions AcroForm, assistants Submit/Reset/Hide et actions Next chaînées avec sorties PDF, CSV et HTML
Corrigé
- Correction des assistants de liens de fichiers distants afin qu’AddLinkToFile, AddLinkToFileEx, AddLinkToFileDest et les lancements de fichiers locaux créent une seule annotation puis reviennent au lieu de boucler indéfiniment
Version 3.164.0
Ajouté
- Ajout d'une démo de matrice de garde PDF/A pour Delphi qui vérifie les rejets précoces ou les décisions d'autorisation de chemin lors de la configuration du mode PDF/A, de la transparence, des modes de fusion, du chiffrement, de JavaScript, du multimédia, des fichiers incorporés et des workflows de fichiers associés PDF/A-3, avec des rapports PDF, CSV et HTML générés
Version 3.163.0
Ajouté
- Ajout d'une matrice de liaison ReportAdapter explicite pour FastReport, QuickReport, ReportBuilder, DBGrid et les chemins d'export de canevas personnalisés, avec une sortie de cartographie CSV et HTML générée ainsi qu'une page PDF montrant la stratégie d'adaptateur réutilisable
Version 3.162.0
Ajouté
- Ajout d'une matrice de démos de workflow avancé qui génère des sorties concrètes pour la migration de canevas, les options d'import EMF, les comparaisons de compression d'images, les workflows d'actions AcroForm, les signatures vides visibles, les permissions de sécurité, les vérifications PDF/A-1b, le contenu optionnel, les motifs de tuilage, les Form XObjects, l'export de tableaux de type DBGrid et le rapport de mémoire maximale pour les gros fichiers
Version 3.161.0
Ajouté
- Ajout d'aides Delphi pour la construction compacte d'actions d'ouverture de document, les actions d'événement de visibilité des champs de formulaire, les sélecteurs de couleurs TColor et gris, et l'injection directe de flux de contenu brut, de chemin, de texte et de matrice
Version 3.160.0
Ajouté
- Ajout d'aides Delphi pour la compression d'images scannées bitmap vers JBIG2, la configuration en un seul appel des masques d'image et de la transparence par couleur clé, le chaînage d'actions GoTo, et des noms d'événements AcroForm lisibles pour JavaScript ou l'affectation d'actions existantes
- Étend
ImportEMFFromFileExetImportEMFFromStreamExafin que leurs indicateursOptionspuissent forcer l'import bitmap, activer la recompression JPEG des images couleur EMF et demander les contrôles de traitement GDI+
Version 3.159.1
Modifié
- Amélioration de
SaveToStreamet de l'enregistrement des flux de sortie liés, afin que les gros objets de flux PDF soient écrits en blocs bornés au lieu de copier chaque objet de flux dans une chaîne de sortie intermédiaire
Version 3.159.0
Ajouté
- Ajout d'aides de placement d'image qui dessinent ou ajustent une image spécifiée et libèrent immédiatement son handle, avec des points d'entrée Delphi, DLL et ActiveX pour réduire le pic mémoire dans les workflows de génération d'images à usage unique
- Ajout de
RenderPageToMonochromeFileExpour le rendu BMP 1 bit avec conversion par seuil et nettoyage isolé des pixels noirs avant les workflows de compression d'images scannées
Version 3.158.1
Ajouté
- Ajout de démos de workflow Delphi pour l'export réutilisable de type rapport, l'import de texte enrichi RichEdit vers EMF, et des scénarios combinés de vignette de page, annotation, Form XObject, tableau, compression, JavaScript et sortie sur flux lié
Version 3.158.0
Ajouté
- Ajout d'API de contrôle du chiffrement des métadonnées avec points d'entrée Delphi, DLL et ActiveX : SetEncryptMetadata peut écrire des PDF de sécurité Standard avec des flux de métadonnées XMP non chiffrés, tandis que GetEncryptMetadata indique l'état /EncryptMetadata en attente ou chargé
Version 3.151.0
Ajouté
- Ajout de
DrawPie,DrawChord,DrawEllipticPieetDrawEllipticChordpour le dessin explicite d'arcs circulaires et elliptiques fermés avec les modes contour, remplissage ou contour et remplissage
Version 3.150.0
Ajouté
- Ajout de
NewGraphicsStateetSetGraphicsStatepour que les appelants puissent créer des ressources ExtGState réutilisables pour des réglages combinés de transparence de remplissage, transparence de contour, largeur de ligne, bout de ligne, jonction de ligne et limite de miter
Version 3.149.1
Corrigé
- Correction des identifiants de dispatch ActiveX dupliqués pour les méthodes Form XObject et limite de miter, afin que les appelants COM à liaison tardive résolvent chaque méthode sans ambiguïté
Version 3.149.0
Ajouté
- Ajout de
SetMiterLimitpour contrôler les rapports de limite de miter du contour pour les chemins qui utilisent des jonctions en miter - Exposition de
BeginFormXObject,EndFormXObjectetCancelFormXObjectvia les API DLL et ActiveX
Version 3.148.0
Ajouté
- Ajout d'API de génération réutilisable de Form XObject :
BeginFormXObject,EndFormXObjectetCancelFormXObjectpermettent aux appelants de dessiner un modèle réutilisable avec les appels de dessin de page normaux et de le placer à plusieurs reprises via les API de dessin de page capturée
Version 3.147.0
Ajouté
- Ajout de
SetTextTilingPatternetSetLineTilingPatternpour que les motifs de tuilage de page capturée puissent être réutilisés pour le texte, le soulignement et les graphiques tracés sans dupliquer les commandes de dessin
Corrigé
- Les couleurs de shader tracé et de motif de tuilage écrivent désormais l'opérateur de couleur de motif de tracé au lieu de mettre à jour l'état de couleur non tracée
Version 3.146.0
Ajouté
- Ajout de
BeginOptionalContentetEndOptionalContentpour que les appelants puissent marquer uniquement les commandes de dessin suivantes avec un groupe de contenu optionnel sans réécrire le flux de contenu existant
Corrigé
- Les opérateurs de contenu balisé de fermeture de portée sont désormais vidés immédiatement lorsque les portées de contenu optionnel, de PDF balisé ou d'artefact sont fermées à la fin d'un flux de contenu
Version 3.145.0
Ajouté
- Ajout de
SetTransparencyExpour que les appelants puissent définir des valeurs distinctes de transparence de remplissage et de contour pour le texte et les graphiques dessinés ensuite tout en conservant le comportement existant de mise à niveau automatique PDF 1.4
Version 3.144.0
Ajouté
- Ajout de
AddLinkToNamedDestinationpour qu'une zone interactive de page puisse sauter vers une destination nommée du même document sans résoudre la page cible au moment de la création du lien
Corrigé
- Les lecteurs d'actions d'annotation renvoient désormais aucune action pour les pages sans annotations au lieu de déréférencer un cache d'annotations vide
Version 3.143.0
Ajouté
- Ajout d'API de gestion des actions de champ de formulaire pour que les appelants puissent lier une action existante à un déclencheur de champ, inspecter l'action de déclencheur typée et supprimer les actions de champ principales ou supplémentaires
Corrigé
FormFieldJavaScriptActionrejette désormais les documents PDF/A et les noms de déclencheur invalides au lieu d'écrire des dictionnaires d'action de champ non conformes
Version 3.142.0
Ajouté
- Ajout d'API de chaînage d'actions pour permettre d'ajouter des actions suivantes URI, nommées et JavaScript à une annotation, un plan ou une action de champ de formulaire existante, et d'inspecter les actions chaînées via
GetActionNextCountetGetActionNextInfo
Version 3.141.0
Ajout
- Ajout de
AddLinkToSubmitFormetAddLinkToResetFormafin que les zones interactives de la page puissent soumettre ou réinitialiser les champs AcroForm via des actions PDF standards sans JavaScript
Version 3.140.0
Ajout
- Ajout de
AppendToStreamafin que les flux de travail de mise à jour incrémentielle puissent écrire directement dans un flux fourni par l'appelant au lieu de matérialiser d'abord la mise à jour sous forme deAnsiString
Modification
SaveToStreamsérialise désormais directement dans le flux cible, etAppendToString(1)ne renvoie plus que la section de mise à jour incrémentielle sans copier les octets sources d'origine dans un tampon temporaire
Version 3.139.0
Ajout
- Ajout de
GetAnnotReplyToetGetAnnotReplyTypeafin que les réponses d'annotation en fil de discussion puissent être inspectées via des accesseurs nommés en lecture au lieu de balises de propriétés d'annotation génériques
Version 3.138.0
Ajout
- Ajout de l'exemple Delphi
DocumentInspectionWorkbenchpour inspecter par lots des PDF avec des diagnostics combinés de polices, l'échantillonnage d'images, la découverte d'espaces colorimétriques, le temps de chargement et des rapports JSON, CSV et HTML
Version 3.137.0
Ajout
- Ajout de l'exemple Delphi
ImageDecodeBenchmarkpour mesurer la découverte d'images de page, les octets d'images décodées et la découverte d'espaces colorimétriques de page avec des rapports de minutage CSV et HTML
Version 3.136.0
Ajout
- Ajout de
GetDocumentFontDiagnosticsetTPDFlibFontDiagnosticspour résumer l'intégration, le sous-ensemblement, les polices Standard 14, CID, Type3 et les polices inconnues d'un document en un seul appel
Version 3.135.0
Ajout
TPDFlibSignatureVerifier.VerifySignerCertificateChainconstruit désormais la chaîne de certificats du signataire intégrée avec l'API Crypto de Windows et renvoievsValiduniquement lorsque la chaîne satisfait la politique de confiance de base de Windows, tandis que les certificats de signataire auto-signés ou par ailleurs non approuvés renvoientvsInvalidsans modifier le résultat de l'intégrité du contenu deVerifySignature
Version 3.134.0
Correction
TPDFlibSignatureVerifier.VerifySignaturevalide désormais les anciennes signaturesadbe.pkcs7.sha1, renvoyantvsValidlorsque l'empreinte signée correspond aux octets couverts par/ByteRangeetvsInvaliden cas de modification du contenu couvert
Version 3.133.0
Ajout
- Ajout de
RenderPagesToFilesetDARenderPagesToFilespour rendre des plages de pages arbitraires dans des fichiers de sortie numérotés tout en réutilisant la configuration du moteur de rendu sur les pages sélectionnées
Version 3.132.0
Ajout
- Ajout des tampons pratiques
AddPageHeaderetAddPageFooterqui placent du texte à une marge supérieure ou inférieure fixe sur chaque page d'une plage, avec un alignement à gauche/au centre/à droite et une expansion de jetons (&Ppage actuelle,&Nnombre total de pages,&Ddate,&Ttitre du document,&&esperluette littérale) StampTextetStampImageavecsoUnderlayplacent désormais réellement le contenu sous le contenu de la page existante en préfixant une nouvelle couche de contenu (auparavant, cela dessinait par-dessus commesoOverlay) ; soutenu par une nouvelle méthode d'arborescence de pagesPrependContentLayer
Version 3.131.0
Ajout
- Ajout de
ScalePage(ScaleX, ScaleY, Anchor)qui met à l'échelle le contenu de la page sélectionnée en enveloppant chaque couche de contenu dans un bloc d'état graphiqueq sx 0 0 sy tx ty cm ... Qet en redimensionnant la MediaBox et la CropBox ; l'ancre conserve l'origine en bas à gauche (0), centre le contenu (1) ou conserve le coin en haut à gauche (2) - Extension de
EnumPageElementsavec un nouveau type d'élémentekPath: chaque page signale désormais également ses tracés vectoriels avec une boîte de délimitation, un nombre de points, un indicateur de fermeture et un opérateur de peinture, extraits des flux de contenu via le modèle de contenu structuré
Version 3.130.0
Ajout
- Ajout de trois API d'optimisation de la taille des fichiers qui réduisent les documents chargés lors de leur sauvegarde :
SubsetEmbeddedFontsréécrit chaque programme de police TrueType intégré (FontFile2) pour ne conserver que les caractères Unicode que le document affiche réellement via le serviceCreateFontPackagede FontSub.dll ;DownsampleImages(MaxDPI, Quality, Filter)décode chaque image XObject au-dessus de la résolution cible, la rééchantillonne (boîte ou bilinéaire) et la réencode en JPEG ou PNG ;NormalizeLZWStreamsréécrit chaque flux encore filtré avec LZWDecode en FlateDecode via le décodeur LZW et l'encodeur Flate existants, en préservant les paramètres Predictor
Version 3.129.0
Ajout
- Ajout d'API de création d'ombrage par maillage pour les quatre types d'ombrage qui ne bénéficiaient auparavant que d'une prise en charge en lecture/analyse :
NewRGBFreeFormTriangleMesh(ShadingType 4, triangles Gouraud de forme libre),NewRGBLatticeTriangleMesh(ShadingType 5, Gouraud en forme de treillis),NewRGBCoonsPatchMesh(ShadingType 6, maillage de carreaux de Coons) etNewRGBTensorPatchMesh(ShadingType 7, maillage de carreaux de produits tensoriels) — chacune construit un motif d'ombrage par maillage nommé à partir d'une liste plate de sommets ou de carreaux avec une profondeur de bits de coordonnées/couleurs sélectionnable et une boîte de délimitation, pouvant être sélectionné avecSetFillShader/SetLineShader/SetTextShaderà l'instar des ombrages axiaux et radiaux existants
Version 3.128.0
Ajout
- Ajout d'une bande de miniatures pour la visionneuse :
TPDFlibThumbnailBaraffiche une miniature de chaque page, rendue paresseusement à mesure que les lignes défilent dans la vue, avec le numéro de page en dessous ; cliquer sur une miniature fait passer la visionneuse attachée à cette page — complétant la famille des contrôles de visionneuse (visionneuse, panneau de signets, panneau de recherche, miniatures)
Version 3.127.0
Ajout
- Ajout d'un panneau de recherche pour la visionneuse :
TPDFlibSearchPanel.RunSearcheffectue une recherche dans l'intégralité du document attaché et liste une ligne par résultat avec son numéro de page et le texte correspondant ; cliquer sur un résultat fait passer la visionneuse à cette page
Version 3.126.0
Ajout
- Ajout d'un panneau de signets pour la visionneuse :
TPDFlibOutlineViewerliste l'arborescence des signets du document avec indentation et fait passer la visionneuse attachée (viaAttachViewer) à la page de destination d'un signet lorsqu'il est cliqué ; il est construit sur une classe de base de panneau réutilisable que les futurs panneaux latéraux partageront
Version 3.125.0
Ajout
- Ajout de la sélection de texte au contrôle de visionneuse : faites glisser avec le bouton gauche de la souris pour sélectionner, appuyez sur Ctrl+C ou appelez
CopySelectedTextpour copier la sélection dans le presse-papiers ; le texte capturé est disponible via la propriétéSelectedText, ordonné de haut en bas avec des sauts de ligne entre les bandes - Ajout de
GetTextInRegion, qui renvoie directement le texte d'une zone rectangulaire de la page — la même recherche basée sur les blocs que celle utilisée par la sélection à la souris, disponible pour les interfaces de sélection personnalisées
Version 3.124.0
Ajout
- Le contrôle de visionneuse pré-rend désormais les pages voisines sur un thread d'arrière-plan, de sorte que faire défiler les pages en avant ou en arrière affiche la page suivante instantanément ; le processus de travail utilise sa propre instance de document et transmet les rendus terminés au cache sans bloquer l'interface utilisateur
- Ajout de l'interactivité des liens à la visionneuse : cliquer sur une annotation de lien déclenche
OnLinkClickavec le numéro de page et le même résumé d'action typée que produitGetAnnotActionInfo(adresse web, destination dans le document, action nommée, etc.) ;LinkActionAtPagePointexpose le test d'impact sous-jacent pour une manipulation personnalisée
Version 3.123.0
Ajout
- Le contrôle de visionneuse bénéficie désormais d'un défilement continu :
SetDisplayModebasculeTPDFlibViewerentre l'affichage d'une seule page et un défilement vertical continu à travers tout le document, avec seules les pages visibles dans la zone d'affichage qui sont rendues et la page courante qui suit la position de défilement (déclenchantOnPageChangeau fur et à mesure que les pages apparaissent) - Les pages rendues sont désormais conservées dans un cache de bitmaps des moins récemment utilisées, de sorte que le défilement dans les deux sens ne nécessite pas de nouveau rendu ; le budget mémoire est par défaut de 128 Mo et s'ajuste avec
SetCacheLimit, expulsant les pages les plus anciennes lorsque le budget se réduit ou se remplit - Ajout du défilement avec la molette de la souris et de la navigation au clavier à la visionneuse : Page précédente/Page suivante (sauts de page en mode page simple, sauts de zone d'affichage en mode continu), touches fléchées, touches Début et Fin
Version 3.122.0
Ajout
- Ajout d'un contrôle de visionneuse PDF interactive :
TPDFlibViewerest un contrôle de défilement VCL qui ouvre un document à partir d'un fichier ou s'attache à une instance existante deTPDFlib, affiche les pages via le moteur de rendu sélectionné (GDI+, Cairo ou PDFium), et offre une navigation entre les pages (GoToPage/NextPage/PrevPageavec un événementOnPageChange) et un contrôle du zoom — un pourcentage fixe, ajuster à la largeur ou ajuster à la page, recalculé automatiquement lorsque le contrôle est redimensionné ; les pages plus larges que la zone d'affichage défilent, les pages plus étroites se centrent - Ajout d'un paquet à la conception (
Package\PDFlibViewerPkg.dpk) qui enregistre le contrôle sur la page de la palette PDF losLab pour une utilisation par glisser-déposer dans l'EDI
Version 3.121.0
Ajout
- Façonnage automatique des scripts complexes dans
DrawText: le texte contenant de l'arabe, de l'hébreu, de l'indien ou d'autres caractères de scripts complexes est désormais détecté et façonné automatiquement — les formes contextuelles des lettres, les ligatures obligatoires et l'ordre de droite à gauche s'affichent correctement sans modification du code ; les 14 noms standards sont mappés sur leurs polices installées compatibles avec les métriques (Helvetica vers Arial, Times vers Times New Roman, Courier vers Courier New) etGetTextWidtheffectue les mesures via la même passe de façonnage pour que l'alignement reste cohérent ; le texte latin, cyrillique, grec et CJK conserve son chemin de dessin existant octet par octet - Ajout de
SetTextShapingpour activer ou désactiver le routage automatique (activé par défaut ; passez 0 pour restaurer le comportement exact d'avant le façonnage)
Version 3.120.0
Modification
- Les polices d'accompagnement de texte façonné sont désormais sous-ensemblées au moment de la sauvegarde aux seuls glyphes que le document affiche, ce qui réduit considérablement les fichiers de sortie (un programme de police complet de plus d'un mégaoctet est réduit aux glyphes utilisés) ; la police sous-ensemblée conserve sa numérotation de glyphes, porte un nom
BaseFontbalisé comme sous-ensemble et de vraies largeurs/Wpar glyphe, et gagne une table ToUnicode qui traduit chaque glyphe façonné vers ses caractères sources — ainsi, copier ou extraire la sortie deDrawShapedTextrenvoie la chaîne d'origine, y compris les deux lettres derrière une ligature lam-alef
Version 3.119.0
Ajout
- Ajout du dessin de texte de scripts complexes :
DrawShapedTextfaçonne les chaînes en arabe, en hébreu et dans d'autres scripts complexes avant de les dessiner — les formes contextuelles des lettres, les ligatures obligatoires telles que lam-alef et l'ordre de droite à gauche s'affichent toutes correctement — et écrit les glyphes façonnés via une police d'accompagnement de Type 0 (Identity-H) intégrant l'ensemble du programme de la police, de sorte que les formes n'ayant pas de code de caractère propre soient rendues de manière exacte ; une police d'accompagnement est créée par police de caractères et réutilisée entre les appels - Ajout de
GetShapedTextWidth, qui mesure le texte via la même passe de façonnage de sorte que le texte ligaturé est mesuré à sa vraie largeur de dessin — utilisez-le pour aligner à droite ou centrer les paragraphes façonnés
Version 3.118.0
Ajout
- Ajout de la base pour la mise en forme du texte des scripts complexes : une nouvelle liaison Uniscribe (usp10.dll) transforme l'arabe, l'hébreu et d'autres chaînes de scripts complexes en séries de glyphes correctement ordonnées et formées — formes arabes contextuelles, ligatures obligatoires telles que lam-alef et l'ordre de droite à gauche — signalant l'index de glyphe de la police de chaque glyphe, l'avance et le groupe de caractères source ; c'est le moteur de mise en forme sur lequel les versions ultérieures construisent le tracé de dessin, et il est chargé paresseusement de sorte que les plateformes sans Uniscribe conservent simplement le tracé par caractère existant
Version 3.117.0
Ajout
- Ajout de l'introspection du profil ICC :
GetOutputIntentICCInfoanalyse le profil ICC attaché à l'intention de sortie (OutputIntent) du document et signale sa version, la classe d'appareil, l'espace colorimétrique des données, l'espace de connexion du profil, l'intention de rendu et le nombre de composants — utile pour inspecter la condition d'impression des fichiers PDF/A et PDF/X ; la gestion de l'espace colorimétrique ICCBased du moteur de rendu déduit désormais également le nombre de composants de l'en-tête du profil lui-même lorsque l'espace colorimétrique d'un ombrage ne comporte ni/Alternateni/N
Version 3.116.0
Ajout
- Ajout d'un mode d'extraction de texte tenant compte des tableaux : l'option 10 de
GetPageTextregroupe les bords gauches des blocs de texte de la page en positions de colonnes globales et émet des lignes séparées par des tabulations, afin que les mises en page tabulaires soient extraites sous forme de TSV prêts à importer avec des cellules alignées verticalement restant alignées sur l'ensemble des lignes
Version 3.115.0
Ajout
- Ajout de l'imposition de pages :
ImposePagesNUpdispose chaque page du document sur de nouvelles feuilles dans une grille N pages par feuille (2 par feuille, 4 par feuille, 9 par feuille ou toute disposition Colonnes x Lignes) avec chaque page ajustée selon ses proportions et centrée dans sa cellule en tant que contenu vectoriel en direct, ou — avec l'option livret — produit des feuilles piquées à cheval dont le jumelage des pages se plie en un livret lorsqu'elles sont imprimées en recto verso et empilées
Version 3.114.0
Ajout
- Extension des lecteurs d'actions typées
GetAnnotActionInfoetGetOutlineActionInfoà quatre autres types d'actions — Masquer (avec le nombre de cibles masquées et le drapeau masquer/afficher), Soumettre le formulaire (URL de soumission et nombre de champs), Réinitialiser le formulaire (nombre de champs) et Importer des données (fichier source) — et pour exposer la charge utile du nom des actions nommées (par exemple,NextPage) ; les deux lecteurs partagent désormais un analyseur (parser), de sorte que les liens d'annotation et les signets signalent des informations identiques
Version 3.113.0
Ajout
- Ajout d'assistants de formatage des champs de formulaire :
SetFormFieldNumberFormat(nombre de décimales, style de séparateur, style négatif et emplacement de la devise),SetFormFieldPercentFormatetSetFormFieldDateFormat(chaînes d'images de date Acrobat telles quemm/dd/yyyy) écrivent chacun la paire de JavaScript de formatage standard Acrobat sur les actions supplémentaires du champ — un filtre de frappe plus un formateur d'affichage — afin que les visionneuses conformes valident la saisie et rendent les valeurs formatées sans code JavaScript écrit à la main
Version 3.112.0
Ajout
- Ajout de la création d'annotations de son :
AddSoundAnnotationFromFilelit un fichier WAV PCM non compressé (8 ou 16 bits, mono ou stéréo) et intègre ses échantillons derrière une annotation d'icône de haut-parleur en tant que flux/Sounddans l'encodage signé attendu par le mécanisme audio du PDF, achevant l'aller-retour avec les lecteursGetAnnotSoundToFile/GetAnnotSoundToStringexistants
Version 3.111.0
Ajout
- Ajout de réponses d'annotation en fil de discussion (ISO 32000-1 §12.5.6.3) :
AddAnnotationReplyajoute une réponse à toute annotation existante en tant qu'annotation de texte masquée dont le/IRTfait référence à la cible avec la relation de réponse/RT, de sorte qu'Acrobat et d'autres visionneuses la montrent en fil de discussion sous la cible dans le panneau de commentaires ; combinez avecAddAnnotationStateet l'échange de commentaires FDF pour des allers-retours complets de révision collaborative
Version 3.110.0
Ajout
- Ajout du rendu d'ombrage basé sur un maillage et sur une fonction, achevant la couverture des sept types d'ombrage PDF : maillages de triangles Gouraud de forme libre (type 4), maillages Gouraud en forme de treillis (type 5), maillages de carreaux de Coons (type 6) et maillages de carreaux de produits tensoriels (type 7) sont décodés à partir de leurs flux de données compactés en bits — y compris les indicateurs de carreaux à arêtes partagées, le mappage de valeurs
/Decodeet les rampes de/Functionde couleurs facultatives — et peints via les dégradés de maillage natifs du moteur Cairo ; les ombrages basés sur des fonctions (type 1) sont approximés en échantillonnant la fonction d'ombrage sur son domaine dans une fine grille de carreaux ; les espaces colorimétriques pris en charge couvrent DeviceRGB, DeviceGray, DeviceCMYK et les alternatives ICCBased (le moteur GDI+ n'a pas de primitive de dégradé de maillage et laisse les zones ombrées de maillage non peintes)
Version 3.109.0
Ajout
- L'édition au niveau du texte complète le cadre d'édition de contenu (phase 4) :
TPDFContentProgram.GetTextRunsénumère les instructions affichant du texte d'une page avec la ressource de police et la taille actives pour chacune (suivi de l'état de la police au travers de l'imbrication d'enregistrement/restauration), etReplaceTextRunéchange le texte affiché sur place — un véritable remplacement du flux de contenu qui conserve la position, la police et la couleur d'origine, contrairement aux approches basées sur la superposition qui masquent l'ancien texte et redessinent par-dessus
Version 3.108.0
Ajout
- Ajout d'un modèle objet pour la géométrie de la page au cadre d'édition de contenu (phase 3) :
TPDFContentProgram.LiftPathélève un objet de tracé (opérateurs de construction de déplacement/ligne/courbe/rectangle ainsi que les opérateurs d'écrêtage et de peinture qui le terminent) en unTPDFPathéditable de sous-tracés et de segments ;TPDFPath.Transformapplique une matrice affine à chaque point (déplace, met à l'échelle, fait pivoter ou incline les illustrations existantes) ;LowerPathréécrit la géométrie modifiée par-dessus les instructions d'origine, prête pourWritePageContentLayer
Version 3.107.0
Ajout
- Extension du cadre d'édition de contenu (phase 2) avec des commodités au niveau de l'instruction sur
TPDFContentProgram:InsertFromSourceanalyse un extrait de contenu et joint ses instructions à n'importe quelle position ;SetOperandréécrit un seul opérande à partir de la syntaxe source (renumérote une coordonnée, recolore un remplissage) ;OperandTextrelit un opérande ;InstructionGroup,FindNextOpetFindNextGroupnaviguent dans la liste d'instructions par opérateur ou par catégorie d'opérateur ISO 32000-1
Version 3.106.0
Ajout
- Ajout de la première phase du cadre d'édition de contenu structuré :
ParsePageContentLayerdécode une couche de contenu de page en unTPDFContentPrograméditable — une liste d'instructions, chacune avec un opérateur de contenu PDF (les 73 opérateurs du tableau 51 de la norme ISO 32000-1) avec ses objets d'opérande décodés — etWritePageContentLayersérialise le programme à nouveau dans la page, de sorte que les appelants peuvent analyser, inspecter, supprimer ou réorganiser les instructions de dessin et réécrire la page ;GetPageContentLayerCountsignale le nombre de couches de contenu, qui sont éditées indépendamment ; l'émetteur préserve le comportement (un aller-retour non modifié est rendu de manière identique au pixel), les opérateurs inconnus survivent inchangés et les images intégrées sont transportées textuellement
Version 3.105.0
Ajout
- Ajout d'un mode d'extraction de texte par ordre de lecture : l'option 9 de
GetPageTextrenvoie le texte de la page dans l'ordre de lecture visuel en utilisant une analyse des espaces récursive (découpage XY), de sorte que les mises en page à plusieurs colonnes sortent colonne par colonne — d'abord un titre sur toute la largeur, puis toute la colonne de gauche, puis la colonne de droite — au lieu d'entrelacer les colonnes ligne par ligne comme le font les classements géométriques haut puis gauche
Version 3.104.0
Ajout
- Ajout de l'introspection du certificat du signataire au vérificateur de signature :
GetSignerCertificatedécode la charge utile PKCS#7 du premier champ de signature et renvoie un résumé typé du certificat du signataire intégré — noms d'affichage du sujet et de l'émetteur, le numéro de série sous forme hexadécimale conventionnelle, la fenêtre de validité UTC (NotBefore/NotAfter) et un indicateur de commodité signalant si le certificat se trouve actuellement dans cette fenêtre ; le signataire est recherché parmi les certificats intégrés par émetteur et numéro de série
Version 3.103.0
Ajout
- Ajout de
NewRGBRadialShader, l'équivalent radial deNewRGBAxialShader: enregistre un dégradé radial à deux cercles nommé (ShadingType 3, ISO 32000-1 §8.7.4.5.3) mélangeant deux couleurs RVB, avec une extension de couleur facultative au-delà des cercles ; sélectionnez-le avec les fonctions existantesSetFillShader,SetLineShaderouSetTextShaderpour peindre des remplissages de type “lueur” circulaires, des traits et du texte
Version 3.102.0
Ajout
- Ajout du rendu de dégradé radial (ShadingType 3) (ISO 32000-1 §8.7.4.5.4) : le moteur de rendu de page peint désormais les ombrages radiaux à deux cercles utilisés par les opérateurs
shet les remplissages par motif d'ombrage, en plus des dégradés axiaux (ShadingType 2) précédemment pris en charge ; pris en charge par les moteurs raster GDI+ et Cairo avec des fonctions de couleur à arrêts multiples, les espaces colorimétriques DeviceRGB/DeviceCMYK/DeviceN/Separation/ICCBased et la gestion de/Extend
Version 3.101.0
Ajout
- Ajout d'effets de bordure en nuage (ISO 32000-1 §12.5.4) :
SetAnnotCloudyEffecttransforme la bordure d'une annotation de type Carré, Cercle, Polygone ou Texte libre en un “nuage de révision” composé de demi-cercles reliés en écrivant le dictionnaire d'effets de bordure/BE, l'intensité 1 ou 2 correspondant aux styles Nuageux d'Acrobat et 0 supprimant à nouveau l'effet ;GetAnnotCloudyEffectrelit le paramètre (0 = pas de nuage, sinon l'intensité 1..2)
Version 3.100.0
Ajout
- Ajout d'états de révision d'annotation (ISO 32000-1 §12.5.6.3) :
AddAnnotationStateenregistre un changement de statut de révision pour une annotation existante en ajoutant une annotation de texte masquée dont le/IRTpointe vers la cible et dont le/State+/StateModelporte le statut, en prenant en charge le modèleReview(None/Accepted/Rejected/Cancelled/Completed) et le modèleMarked(Unmarked/Marked) utilisés par le workflow d'examen des commentaires d'Acrobat ;GetAnnotStateetGetAnnotStateModelrelisent les chaînes enregistrées à partir de n'importe quelle annotation (vide en cas d'absence)
Correction
- Correction d'un échec de temps de chargement qui empêchait les applications construites avec des versions de développement récentes de démarrer (une recherche de nom de certificat Windows était liée à un point d'entrée DLL inexistant), et réparation de régressions de compilation dans l'importation de commentaires FDF, la rotation de la plage de pages et les chemins d'indicateurs de signature
Version 3.99.0
Ajout
- Ajout des API de lecture de l'empreinte du document et de la transition :
GetDocumentFileIDrenvoie l'identifiant permanent du document à partir du tableau/IDde la fin de fichier (premier élément encodé en hexadécimal), utile comme clé de cache stable ou empreinte de document ;GetPageTransitionest l'équivalent en lecture deSetPageTransition, renvoyant le style de transition sous forme de valeur typéeTPDFlibPageTransitionainsi que la durée d'affichage et la durée de transition en mappant de manière inversée les entrées stockées/Trans/S,/Dmet/M
Version 3.98.0
Ajout
- Ajout de la rotation de plage de pages et de l'introspection des miniatures :
RotatePageRangeapplique une rotation de 0/90/180/270 à chaque page d'une plage (enveloppant la fonction existante pour une seule pageRotatePageafin que les appelants n'aient plus besoin d'une boucle par page) ;HasPageThumbnailindique si une page contient une entrée/Thumb;GetPageThumbnailInfolit la largeur, la hauteur et les bits par composant de l'image miniature XObject
Version 3.97.0
Ajout
- Ajout des lecteurs de propriétés d'annotation étendues :
GetAnnotColorlit le tableau de couleurs/C(0..1 RVB, avec un indicateur HasColor distinguant « aucune couleur explicite » de « noir explicite ») ;GetAnnotBorderWidthlit/BS /W, en se rabattant sur le tableau hérité/Border;GetAnnotOpacitylit l'alpha du trait/CA(par défaut 1.0) ;GetAnnotCreationDatelit l'horodatage/CreationDate;GetAnnotFlagslit l'octet des indicateurs de visibilité/d'impression/F
Version 3.96.0
Ajout
- Ajout d'API d'introspection de sécurité en lecture :
IsEncryptedindique si le document chargé contient un dictionnaire/Encrypt;GetEncryptionLevelrenvoie une force typée (0=aucune, 1=RC4-40, 2=RC4-128, 3=AES-128, 4=AES-256, 5=AES-256 Acrobat X) correspondant aux options de chiffrement en écriture ;GetUserPermissionsrenvoie le mot de permission brut/Ppour un test de bit direct ;IsOwnerPasswordindique si le document a été ouvert avec les informations d'identification du propriétaire
Version 3.95.0
Ajout
- Ajout de l'impression avancée et du remplacement de texte :
PrintDocumentAdvancedpilote le DEVMODE complet de l'imprimante (recto verso, orientation, couleur, qualité d'impression, taille du papier, bac à papier) en plus des copies/assemblage via un enregistrement typéTPDFlibPrintSettings, en appliquant chaque champ non par défaut via le mécanisme de profil d'imprimante personnalisée existant ;SearchAndReplaceTextexécute une recherche sur une plage de pages et, pour chaque correspondance, masque le bloc de texte d'origine avec un rectangle blanc opaque et redessine le texte de remplacement à l'origine du bloc dans la police sélectionnée par l'appelant, reproduisant le comportement de remplacement en superposition de PDFtoolkit SearchAndReplace
Version 3.94.0
Ajout
- Ajout de l'échange FDF d'annotations (« Exporter/Importer des commentaires » d'Acrobat) :
ExportAnnotationsToFDFStringetExportAnnotationsToFDFparcourent les/Annotsde chaque page et sérialisent chaque annotation en tant qu'entrée/Type /Annotdans un tableau FDF/Annots, portant/Subtype,/Contents,/Rect, l'étiquette d'auteur/T,/Subjet l'index de page/Pagebasé sur zéro ;ImportAnnotationsFromFDFStringetImportAnnotationsFromFDFanalysent un tel FDF avec une petite machine à états et recréent chaque entrée en tant que nouvelle annotation sur la page correspondante, en préservant le dictionnaire d'annotations complet au lieu de le réduire à un simple pense-bête