Notes de version PDFium Delphi Component
Historique des versions pour les fonctions visibles par l'utilisateur, corrections, améliorations du visualiseur, génération de documents, sortie PDF/A, rendu et mises à jour de documentation de PDFium Delphi Component
Dernière version
- Dernière version : 3.137.1 ; Date de publication :
Version 3.137.1
Corrigé (Fixed)
- Les vérifications de révocation OpenSSL en ligne conservent l’état CRL précédent, sa raison, son erreur native et le certificat concerné en l’absence de preuve ou de répondeur OCSP, préservant les diagnostics précis de CRL expirée
Version 3.137.0
Ajouté (Added)
- Les builds Free Pascal/LCL natifs prennent en charge Linux Qt6 et macOS Cocoa avec résolution des polices plateforme, stockage temporaire privé, chargement, édition, formulaires, enregistrement et rendu
- La signature macOS Keychain accepte un chemin Keychain local à la requête et l’export borné hors ligne de la chaîne de certificats, avec signature et transports d’horodatage Free Pascal et Delphi natifs
- Le rendu parallèle indique pour chaque worker le chemin réel du module, son adresse d’initialisation et le résultat de déchargement, et refuse les chargeurs réutilisant une image PDFium existante
Corrigé (Fixed)
- Les liaisons PDFium Unix préservent les largeurs unsigned-long LP64 des callbacks et tampons, y compris les lectures de flux personnalisés au-delà de 4 GiB
- Le rendu LCL natif respecte l’ordre d’octets et la disposition des canaux bitmap, conservant les couleurs dans la sortie Cocoa et le rendu par contexte de périphérique
- Les rendus bitmap, tuile et progressif conservent l’alpha transparent du fond pour clNone et clDefault indépendamment de la requête native de transparence de page
- La signature identifie correctement les algorithmes de clé publique, dont EC ; la vérification CMS macOS préserve les résultats indépendants de la signature externe et de l’horodatage et signale explicitement la vérification RSA-PSS non prise en charge
- La validation d’horodatage PAdES exige une EKU id-kp-timeStamping critique et exclusive ; OpenSSL évalue les chaînes TSA de base sans imposer à tort un usage de certificat S/MIME
- Les validations atomiques de fichiers Unix conservent la nouvelle base incrémentale si la synchronisation du répertoire échoue après remplacement, avec exception de sortie déjà validée et durabilité incomplète
Modifié (Changed)
- Les futures Delphi POSIX acceptent la priorité par défaut et refusent les priorités non prises en charge avant le démarrage d’un worker
Version 3.136.0
Ajouté (Added)
- Les transformations ICC LittleCMS facultatives et la conversion des couleurs du document utilisent les composantes originales du texte, des vecteurs et des images de 8 bits ou 16 bits, conservent les tons directs sélectionnés et signalent explicitement le contenu non pris en charge
- Le caviardage complexe conserve le contenu pris en charge dans les Form XObjects imbriqués, tracés courbes remplis et images tournées, réfléchies ou cisaillées, avec budgets géométriques finis et rapports détaillés des suppressions
- La lecture des objets actifs expose des budgets indépendants de corps d’objet et de flux d’objets compressés avant matérialisation et décodage
Sécurité (Security)
- Le caviardage refuse les textes de remplacement Tagged, XFA, calques facultatifs, découpages de texte et états de peinture invérifiables, dont les opérateurs répartis sur plusieurs flux, empêchant l’export de sémantiques sensibles non prises en charge
Version 3.135.0
Ajouté (Added)
- La comparaison des annotations et widgets AcroForm rapporte les changements de propriété indépendamment des pixels, avec noms stables, correspondances de pages explicites, ambiguïtés et limites de superposition avant/après
- Les cellules de tableau acceptent styles de texte mixtes et images avec texte alternatif, continuation facultative des cellules fusionnées entre pages, sous-totaux et libellés de continuation, tout en préservant les relations Tagged PDF
Corrigé (Fixed)
- La génération de mise en page balisée initialise la bibliothèque native avant de vérifier ses capacités, permettant d’en faire la première opération d’un nouveau composant document
- Plusieurs remplacements dans un objet texte sont ajustés une seule fois selon ses limites originales, respectant l’échelle horizontale minimale globale et évitant les modifications intermédiaires inutiles
Version 3.134.0
Ajouté (Added)
- La fusion de navigation conserve destinations nommées et liens internes à travers les pages sélectionnées, réordonnées et répétées, avec politiques de collision explicites et vérification transactionnelle
- Le remplacement de texte avec style ajoute plans source vérifiés, aperçus indépendants, réutilisation des polices natives, secours explicite, ajustement horizontal borné et rollback des modifications échouées ou annulées
- La signature OpenSSL accepte clés privées et chaînes explicitement configurées pour RSA-PSS, RSA PKCS#1 v1.5 et ECDSA, y compris la résolution du signataire par défaut hors Windows
- La vérification OpenSSL ajoute des preuves OCSP authentifiées hors ligne et bornées en ligne, les identités des certificats en échec et des diagnostics facultatifs par signataire CMS
- Le vérificateur FPC macOS Security.framework rapporte séparément cryptographie, confiance de chaîne et révocation avec ancres explicites et preuves OCSP fournies
Corrigé (Fixed)
- L’extraction URI des annotations de lien fournit tout le tampon natif, terminateur compris, pour renvoyer correctement les cibles valides
Version 3.133.0
Ajouté (Added)
- La fusion transactionnelle AcroForm accepte pages sélectionnées, refus des champs, renommage, espaces de noms et champs texte/choix compatibles partagés, avec ressources, apparences et ordre de calcul isolés
- Le fournisseur facultatif de codes-barres génère Code128, QR, DataMatrix et PDF417 et reconnaît les images en niveaux de gris, avec dépendances natives explicites et budgets finis
Corrigé (Fixed)
- FormField lit les valeurs héritées du parent et valide les modifications de texte de façon cohérente entre widgets partagés, avec valeurs persistantes après enregistrement/réouverture et vérification de lecture seule
- La régénération des apparences des widgets texte hérités restaure les valeurs parentes sans valeur masquée dans le widget ; une affectation réussie invalide les caches de pages partagés
Version 3.132.0
Ajouté (Added)
- L’alignement facultatif détecte les pages ajoutées, supprimées et déplacées, avec changements Unicode bornés, régions visuelles connexes et superpositions de comparaison exportables
- La fusion transactionnelle de navigation conserve hiérarchie des signets, styles, actions URI et destinations réassociées lors des importations sélectionnées, répétées et réordonnées
- Le fournisseur OCR Tesseract facultatif apporte diagnostics explicites des dépendances, géométrie Unicode des mots, annulation et budgets, avec vérification de la couche recherchable après enregistrement/réouverture
Sécurité (Security)
- La politique RSA-PSS évalue tous les paramètres de signature et de clé publique restreinte et refuse le DER malformé et les contraintes incompatibles de hash, masque, sel ou trailer
Corrigé (Fixed)
- La vérification d’enregistrement des signets ne refuse plus les feuilles pour une différence d’état développé propre aux branches
Version 3.131.0
Ajouté (Added)
- WatermarkStamp accepte désormais PDF cible et de tampon, intervalle de pages cible et sortie limitée aux numéros de page, avec placement proportionnel pour des tailles de page mixtes
- MergePDF prévisualise les pages sélectionnées de chaque entrée et leur intervalle destination avant fusion, et accepte une seule entrée pour extraire des pages
Corrigé (Fixed)
- MergePDF valide chaque source avant importation et s’arrête sur une entrée illisible, plage invalide, importation échouée ou annulation, plutôt que d’enregistrer une fusion incomplète
- WatermarkStamp préserve ses fichiers source et modèle et enregistre correctement les numéros de page même si les deux couches de tampon sont désactivées
Modifié (Changed)
- Chaque répertoire de démos natives se concentre sur 22 traitements complets ; SecurityAudit et XfdfLab sont déplacés dans Miscellaneous avec chemins de projet et navigation corrigés
Supprimé (Removed)
- Le parcours fixe AnnotationsLab est retiré ; création, inspection et échange d’annotations restent couverts par les exemples XFDF et d’extraction de contenu et les tests API
Version 3.130.0
Modifié (Changed)
- Chaque répertoire de démos natives a été réorganisé autour de 24 workflows complets, avec neuf sujets d’API ciblés sous Miscellaneous et des conseils séparés pour choisir une première démo
- Les exemples ciblés d’annotation, d’accessibilité, de polices, de navigation, d’export de texte, de rendu en images de pages, de préférences d’impression, d’interaction et de XFA restent disponibles avec leur propre source et leurs données embarquées
Supprimé (Removed)
- Suppression des projets minimalistes CJKTextLab et RTLTextLab ; la création Unicode reste disponible dans CreatePDF, et les API de texte façonné restent documentées dans la référence API
Corrigé (Fixed)
- Correction de l’échec de la visite guidée des API d’accessibilité C++Builder lors de l’export de son script de synthèse vocale
- Correction de l’exemple d’annotation C++Builder qui utilisait des décalages de tableau incorrects pour les coordonnées de surlignage
Version 3.129.0
Modifié (Changed)
- Toutes les démos natives sont désormais autonomes : la logique d’exemple a été déplacée dans les projets qui l’utilisent, les PDF de vitrine sont embarqués avec les projets de visualisation et d’extraction concernés, et le répertoire Demo/Shared a été supprimé
- Les visites guidées hors ligne, les aperçus en direct, les formulaires modifiables, les rapports préremplis, les pièces jointes, la navigation, les préférences d’impression et l’inspection XFA statique restent disponibles quand les projets sont copiés indépendamment
- FontProperties s’ouvre désormais avec les métriques réelles de police et de caractère déjà affichées, et analyse immédiatement le premier objet texte après l’ouverture d’un autre document
Corrigé (Fixed)
- Alignement du placement et de l’arrière-plan de la barre d’expérience de PDFViewer entre les variantes natives, et libération de l’association visionneuse de FontProperties avant l’arrêt
Version 3.128.0
Ajouté (Added)
- Ajout d’une vitrine de démonstration hors ligne de six pages avec du texte réel, des graphiques vectoriels, des images intégrées, un tableau, des champs AcroForm, des signets, des liens, des annotations et des pièces jointes
- Ajout d’expériences de visualisation en un clic pour la recherche de texte, les doubles pages, la lecture nocturne, l’inspection de document et l’exploration des formulaires dans toutes les variantes natives de PDFViewer
Modifié (Changed)
- CreatePDF ouvre désormais un aperçu en direct sur deux pages avec métadonnées et options de contenu modifiables, de vrais objets image et annotation, et une page Unicode optionnelle avant l’enregistrement
- Les exemples ciblés de visualisation, recherche, extraction, formulaires et navigation s’ouvrent désormais sur des workflows préremplis ; les exemples de pièces jointes, de préférences d’impression et de XFA statique embarquent des données réelles propres à chaque fonctionnalité
Corrigé (Fixed)
- Correction de la gestion du cycle de vie et du focus de la visionneuse lors du démarrage, du remplacement de document, de la régénération de l’aperçu et de l’arrêt
- Correction de l’éditeur de valeurs de FormFill sous Lazarus qui restait désactivé après la sélection du premier champ au démarrage
- Correction de la liaison de document dans SearchAndSelect et des rapports d’extraction qui omettaient les champs de formulaire des pages suivantes ou interrogeaient des en-têtes de fichier indisponibles pour les échantillons générés en mémoire
Version 3.127.0
Modifié (Changed)
- Les démos MultiPageViewer utilisent les API intégrées de sélection de texte et de presse-papiers de la visionneuse, gardant la sélection cohérente entre les modes de mise en page et supprimant le mode de sélection par double-clic distinct
- Le guide des exemples associe les 35 sujets de démos à leurs workflows distincts, et les exemples console Delphi et Lazarus d’accessibilité, d’intake et de preflight partagent leurs implémentations Pascal
Ajouté (Added)
- XfdfLab peut désormais enregistrer le PDF après l’import XFDF : l’interface graphique Delphi propose Save PDF, et les variantes console acceptent un second chemin de sortie explicite
Corrigé (Fixed)
- Les démos MultiPageViewer de C++Builder et Lazarus s’ouvrent sans propriétés de formulaire non prises en charge, et toutes les démos MultiPageViewer déconnectent leur document avant la fermeture
- Le workbench d’accessibilité Lazarus génère des vignettes JPEG des pages pour son rapport de revue HTML
- Les démos ExtractImages créent un échantillon de deux pages contenant de vrais objets image intégrés, de sorte que le workflow d’extraction par défaut produit quatre images
- L’exemple console d’aller-retour XFDF préserve le contenu des annotations et les données d’auteur, et rejette les chemins de sortie PDF conflictuels ou déjà existants avant d’écrire la sortie
Version 3.126.2
Corrigé (Fixed)
- La consultation complète des XFA fonctionne avec les réglages par défaut de sélection de texte, remplace le texte sélectionné lors de la saisie au clavier, respecte les champs en lecture seule et les événements de formulaire désactivés, et rafraîchit les handles de pages affichées après les changements de mise en page dynamique
- Les bibliothèques V8 de Windows rejettent les attributs XDP mal formés, les attributs dupliqués, l’usage invalide d’espaces de noms et les déclarations XML discordantes avant de modifier le flux XFA enregistré
Sécurité (Security)
- L’analyse des révisions de signature préserve la propriété du contenu des pages lorsque des widgets et des objets d’apparence référencent le même graphe d’objets, empêchant que des modifications ultérieures de pages soient acceptées comme mises à jour autorisées de formulaire ou d’annotation au titre de DocMDP
- Les verrouillages FieldMDP restent effectifs lorsqu’un champ verrouillé et une annotation partagent un objet de valeur indirect
Version 3.126.1
Corrigé (Fixed)
- La repagination dynamique XFA met désormais à jour
TPdf.PageCountetOnXfaPageCountChangedavec le nombre total réel de pages après ajout ou suppression de pages, gardant la navigation de l’hôte synchronisée avec la mise en page du formulaire - Les bibliothèques V8 de Windows mises à jour rafraîchissent la géométrie des widgets de saisie après les changements de mise en page XFA dynamiques, gardant le texte et les zones de saisie alignés lorsque des champs migrent vers une autre page
Version 3.126.0
Ajouté (Added)
- Les bibliothèques V8 Win32 et Win64 mises à jour préservent les commentaires XML et les instructions de traitement hors des datasets vivants et des paquets de formulaire lors de l’enregistrement des documents XFA monoflux pris en charge, y compris les entrées UTF-8 et UTF-16
Corrigé (Fixed)
- L’enregistrement XFA monoflux rejette les encodages UTF-8 ou UTF-16 invalides, les balises incomplètes, les références d’entité invalides et les instructions de traitement mal formées au lieu de réécrire silencieusement ces entrées ; les constructions non prises en charge dans les paquets de données vivants, les déclarations DTD et XMLDSig restent des échecs d’enregistrement explicites
- Le copier-couper-coller de la visionneuse et des formulaires réessaie brièvement lorsqu’un autre thread ou une autre application détient le presse-papiers Windows, laissant les contentions passagères se résorber ; un couper échoué préserve malgré tout le texte original du champ
Version 3.125.3
Corrigé (Fixed)
- Les bibliothèques
pdfium.dllordinaires Win32 et Win64 mises à jour signalent désormais un échec lorsque l’écriture PDF finale mise en mémoire tampon échoue, alignant ce correctif sur celui livré précédemment dans les bibliothèques V8
Version 3.125.2
Corrigé (Fixed)
- Les bibliothèques V8 de Windows mises à jour préservent le texte XFA édité à travers l’enregistrement et la réouverture, y compris les valeurs vides, les blancs d’origine, les sauts de ligne et les caractères Unicode supplémentaires, pour les tableaux de paquets et les documents XDP monoflux pris en charge
- Les erreurs d’exportation de paquets XFA et les échecs de l’écrivain final mis en mémoire tampon signalent désormais un échec d’enregistrement dans les bibliothèques V8 mises à jour, sans effacer l’état de modification du document ; les documents monoflux contenant des constructions XML non prises en charge ou des signatures XML sont rejetés
- Les bibliothèques V8 mises à jour préservent la plateforme V8 et l’isolate explicitement fournis par l’application hôte à travers l’initialisation et la destruction de PDFium
- Un chemin explicite dans
LibraryNamesélectionne désormais exactement ce runtime dans les deux modes moteur, y comprisEnableV8Engine=True; un chemin explicite introuvable échoue au lieu de charger une autre bibliothèque embarquée
Version 3.125.1
Corrigé (Fixed)
ValidatePdfFilesParallelne corrompt plus le moteur PDFium partagé : les threads de travail ouvraient et inspectaient auparavant les documents en parallèle, ce qui faisait échouer certains documents avec des erreurs de chargement ou des violations d’accès et pouvait faire planter le processus ou casser les opérations PDF ultérieures ; la partie PDFium de chaque document est désormais traitée une à la fois tandis que l’évaluation des règles continue de s’exécuter en parallèle- Un document impossible à ouvrir pendant la validation par lots rapporte désormais l’erreur de chargement réelle au lieu du message subséquent « pas de document PDF actif »
Version 3.125.0
Ajouté (Added)
PdfLibraryConfigurationSupportErrorindique si uneTPdfLibraryConfigurationpeut être utilisée avec un build PDFium doté des capacités Skia et Fontations données
Corrigé (Fixed)
- Demander
prpSkiasur un build PDFium sans Skia, oupfbpFontationssur un build sans Fontations, fait désormais échouer le chargement de la bibliothèque avec uneEPdfErrorau lieu de heurter une vérification native qui arrêtait le processus ou laissait PDFium à moitié initialisé ; la configuration reste non scellée afin que l’application puisse choisir d’autres réglages et retenter le chargement
Version 3.124.0
Modifié (Changed)
- La validation PAdES applique désormais les suites de signature ETSI TS 119 312 aux signatures RSA au lieu d’accepter tous les algorithmes RSA :
AlgorithmPolicyStatusvautpcsInvalidpour les empreintes MD2, MD4 et MD5 etpcsIndeterminatepour SHA-1 et les empreintes de 112 bits comme SHA-224, qui ne sont plus agréées pour la validation courante ; les signatures SHA-1 conservent leur résultat global d’intégrité et sont signalées pour revue plutôt que rejetées - Une signature RSA dont le
digestAlgorithmdiffère de l’empreinte fixée par son algorithme de signature (par exemple sha256WithRSAEncryption sur une empreinte SHA-1) est désormais signalée commeppeiSignatureAlgorithmMismatchet échoue au contrôle d’intégrité, de même que les algorithmes de signature RSA appliqués à une clé de signataire non RSA - Les signatures RSA dont le certificat du signataire est introuvable rapportent désormais
pcsIndeterminate, alignant le comportement sur celui d’ECDSA ; les empreintes non reconnues et les OID RSA de non-signature rapportentpcsUnsupported - Les signatures RSA PKCS #1 v1.5 avec empreintes SHA3 et l’identifiant historique OIW sha1WithRSASignature sont désormais reconnues comme RSA
Version 3.123.0
Ajouté (Added)
PdfNativeRendererTypeindique quel renderer uneTPdfRendererPreferencesélectionne pour un build PDFium donné,prpDefaultse résolvant en Skia pour les runtimes dotés de Skia et en AGG sinon
Corrigé (Fixed)
- Activer
BrotliEnabledouIsolatePerDocumentdansConfigurePdfLibraryne fait plus basculer le rendu de Skia vers AGG lorsque la préférence de renderer reste àprpDefault; les runtimes embarqués dotés de Skia conservent désormais leur renderer par défaut, si bien que la sortie des pages ne change plus avec ces options sans rapport
Version 3.122.2
Corrigé (Fixed)
- Les builds Free Pascal et Lazarus transmettent désormais les noms de fichiers et les mots de passe à PDFium en UTF-8 dans tous les chemins de chargement (fichier, mémoire, flux personnalisé et chargement progressif), si bien que les documents situés dans des dossiers aux noms chinois, japonais ou autres non ASCII, et les documents chiffrés à mots de passe non ASCII, s’ouvrent même lorsque le programme n’utilise pas le mode chaîne UTF-8 de Lazarus
Version 3.122.1
Corrigé (Fixed)
LastLoadReportest désormais remplacé à chaque chargement échoué : unActive:= Trueen échec, qui laisse le composant inactif sans lever d’exception, et les appels simplesLoadDocumentouLoadCustomDocumenten échec rapportentplsFailedavec le texte de l’erreur, si bien qu’un code de traitement par lots réutilisant un mêmeTPdfne voit plus le fichier précédent signalé comme chargé- La page d’aide de
Activedécrit désormais le comportement réel en cas d’échec (pas d’exception, composant laissé inactif, détails dansLastLoadReport) et le fait queFileNamene peut être modifié que lorsque le composant est inactif
Version 3.122.0
Ajouté (Added)
EPdfAssocFilesErrordansFPdfAssocFilesexplique pourquoiInjectAssociateFilesn’a pas pu injecter : absence de trailer ou de catalogue lisible dans la source, ouTargetPagenégatif ou désignant une page inexistante ; le flux de destination reste inchangé
Modifié (Changed)
SaveAsWithAssociateFilesetSaveAsWithAssociateFilesToStreamlèvent désormais uneEPdfErrorlorsqueTAssocFilesOptions.TargetPageest hors de0..PageCount; de telles valeurs étaient auparavant attachées au catalogue du document, contrairement au comportement documenté
Corrigé (Fixed)
SaveAsWithAssociateFilesetSaveAsWithAssociateFilesToStreamrenvoient désormaisFalselorsque le document enregistré ne peut être analysé en vue de l’injection, au lieu de l’écrire inchangé et de renvoyerTruesans les fichiers demandésSaveAsWithAssociateFilesne tronque plus un fichier cible existant avant que la sortie n’ait été produite ; un enregistrement rejeté ou échoué laisse le fichier intact
Version 3.121.4
Corrigé (Fixed)
- Les fichiers associés de niveau page (
TAssocFilesOptions.TargetPage) s’attachent désormais à la page occupant cette position dans l’ordre des pages du document ; les fichiers pouvaient auparavant atterrir sur une autre page lorsque les objets de pages étaient stockés dans le fichier dans un ordre différent de leur ordre d’affichage, par exemple après réordonnancement ou insertion de pages
Version 3.121.3
Corrigé (Fixed)
- Les fichiers associés enregistrés avec
SaveAsWithAssociateFilesconservent désormais intacts les noms de fichiers et descriptions chinois, japonais et autres non ASCII :/UFet/Descsont écrits comme chaînes de texte PDF Unicode au lieu d’être convertis via la page de code ANSI du système (Delphi) ou émis comme octets UTF-8 bruts (Free Pascal) - Le nom de fichier historique
/Fest désormais toujours en ASCII imprimable portable, les caractères non ASCII étant remplacés par_, si bien que les lecteurs qui décodent/Favec leur propre page de code n’affichent plus de mojibake
Version 3.121.2
Corrigé (Fixed)
- Les fichiers associés encodent désormais les types MIME sous forme de noms PDF valides, si bien que des valeurs telles que
text/plainne produisent plus de dictionnaires de fichier intégré mal formés et n’empêchent plus la validation PDF/A-3
Version 3.121.1
Corrigé (Fixed)
- La lecture d’une annotation suivie de la réécriture des modifications ne crée plus de flux d’apparence survol et enfoncé vides lorsque ces flux sont absents, ce qui préserve les exigences PDF/A sur les apparences d’annotation
Version 3.121.0
Ajouté (Added)
- La vérification CMS OpenSSL peut récupérer sur HTTP(S) les certificats intermédiaires AIA et les CRL lorsque
OnlineRetrievalest activé, avec des limites partagées de délai d’attente, de nombre de requêtes et de taille de réponse ; les certificats téléchargés restent non fiables tant que la chaîne de confiance configurée ne les a pas validés - La récupération en ligne utilise WinHTTP sous Windows et libcurl lorsqu’il est disponible sur FPC Unix, préserve la validation des certificats HTTPS et expose les configurations de transport non prises en charge via les diagnostics de capacité existants
Corrigé (Fixed)
- La reconstruction classique des références croisées alloue sa table de sortie une seule fois et remplit directement les emplacements d’objets, évitant un travail quadratique pour les grands numéros d’objets clairsemés tout en conservant les limites de ressources de l’analyseur et les dernières générations d’objets
- La sortie PDF/X-1a exige un profil d’imprimante ICC v2 CMYK structurellement valide au lieu d’intégrer en silence le profil RGB par défaut ; les profils invalides échouent avant que le fichier de destination existant ne soit ouvert en vue de son remplacement
- La validation PDF/X-1a vérifie le profil intégré et sa déclaration à quatre composantes, et les rapports preflight identifient les profils de sortie invalides ; les libellés de condition de sortie par défaut suivent le profil fourni tandis que les libellés explicites de l’appelant sont préservés
Version 3.120.4
Corrigé (Fixed)
- Le mode batch de la démo d’extraction de tableaux traite à nouveau chaque PDF du dossier : l’instance de document partagée restait active d’un fichier à l’autre, si bien que le deuxième fichier et les suivants levaient une erreur d’affectation et étaient signalés comme échoués ; chaque document a désormais sa propre instance dans les éditions Delphi, Lazarus et C++Builder
- Le document d’exemple de la démo de filigrane garde ses pages dans l’ordre de création (1, 2, 3, 4) au lieu de faire tourner la première page vers la fin via un appel d’insertion à index
- Les démos XFA et XFDF signalent un échec d’ouverture de document par un message plutôt que par une exception non gérée, la démo des pièces jointes peut démarrer un nouveau document pendant qu’un autre est déjà chargé, et la visionneuse Lazarus libère le bitmap qu’elle enregistre
- La démo d’impression Delphi applique désormais les réglages d’orientation, de recto verso, de niveaux de gris, de qualité et de DPI au travail d’impression, respecte le nombre de copies choisi dans la boîte de dialogue d’impression, saute les pages qui échouent au rendu et restaure l’aperçu après impression
- Les démos interactives dont le chargeur avale les échecs d’ouverture n’affichent plus un état chargé trompeur, les fichiers de sortie d’extraction portent un BOM UTF-8, les démos console CJK et RTL basculent la console en UTF-8 avant d’imprimer le texte extrait, et le champ de confiance analyse les décimaux indépendamment des paramètres régionaux du système
- Le test d’horodatage PAdES vérifie désormais réellement que le validateur atteint le niveau B-T après injection de l’horodatage de signature, avec un document de test au ByteRange auto-cohérent
- Les tests de couverture API et PDF/A ne traitent plus tout échec de chargement comme un saut pour cause d’environnement quand pdfium.dll est chargé, et un nouveau test de régression couvre le déchiffrement des documents dont les valeurs de chaîne sont sérialisées en chaînes littérales par des producteurs tiers
Version 3.120.3
Corrigé (Fixed)
EncryptDocumentBytesn’abandonne plus tous les objets de la révision de base quand le PDF source a été enregistré de façon incrémentale : la chaîne de références croisées classique est désormais parcourue via/Prevde la plus récente vers la plus ancienne avec prédominance des entrées récentes, la source est rejetée si elle est déjà chiffrée, un mot-cléstreamdoit refermer un dictionnaire avant d’être traité comme données de flux, et l’étendue du dernier objet est bornée par le xref source au lieu du premierendobjrencontré dans ses octets- Les documents chiffrés dont les valeurs de chaîne sont sérialisées en chaînes littérales, produits par des outils tiers, se déchiffrent désormais au lieu d’échouer avec une erreur d’authentification
- L’injection de marqueurs PDF/E ne numérote plus le dictionnaire Info synthétisé à l’identique du flux de profil ICC intégré quand le trailer source n’a pas de
/Info, ce qui faisait pointer le xref incrémental de/DestOutputProfilevers le mauvais objet - La validation PDF/X compare la valeur XMP
pdfxid:GTS_PDFXVersionaprès retrait des blancs qui l’entourent, si bien qu’un XMP sous forme d’élément complété par des espaces ne déclenche plus de faux écart avec l’Info - La validation PDF/UA reconnaît le XMP
pdfuaid:partsous forme d’attribut, développe les object streams avant ses balayages d’octets comme les autres validateurs de standards, vérifie aussi le bit/Pde chiffrement pour les documents à flux de références croisées et exige une valeurdc:titlenon vide ; l’injection de marqueurs n’émet plus d’entrée de titre vide - L’injection de marqueurs PDF/VT ne collecte plus et ne réécrit plus deux fois chaque objet de page quand la source porte une hiérarchie DPart cassée dont la validation a échoué après que la liste des pages a déjà été remplie
- Signer au niveau PAdES B-T ou supérieur sans
TsaUrllève désormais une exception au lieu de produire en silence une signature B-B, et l’horodatage documentaire B-LTA dérive son propre nonce au lieu de renvoyer celui de l’appelant - L’injection d’horodatage de signature CMS rejette les entrées multi-signataires au lieu d’abandonner en silence chaque SignerInfo après le premier, la version SignedData passe à 3 avec un sid subjectKeyIdentifier,
certReq FALSEest omis des requêtes d’horodatage conformément au DER, et un échec de transport WinHTTP en cours de corps est signalé comme erreur de transport plutôt que comme corps DER tronqué - L’intégration de polices système résout la vraie face de la TrueType Collection pour la famille demandée et l’extrait comme police autonome ; demander une face autre que la première d’un
.ttc(NSimSun par exemple) n’intègre et ne rend plus la face 0 BuildToUnicodeCMapassocie correctement les glyphes aux caractères en paires de substitution et émet les mappages supplémentaires comme entrées bfchar, au lieu de décaler chaque entrée située après le premier caractère astral- Les insertions de texte façonné, de texte CID et d’OCR vérifient le résultat de l’insertion de page avant d’enregistrer l’objet pour rollback ; un insert en échec ne peut donc plus laisser un handle pendant qui serait détruit deux fois
- La détection du mot-clé stream dans le compresseur et la réparation ToUnicode accepte la fin de ligne CR isolée autorisée par l’ISO 32000-1 7.3.8.1
Modifié (Changed)
- La build du package C++Builder Win64x d’évaluation supprime un
PDFiumPas.libCOFF périmé laissé par une build complète précédente, pour que les deux déclinaisons de bibliothèque d’import ne puissent pas partir ensemble ; l’installateur FULL exclut de sa règle fourre-tout les fichiers réservés au développement local (packagefiles.xml, documents d’état) ; et les builds de démos post-installation épinglent la racine de l’IDE via la variablePDFiumPas_BDS_ROOTque les scripts de build lisent réellement
Version 3.120.2
Corrigé (Fixed)
- Le texte posé avec
AddText,SetText, la génération de mise en page et la couche de recherche OCR s’extrait désormais avec ses points de code exacts, aussi bien du document en mémoire qu’après un enregistrement : sous la build PDFium actuelle, les espaces ne reviennent plus en U+00A0 ni les traits d’union en U+00AD - Les polices système sont intégrées comme polices CID indexées par point de code, avec un CID par caractère Unicode et un
CIDToGIDMapexplicite ; un glyphe partagé par plusieurs caractères (espace et espace insécable, trait d’union et trait d’union conditionnel, Oméga et symbole Ohm) fait donc un aller-retour fidèle pour chacun d’eux dans n’importe quelle visionneuse ; les polices sans sous-table cmap Unicode conservent le chemin d’intégration précédent
Version 3.120.1
Corrigé (Fixed)
- Les documents enregistrés avec des polices subset ne corrompent plus leur texte extrait au rechargement : la CMap ToUnicode que pdfium sérialise pouvait associer un même CID à deux points de code différents (espaces en U+00A0, traits d’union en U+00AD) ; chaque enregistrement complet répare désormais ces mappages contradictoires sur place tout en laissant la structure de la CMap identique à l’octet près, de sorte que le lecteur PDFium, MuPDF et qpdf extraient tous les caractères d’origine
- Les enregistrements incrémentaux, les mises à jour clairsemées et les documents à flux de références croisées ne sont jamais réécrits par la réparation et passent inchangés ; les fichiers sans mappage contradictoire sont copiés à l’octet près
- Le fichier de test
sample.pdfembarqué a été régénéré via le chemin d’enregistrement réparé, et les tests de politique de chargement localisent désormais les entrées xref dynamiquement au lieu de coder en dur les décalages du fichier
Version 3.120.0
Ajouté (Added)
- Les signets rapportent leur style de texte de plan :
TBookmark.Styleporte les flags italique et gras lus via la nouvelle liaisonFPDFBookmark_GetStyle, etBookmarkStyleFeaturesAvailableindique si le pdfium.dll chargé l’exporte - Les pièces jointes exposent leur relation de fichier associé PDF 2.0 :
AttachmentRelationship[], le champRelationshipdeTPdfAttachmentMetadataet deTPdfAnnotationAttachmentlisent le nom/AFRelationshipvia la nouvelle liaisonFPDFAttachment_GetAFRelationship, sous la garde deAttachmentRelationshipFeaturesAvailable GetObjectRenderedStrokePatternrastérise dans un bitmap dont l’appelant devient propriétaire le motif de pavage avec lequel un objet chemin est tracé, via la nouvelle liaisonFPDFPageObj_GetRenderedStrokePattern;StrokePatternRenderingFeaturesAvailablesignale l’exportTPdfLibraryConfiguration.IsolatePerDocumentcorrespond au flagm_IsolatePerDocumentde laFPDF_LIBRARY_CONFIGversion 7, pour que les builds V8 puissent donner à chaque document son propre isolate ;ConfigurePdfLibraryrejette ce flag combiné à unV8Isolateexplicite
Modifié (Changed)
- Les 476 exports publics des en-têtes PDFium actuels sont tous liés ; les trois nouveaux points d’entrée se chargent de façon tolérante, si bien que les déploiements équipés d’un pdfium.dll plus ancien continuent de fonctionner, les fonctionnalités correspondantes renvoyant des résultats vides ou
nil
Version 3.119.1
Corrigé (Fixed)
- La validation de confiance Windows hors ligne restreint aussi la récupération de révocation aux données en cache, ce qui empêche toute requête réseau CRL ou OCSP implicite quand la récupération en ligne est désactivée
- Les échecs de révocation Windows préservent l’erreur de confiance de chaîne indépendante et exposent les raisons de révocation et les diagnostics natifs aux résultats PAdES et aux rapports de preuves
Version 3.119.0
Ajouté (Added)
- La validation de confiance PAdES et les rapports de preuves exposent des raisons de révocation et des erreurs natives séparées pour les signatures de document et les horodatages, avec des champs JSON et des colonnes CSV ajoutées en fin
Version 3.118.0
Ajouté (Added)
- Les résultats de vérification CMS exposent
RevocationReasonetRevocationError, avec des diagnostics OpenSSL pour les CRL locales expirées, indisponibles et invalides
Corrigé (Fixed)
- OpenSSL signale les certificats explicitement révoqués comme invalides quand la confiance de chaîne réussit et que la vérification des CRL locales confirme la révocation, tout en conservant des résultats de signature et de confiance distincts
Version 3.117.1
Corrigé (Fixed)
- Les enregistrements à version explicite acceptent les formulaires multipages valides avec des flux de références croisées compressés par prédicteur, au lieu de signaler à tort une section de références croisées malformée
Version 3.117.0
Ajouté (Added)
- La détection de tableaux lit les bordures et les trames de fond dessinées sous forme de rectangles remplis : une boîte remplie pas plus épaisse que la nouvelle valeur
MaxRulingThicknessdevient un filet, et une boîte remplie plus grande apporte ses bords, si bien que les tableaux exportés depuis Word, Google Docs ou les navigateurs se trouvent désormais sous forme de grilles à filets avec lignes de légende fusionnées au lieu de fragments d’espaces.DetectFilledRulingsdésactive ce comportement - Avant l’assemblage des grilles, les coordonnées des filets sont recalées à
RulingSnapToleranceprès, ce qui réunit en un seul tableau les morceaux de bordure par cellule, les bordures doubles et les cellules tramées séparées par une petite gouttière - Les filets situés dans des XObjects de formulaire participent à la détection via les matrices d’objets combinées, sous le contrôle de
IncludeFormXObjects ExtractDocumentTablesrelie les fragments de continuation qui se terminent là où le contenu de la page s’achève et reprennent là où démarre celui de la page suivante, et pas seulement ceux qui touchent les bords de la page ; une ligne isolée qui déborde reste considérée comme faisant partie de sa chaîne- TableExtractionLab expose
DetectFilledRulingsdans son panneau d’options, dans ses variantes Delphi, Lazarus et C++Builder
Modifié (Changed)
- La détection par les espaces ignore les mots qui appartiennent déjà à une grille à filets et exige que chaque limite de colonne soit un corridor sans texte traversant les lignes qu’elle sépare, si bien que les paragraphes justifiés et les listes à puces ne sont plus signalés comme des tableaux
- Un candidat de continuation dont la première ligne est une cellule unique sur toute la largeur est traité comme un nouveau tableau avec légende plutôt que comme la suite du précédent
MinRowsaccepte 1 pour les grilles à filets ; la détection par les espaces conserve son plancher de deux lignes, et le budgetMaxRulingSegmentspar défaut monte à 16384 car les boîtes de bordure par cellule arrivent en bien plus grand nombre que les lignes de grille tracées- Le texte des cellules est assemblé ligne par ligne à partir des boîtes de mots qui se chevauchent, de sorte que les mots dont les boîtes de glyphes diffèrent en hauteur gardent leur ordre de gauche à droite
TPdf.AboutInfo, les métadonnées du package Lazarus et les métadonnées de version de l’installateur indiquent 3.117.0
Version 3.116.4
Ajouté (Added)
- TableExtractionLab gagne un traitement par lots de dossiers :
Batch folderlanceExtractDocumentTablessur chaque PDF d’un dossier sélectionné, liste le nombre de tableaux par document, marque les documents sans couche de texte pour l’OCR et empêche les fichiers endommagés ou verrouillés d’interrompre l’exécution Export all CSVécrit chaque tableau détecté sous la forme<document>-<n>-page<p>-t<i>.csvdans un sous-dossiertablespour les exécutions par lots, ou à côté du document chargé pour un fichier unique- Un sélecteur de préréglages de détection expose des
TPdfTableExtractionOptionsajustés : Default, Compact columns (MinColumnGap4 avecAlignmentTolerance5 pour les exports serrés des traitements de texte) et Compact + wide rows (MaxRowGapFactor6 pour un interligne de 1.5-2x) - Les documents qui ne donnent aucun tableau avec le préréglage Default sont retentés une fois avec Compact columns, tant en extraction d’un document unique qu’en extraction par lots, et les lignes de lot indiquent quel préréglage a produit le résultat
Corrigé (Fixed)
- L’extraction par lots ouvre chaque document dans sa propre instance de
TPdfau lieu de recharger un composant partagé, ce qui élimine les échecs de chargement silencieux qui apparaissaient en cours de parcours de dossier comme des erreurs de composant inactif
Modifié (Changed)
TPdf.AboutInfo, les métadonnées du package Lazarus et les métadonnées de version de l’installateur indiquent 3.116.4
Version 3.116.3
Modifié (Changed)
- L’exemple TableExtractionLab des trois chaînes d’outils écrit désormais le document d’exemple qu’il génère dans
TableExtractionSample.pdfà côté de l’exécutable de démo au lieu de ne le garder qu’en mémoire ; quand le dossier n’est pas inscriptible, le labo retombe sur le comportement précédent en mémoire et le signale dans la ligne d’état TPdf.AboutInfo, les métadonnées du package Lazarus et les métadonnées de l’installateur indiquent 3.116.3
Version 3.116.2
Corrigé (Fixed)
- La bibliothèque ne se compilait plus sur les versions de Delphi plus anciennes. L’assistant de tick 64 bits et les codecs XML de listes de confiance et de production appelaient
GetTickCount64etCP_UTF8depuis des unités RTL qui ne les fournissent qu’aux compilateurs plus récents, l’écrivain HTML de reflow embarquait un littéral de chaîne CSS au-delà du plafond de 255 éléments que ces compilateurs imposent à un littéral unique, et la fusion des datasets XFA affectait entreTByteset un champ de tableau dynamique ordinaire, ce que les compilateurs antérieurs à XE7 refusent. Les compilateurs anciens lient désormaisGetTickCount64depuis kernel32 et déclarentCP_UTF8localement quand la RTL ne le fait pas, la feuille de style est livrée sous forme de littéraux courts concaténés, et la charge utile du paquet est copiée élément par élément
Modifié (Changed)
TPdf.AboutInfo, les métadonnées du package Lazarus et les métadonnées de l’installateur indiquent 3.116.2
Version 3.116.1
Ajouté (Added)
Demo\Delphi\TableExtractionLab,Demo\CBuilder\TableExtractionLabetDemo\Lazarus\TableExtractionLabfont de la détection de tableaux un flux de travail unique. Le labo construit un document d’exemple avec un tableau à filets portant des cellules d’en-tête fusionnées, un tableau aligné sur les espaces sans filets et un long tableau qui se coupe à la frontière d’une page, puis lanceExtractTablesouExtractDocumentTableset liste les lignes, colonnes, spans, flags d’en-tête, mode de détection, confiance et groupes de continuation- Le labo exporte le tableau sélectionné via
TPdfTable.ToCsvetTPdfTable.ToJson, règleDetectRuledTables,DetectWhitespaceTables,DetectContinuationsetMinConfidencedepuis le panneau d’options, et copie le rapport complet dans le presse-papiers TPdf.AboutInfo, les métadonnées du package Lazarus et les métadonnées de version de l’installateur indiquent 3.116.1
Version 3.114.21
Corrigé (Fixed)
- La validation PDF/A signalait une référence à fichier externe sur tout document contenant une annotation. L’ISO 19005-1 §6.1.7 interdit
/F,/FFilteret/FDecodeParmsdans un dictionnaire d’objet de flux, mais la vérification cherchait ces noms dans tout le fichier, et/Fest aussi la clé de flags d’annotation que le §6.5.3 exige sur chaque annotation. La vérification ne regarde désormais que l’intérieur des dictionnaires d’objets de flux
Version 3.114.20
Corrigé (Fixed)
- Les signatures RSASSA-PSS transportaient des paramètres d’algorithme mal formés sur les trois backends de signature. La RFC 4055 balise les quatre champs de RSASSA-PSS-params ; la longueur du sel était écrite comme un entier nu, qu’un parseur lit comme le début d’un autre champ, et le champ trailer était écrit alors que sa valeur égale celle par défaut que DER exige d’omettre. Un vérificateur soit n’arrivait pas à analyser les paramètres, soit retombait sur le sel par défaut de 20 octets alors que la signature en utilisait 32, si bien que les signatures PSS étaient rejetées. Les signatures PKCS#1 v1.5 et ECDSA n’étaient pas concernées
Version 3.114.19
Corrigé (Fixed)
- Demander un horodatage sous un condensat autre que SHA-256 construisait une requête qui déclarait cet algorithme tout en transportant un condensat SHA-256, ce qu’une autorité d’horodatage rejette ou, pire, horodate tel quel. Seul SHA-256 est calculé, donc tout autre identifiant est désormais refusé net ; un identifiant vide sélectionne toujours le défaut SHA-256. L’exemple PDF Viewer pour Lazarus et C++Builder liait aussi un gestionnaire d’expansion de signets que son fichier de fiche nomme mais que son code ne définit pas, ce qui échoue au chargement de la fiche ; le gestionnaire est porté depuis l’exemple Delphi
Version 3.114.18
Corrigé (Fixed)
- Les exemples XFA Lab et XFDF Lab pour Delphi, ainsi que l’exemple XFA Lab pour Lazarus, échouaient au démarrage. Chacun construit ses contrôles depuis le gestionnaire de création de sa fiche, mais la ressource de fiche n’était ni présente ni liée, si bien que la création de la fiche principale levait une erreur de ressource introuvable et que le gestionnaire ne s’exécutait jamais. Les trois embarquent désormais le fichier de fiche et la directive qui l’intègre
Version 3.114.17
Corrigé (Fixed)
- Deux ressources natives étaient mal traitées quand une opération échouait en cours de route. Un rendu de vignette en échec libérait le bitmap cible avant de fermer le rendu natif, et quand le rendu dessinait directement dans les pixels du bitmap lui-même, le démontage lisait ensuite de la mémoire déjà libérée. Une allocation de bitmap en échec dans
AddBitmaplaissait l’objet image qu’elle venait de créer sans propriétaire et sans aucun moyen de le retrouver
Version 3.114.16
Corrigé (Fixed)
- La lecture de texte FDF produisait les mauvais caractères au-dessus de
0x7E. La table PDFDocEncoding de l’annexe D.2 de l’ISO 32000-1 commence à0x80avec la puce, mais la correspondance la faisait démarrer à0x7F, si bien que tout le bloc jusqu’à0x9Fétait décalé d’une position : une dague se lisait comme une puce, un tiret cadratin comme des points de suspension, et ainsi de suite jusqu’à zcaron, qui tombait carrément hors de la table. L’euro à0xA0manquait aussi et revenait en espace insécable. Les noms et valeurs de champs d’un FDF importé se décodent désormais correctement
Version 3.114.15
Corrigé (Fixed)
- Valider la confiance sur un document dont le trailer ou le catalogue est illisible écrivait au-delà de la fin d’un tableau. Dans ce cas, la passe de conformité abandonne sans enregistrer aucune signature, tandis que le collecteur qui s’exécute ensuite travaille directement sur le flux d’octets et peut encore trouver des dictionnaires de signature, si bien qu’une entrée était écrite par dictionnaire trouvé dans un tableau qui n’en contenait aucune. Le compteur est désormais borné à ce que la passe de conformité a produit
Version 3.114.14
Corrigé (Fixed)
- L’exécution d’un plan de réparation PDF/A appliquait des étapes que le planificateur avait bloquées. Une étape est bloquée quand le document porte des signatures, que l’étape les invaliderait et que l’appelant ne l’autorise pas ; l’exécuteur ne testait que le niveau de sécurité de l’étape, qui n’exprime pas cette condition, si bien qu’un document signé pouvait se faire invalider ses signatures par une réparation automatique que le plan avait déjà refusée. Les étapes bloquées sont désormais ignorées et comptées comme ignorées
Version 3.114.13
Corrigé (Fixed)
- Ajouter un horodatage de signature à une valeur CMS dont l’ensemble de certificats dépassait 127 octets, ce qui est le cas de tout vrai certificat, corrompait le résultat. L’aide qui localise le début d’une structure imbriquée reculait sur les octets de longueur et prenait le dernier pour le premier, si bien que la tranche qu’elle découpait commençait bien avant la structure demandée. La longueur d’en-tête est désormais dérivée de la longueur du contenu, ce que DER énonce sans ambiguïté. Les autotests ne l’avaient pas repéré parce que leurs certificats de fixture étaient assez petits pour utiliser la forme courte
Version 3.114.12
Corrigé (Fixed)
- Les attributs signés étaient émis dans l’ordre de leur construction plutôt que triés par leurs encodages, comme l’exige X.690 §11.6 pour un SET OF DER. Un vérificateur qui ré-encode l’ensemble d’attributs avant de le hacher, comme le font OpenSSL et BouncyCastle, calculait donc un condensat différent et déclarait invalide une signature PAdES pourtant saine. Les signatures que produit cette bibliothèque se vérifient désormais dans ces stacks ; la validation via la couche Windows n’était pas concernée puisqu’elle hache les octets tels qu’elle les reçoit
Version 3.114.11
Corrigé (Fixed)
- Un DER INTEGER négatif plus large que deux octets de contenu était encodé avec une valeur fausse. L’écrivain émule un décalage arithmétique en réinjectant le signe après un décalage logique, mais le masque employé posait tous les bits au-dessus de l’octet bas au lieu de ne toucher que l’octet que le décalage avait libéré, si bien que la magnitude encore portée par les octets restants était écrasée. La valeur -100000 s’encodait par exemple en -34464. Les nonces de requêtes d’horodatage et tout autre entier signé de cette taille s’encodent désormais correctement
Version 3.114.10
Corrigé (Fixed)
- La validation PDF/A ne signalait jamais la partie alpha constante de la règle de transparence de l’ISO 19005-1 §6.4. L’aide construit sa clé de recherche en préfixant un solidus, et l’appelant en passait un aussi, si bien qu’elle cherchait
//CAsans rien trouver. Les deux vérifications alpha n’acceptaient en outre que les textes exacts1et1.0, ce qui signalait comme violation un/CA 1.00totalement opaque ; une valeur de un est désormais reconnue quelle que soit son écriture
Version 3.114.9
Corrigé (Fixed)
- L’action URI au niveau de la page renvoyait un texte corrompu. Le chemin revient de la couche native sous forme d’octets UTF-8 et était écrit tel quel dans une chaîne large, ce qui appareille les octets en unités de code 16 bits et laisse le reste du tampon porter ce que la mémoire y avait laissé.
GetPageActionURIdécode désormais les octets de la même façon que le chemin de l’action au niveau du document le faisait déjà
Version 3.114.8
Sécurité (Security)
- Sur les cibles autres que Windows, les octets aléatoires derrière chaque clé de chiffrement, chaque sel et chaque vecteur d’initialisation venaient du PRNG du runtime, dont la graine est une constante tant que le programme n’appelle pas
Randomize. Chaque processus produisait donc la même clé de chiffrement de fichier, les mêmes sels/UEet/OE, les mêmes octets/Permset les mêmes nonces AES-GCM, ce qui rend la sortie chiffrée d’un build Free Pascal sur Linux ou macOS trivialement récupérable et répète un nonce GCM sous une clé fixe. Les octets viennent désormais de/dev/urandom, et un pool noyau indisponible lève une erreur au lieu de se replier, comme le faisait déjà unCryptGenRandomindisponible sous Windows
Version 3.114.7
Corrigé (Fixed)
- Un flux d’objets mal formé pouvait faire lire aux points d’entrée de compression et de réparation au-delà de la fin du tampon décodé. Les décalages de membres déclarés par un flux sont désormais vérifiés en plage et en ordre croissant dès l’analyse de l’en-tête, un nombre de membres déclaré plus grand que ce que l’en-tête peut contenir est rejeté avant toute réservation de mémoire, et la plage d’octets de chaque membre est validée avant — et non après — la suppression de ses blancs finaux
Version 3.114.6
Corrigé (Fixed)
- Externaliser des images en ligne produisait un XObject d’image inutilisable. Le dictionnaire était écrit avec un solidus parasite devant sa première clé, ce qui ouvrait un nom vide et décalait chaque clé sur la valeur de la clé précédente, et la table d’abréviations en ligne faisait correspondre Decode à
Gau lieu deD, si bien qu’un tableau/Détait perdu et que l’abréviation de valeur DeviceGray était prise pour une clé. Les images sorties d’un flux de contenu portent désormais un dictionnaire bien formé et gardent leur tableau Decode
Version 3.114.5
Corrigé (Fixed)
- Le shaper HarfBuzz attribuait les longueurs de cluster aux mauvais glyphes dans les séquences de droite à gauche et donnait une longueur de un aux glyphes partageant un cluster, comme les signes et les composants de ligature. Le
ClusterLengthde chaque glyphe s’étend désormais de son début de cluster au cluster suivant dans l’ordre logique, dans les deux sens, si bien que la correspondance caractère-glyphe du texte arabe et hébreu correspond à ce que rapporte le backend Uniscribe
Version 3.114.4
Corrigé (Fixed)
- Le transport d’horodatage libcurl passait ses options numériques et lisait le code de statut HTTP comme des valeurs 32 bits, alors que libcurl prend et renvoie un
longC, qui fait 64 bits sur Linux et macOS. La requête de statut pouvait écraser les quatre octets à côté de sa cible sur la pile, et les valeurs d’options dépendaient de ce que la moitié haute du registre contenait. Les deux utilisent désormais la largeurlongde la plateforme, si bien queFPdfTsaFpcest sain sur les cibles LP64
Version 3.114.3
Corrigé (Fixed)
- Le backend PKCS#11 copiait les octets bruts du libellé d’un objet de jeton directement dans une chaîne, ce qui sur Delphi fait atterrir des octets UTF-8 sur des unités de code UTF-16. Un certificat sélectionné via
TPdfPkcs11Options.CertificateLabelne pouvait donc jamais correspondre, etEnumerateCertificatesrapportait desLabelTextillisibles. Les libellés se décodent désormais dans l’UTF-8 que la norme définit, et le PIN remis àC_Loginest encodé en UTF-8 au lieu d’être rétréci par la page de codes de l’hôte, si bien qu’un PIN non ASCII atteint le jeton intact
Version 3.114.2
Corrigé (Fixed)
- Le signataire du trousseau macOS interrogeait
SecKeyIsAlgorithmSupportedsur la mauvaise opération pour décider si une clé accepte RSASSA-PSS : la requête nommait l’opération decrypt au lieu de sign, donc la réponse était toujours non et chaque signature RSA retombait silencieusement sur PKCS#1 v1.5. Une clé qui prend en charge PSS signe désormais avec PSS comme le demandeTPadesSignerOptions.PaddingScheme, et l’argument d’opération est passé à la largeur que le framework déclare
Version 3.114.1
Corrigé (Fixed)
- Les paires de crochets imbriquées dans un texte de droite à gauche se résolvaient dans la mauvaise direction. La règle BD16 de l’UAX #9 traite les paires dans l’ordre d’apparition de leurs crochets ouvrants, et une paire résolue par N0 devient le contexte fort précédent pour une paire qui s’ouvre après elle ; les paires étaient au contraire traitées dans l’ordre où leurs crochets fermants les complétaient, si bien qu’une paire intérieure pouvait suivre la lettre qu’elle englobe plutôt que le contexte établi par la paire extérieure. Un texte comme une phrase arabe ou hébraïque contenant une parenthèse avec un crochet imbriqué se met désormais en page comme un lecteur s’y attend
Version 3.114.0
Ajouté (Added)
FPdfCryptoSslvérifie les signatures PDF et les jetons d’horodatage via OpenSSL, ce qui referme la dernière brèche de plateforme dans la validation de signatures : Linux n’avait aucun backend de vérification CMS.ConfigureSslCmsVerifierl’installe, libcrypto est résolu par nom à l’exécution donc aucune dépendance de liaison n’est créée, et les séries 1.1 et 3.x savent toutes deux se lier- La signature et la chaîne de certificats sont évaluées dans des passes séparées, si bien qu’une signature saine sous une chaîne qui n’atteint aucune ancre de confiance est rapportée comme une signature valide avec une confiance invalide plutôt que comme une signature cassée
ConfigureSslTrustAnchorsajoute des ancres de confiance DER au magasin système, etConfigureSslCrlsfournit les CRL qu’une vérification de révocation peut consulter. La révocation ne compte comme vérifiée que si une CRL est réellement présente, car OpenSSL n’en récupère aucune de son propre chef ; sans CRL fournie, le résultat dit unsupported au lieu de faire passer une chaîne non vérifiéeSslAvailable,SslMissingSymbols,SslLibraryPath,SslLibraryVersionetSslAbiLayoutrapportent ce qui s’est lié et ce qui ne s’est pas lié, etConfigureSslLibraryPathoriente le backend vers une bibliothèque précise quand les défauts de la plateforme n’en trouvent aucune
Version 3.113.0
Ajouté (Added)
TPdfKeychainCmsVerifiervérifie les signatures PDF et les jetons d’horodatage sur macOS viaCMSDecoderet SecTrust, si bien que la validation de signatures n’est plus l’apanage de Windows.ConfigureKeychainCmsVerifierl’installe, et la même unité couvre désormais les deux moitiés de la prise en charge macOS commeFPdfCryptoWinle fait pour Windows- La vérification de révocation est honorée : sur demande, une politique de révocation rejoint la politique X.509 de base, et désactiver la récupération en ligne restreint l’évaluation aux réponses en cache. Des points de contrôle de progression se déclenchent pour les étapes signature, chaîne, récupération en ligne et révocation, exactement comme les rapporte le backend Windows
KeychainVerificationAvailablesignale la prise en charge de la vérification séparément de celle de la signature, car les deux exigent des symboles de framework différents et l’une peut être présente sans l’autre
Version 3.112.0
Ajouté (Added)
FPdfCryptoMacsigne PAdES avec une identité du trousseau macOS, l’équivalent du magasin de certificats Windows : le certificat et sa clé privée viennent du trousseau et la signature est produite parSecKeyCreateSignature, si bien que la clé ne quitte jamais le keystore système.ConfigureKeychainSignerProviderl’installe, et aucun module ne doit être déployé aux côtés de l’application, contrairement à ce qu’exigerait un backend de jeton PKCS#11- Le signataire suit le certificat : une clé EC signe ECDSA, une clé RSA signe RSASSA-PSS, et là où PSS est indisponible — un macOS plus ancien, ou une clé qui refuse ce mode — le padding retombe sur PKCS#1 v1.5 et l’AlgorithmIdentifier émis le dit au lieu de prétendre du PSS
KeychainMissingSymbolsliste tout symbole de framework dont la résolution a échoué, si bien qu’un déploiement qui rapporte le backend indisponible peut distinguer un framework absent d’un nom que cette liaison porte mal
Version 3.111.0
Ajouté (Added)
ConfigurePadesCmsVerifierinstalle le backend de vérification CMS qu’utilise le validateur PAdES, si bien que la vérification de signatures et d’horodatages n’est plus liée à Windows.IPdfCmsVerifierdéclare les deux opérations auxquelles répond un backend — detached pour une signature PDF, attached pour un jeton d’horodatage — etPadesCmsVerificationAvailableindique si un backend est présent
Modifié (Changed)
- Les records de résultats et d’options de vérification ont déménagé dans
FPdfCryptosous les nomsTPdfCmsVerify*. Les nomsTWinCmsVerify*restent en alias, si bien que le code existant continue de fonctionner et qu’un backend branché parle les mêmes types que celui de Windows - Le comportement sous Windows ne change pas : sans vérificateur installé, il utilise toujours CryptoAPI, et les points de contrôle de progression, les options de révocation et les codes d’erreur natifs sont les mêmes. Là où aucun backend ne répond, chaque verdict rapporte unsupported au lieu de rester non vérifié
Version 3.110.0
Ajouté (Added)
FPdfPkcs11signe PAdES avec une clé qui reste dans un jeton PKCS#11.ConfigurePkcs11SignerProviderl’installe comme backend de signature, le module est chargé à l’exécution par chemin donc rien n’est lié, et le même code sert Windows, Linux et macOS. L’énumération des jetons que déclare l’interfaceIPdfPkcs11SignerProviderest implémentée à ses côtés : slots, jetons et certificats que chacun porte- Signer hors de Windows n’exige plus de provider fourni par l’hôte dans le cas courant : un module de jeton plus
TPdfPkcs11Optionssuffit. RSA PKCS#1 v1.5, RSASSA-PSS et ECDSA sortent tous par le jeton FPdfSha1ajoute SHA-1 pour un seul usage : apparier un certificat par l’empreinte que porteTPadesSignerOptions. Windows résolvait cela à l’intérieur du magasin de certificats ; un jeton rend les octets du certificat et laisse l’appariement à l’appelant. Ce n’est pas un condensat de signature et la pile PAdES continue de signer en SHA-256 de bout en bout
Modifié (Changed)
- Les aides DER de certificat qui lisent l’OID d’algorithme de clé publique, extraient l’émetteur et le numéro de série, et ré-encapsulent une signature ECDSA brute ont déménagé du backend Windows vers
FPdfCms, où chaque backend de signature peut les atteindre
Version 3.109.0
Modifié (Changed)
- Le chargeur de bibliothèque native n’est plus l’apanage de Windows.
LibraryNamevaut par défautpdfium.dll,libpdfium.sooulibpdfium.dylibselon la cible, le build V8 est cherché sous le nom correspondant, et le chargement comme la liaison de symboles passent par le chargeur portable sur Free Pascal. Le comportement sous Windows ne change pas, y compris la disposition de déploiement Win32 et Win64 et le diagnostic de discordance d’architecture - Les répertoires de déploiement sur les autres cibles suivent l’orthographe
<cpu>-<os>qu’emploient déjà les unités compilées, si bien queDLLs/x86_64-linux/libpdfium.sose trouve à côté deLib/FPC/x86_64-linux. Le repli sur le répertoire système reste réservé à Windows ; ailleurs, le chemin de recherche du chargeur s’en occupe
Version 3.108.0
Ajouté (Added)
TPdfHarfBuzzTextShapermet en forme du texte bidirectionnel et à écriture complexe sur les cibles Free Pascal dépourvues d’Uniscribe. Il résout les niveaux d’imbrication avecFPdfBidi, découpe le texte en séquences par écriture, met en forme chaque séquence avec libharfbuzz et place les séquences en ordre visuel. Installez-le avecConfigureTextShaper; libharfbuzz est résolu à l’exécution etHarfBuzzAvailabledit honnêtement quand il manque- Le shaper n’énumère pas les polices. Uniscribe lit le binaire de la police depuis un contexte de périphérique, ce qui n’a pas d’équivalent portable, donc l’hôte passe un
TPdfFontDataResolverqui fait correspondre un nom de police aux octets du fichier de police et garde cette politique là où elle a sa place
Version 3.107.0
Ajouté (Added)
FPdfBidiimplémente l’algorithme bidirectionnel Unicode (UAX #9) en Pascal pur :PdfResolveBidiLevelsrenvoie un niveau d’imbrication par unité de code UTF-16,PdfBidiVisualOrderapplique le réordonnancement L2, etPdfBidiClassOfexpose le Bidi_Class d’un point de code. Les règles P2-P3, X1-X10, W1-W7, N0-N2, I1-I2 et L1-L2 sont couvertes, initiateurs d’isolation et paires de crochets BD16 comprises- L’unité est neutre vis-à-vis du compilateur et de la plateforme, et c’est justement ce qui permet de mettre en page du texte bidirectionnel là où Uniscribe n’est pas disponible. Un moteur de mise en forme résout les glyphes d’une séquence dont la direction est déjà connue ; c’est donc cette pièce qui doit d’abord décider de la direction
Version 3.106.0
Ajouté (Added)
ConfigureTextShaperinstalle le backend de mise en forme de texte par lequel passe toute la bibliothèque, avecActiveTextShaper,ActiveTextShaperNameetClearTextShaperà ses côtés.ShapePdfTextcommeTPdf.AddShapedTextutilisent désormais le shaper installé au lieu de créer directement un shaper Uniscribe, si bien qu’un hôte peut fournir son propre moteur et qu’un test peut en fournir un déterministe
Modifié (Changed)
FPdfTextShapingcompile sur des cibles autres que Windows : le backend Uniscribe est désormais le défaut de la plateforme plutôt que la seule implémentation, et il est confiné au build Windows. Là où aucun backend n’est disponible, les points d’entrée de mise en forme le signalent au lieu d’échouer à la compilation
Version 3.105.1
Sécurité (Security)
- Une réponse d’horodatage est désormais limitée à 4 MB sur les deux transports. Un TSA qui continuait d’envoyer pouvait auparavant faire croître le tampon de réception sans limite, transformant un appel de signature en une croissance mémoire illimitée
Version 3.105.0
Ajouté (Added)
- L’horodatage RFC 3161 fonctionne sur les cibles Free Pascal autres que Windows : le nouveau backend libcurl envoie le TimeStampReq et lit le TimeStampResp, de sorte que
PadesTsaAvailablesignale True et que PAdES B-T, B-LT et B-LTA peuvent y obtenir des jetons. libcurl est résolu à l’exécution et ne constitue pas une dépendance de compilation ; en son absence, le backend signale une indisponibilité exactement comme celui WinHttp. Windows continue d’utiliser WinHttp et n’est pas concerné - La signature sur ces cibles requiert toujours du matériel de clé que la bibliothèque ne possède pas : fournissez-le via
ConfigurePadesSignerProvideravec unIPadesSignerProvider(ouIPdfPkcs11SignerProviderpour les clés à jeton), carFPdfCryptoWinest réservé à Windows
Version 3.104.1
Ajouté (Added)
- L’exemple de laboratoire d’inspection XFA est désormais également disponible pour Lazarus, de sorte que les sondes de capacités XFA, le listage des paquets, l’exportation des paquets et le repli
OnXfaRuntimeMissingpeuvent être exercés depuis la version LCL
Version 3.104.0
Modifié (Changed)
- La bibliothèque se compile sans aucun diagnostic évitable sur Free Pascal 3.2 : le chronométrage interne lit le tick en millisecondes depuis
GetTickCount64au lieu de l’appel 32 bits obsolète, les accesseurs obsolètes du mot de contrôle SSE sont remplacés parGetMXCSRetSetMXCSR, la base de décalage de l’empreinte de contenu est typée explicitement de sorte qu’elle ne déclenche plus de vérification de plage à la compilation, et les adresses de lignes de balayage sont comparées comme pointeurs non signés lorsqu’un bitmap est contrôlé pour une disposition top-down
Version 3.103.1
Corrigé (Fixed)
- Les métadonnées de document transportées vers XMP conservent leurs caractères non ASCII sur Free Pascal : les titres, auteurs, sujets, mots-clés et noms de créateur parvenant à
SaveAsPdfA,SaveAsPdfUa,SaveAsPdfE,SaveAsPdfX,SaveAsPdfRetSaveAsPdfVTsont désormais convertis via la page de codes des chaînes au lieu d’être copiés octet par octet, de sorte que le paquet de métadonnées reste un UTF-8 valide comme l’exige ISO 19005-1 6.7.2, même lorsque le programme hôte ne s’exécute pas sur une page de codes UTF-8 - L’exportation XFDF, les allers-retours des métadonnées de production et l’analyse XML des listes de confiance utilisent la même conversion correcte en page de codes, de sorte que le texte circulant entre
TBytesetstringne dépend plus de la page de codes de l’hôte
Version 3.103.0
Ajouté (Added)
TPdfEuropeanTrustedListanalyse des listes de confiance européennes authentifiées, recharge des caches à sommes de contrôle via le même authentificateur, accepte des sources de mise à jour fournies par l’appelant, expose les ancres de confiance courantes et évalue des services de signature qualifiés à une date de validation demandéeTPadesTrustValidationOptions.QualifiedTrustEvaluatorapplique une politique de confiance qualifiée hors ligne à chaque signataire validé sans ajouter d’accès réseau au validateur PAdES
Version 3.102.0
Ajouté (Added)
BeginIncrementalSaveetCommitIncrementalSaveajoutent désormais des révisions authentifiées aux documents chiffrés AES-256 tout en préservant la référence/Encryptoriginale, les paramètres de sécurité, les générations d’objets exactes et les octets antérieurs
Modifié (Changed)
- La surcharge de commit de fichier vide désormais durablement et rouvre strictement un fichier auxiliaire du même répertoire, vérifie sa frontière de révision et remplace atomiquement la cible tout en annulant la session après tout échec
Version 3.101.0
Modifié (Changed)
SaveAsRedactedpréserve désormais les portions sûres du texte partiellement intersecté, des tracés rectangulaires et des images alignées sur les axes, puis supprime les noms de ressources qui ne sont plus référencés par les portées de page, de Form XObject, de motif, d’apparence et de ressources imbriquées
Version 3.100.0
Modifié (Changed)
OptimizeImagessélectionne désormais un rééchantillonnage par boîte, bilinéaire, bicubique, Lanczos ou bilevel selon l’échelle, la classe de contenu, le détail mesuré et la qualité demandée par l’appelant, avec un filtrage tenant compte de l’alpha et un budget strict de mémoire de travail
Version 3.99.0
Ajouté (Added)
GraftPdfAcroFormimporte des champs AcroForm hiérarchiques, des widgets, des apparences, un ordre de calcul, des ressources par défaut, des actions et des valeurs via des mappages de pages explicites et des politiques de collisionTPdfCrossDocumentGraftMapréutilise les objets indirects importés par identité de source tout en préservant les cycles, les références partagées, les générations de source exactes et la sémantique transactionnelle d’échec
Version 3.98.0
Ajouté (Added)
TPdfOutlineEditorcrée, déplace, supprime, met en forme, développe et recible des éléments de signets, remappe les destinations explicites via les résultats de plans de pages et ajoute une révision incrémentale vérifiée indépendamment
Version 3.97.0
Ajouté (Added)
TPdfTreeEditorlit, valide, met à jour, équilibre, scinde, fusionne, sérialise et sauvegarde de manière incrémentale des structures NameTree et NumberTree PDF arbitraires tout en préservant les références indirectes réutilisables et les valeurs d’entrées brutes
Version 3.96.0
Ajouté (Added)
TPdfParserResourceBudgetfournit une politique de processus thread-safe unique pour la récursion, les jetons, les objets, les octets décodés, le ratio d’expansion, l’allocation et les échéances dans les analyseurs PDF personnalisés, avec des instantanés immuables par opération et des valeurs par défaut configurables
Version 3.95.0
Modifié (Changed)
ValidatePdfXvalide désormais les dictionnaires PDF/X actifs, les métadonnées, les intents de sortie, les polices, les fonctionnalités interdites, la transparence, les espaces colorimétriques et les boîtes de page via des lectures clairsemées bornées sur des documents non chiffrés à xref valide
Version 3.94.0
Modifié (Changed)
ValidatePdfRvalide désormais les dictionnaires PDF/R actifs, les pages, les filtres d’images, les métadonnées et les marqueurs de pied de page via des lectures clairsemées et fenêtrées bornées sur des documents non chiffrés à xref valide
Version 3.93.0
Modifié (Changed)
ValidatePdfEvalide désormais les dictionnaires PDF/E actifs, les métadonnées, les intents de sortie, les formulaires et les fonctionnalités interdites via des lectures clairsemées bornées sur des documents à xref valide
Version 3.92.0
Modifié (Changed)
ValidatePdfVTeffectue désormais une analyse avancée de portée, de visibilité, d’encapsulation et d’utilisation de Form imbriqués des XObjects récurrents via des lectures clairsemées bornées sur des documents à xref valide
Version 3.91.0
Ajouté (Added)
TPdfSparseDictionaryReaderpeut résoudre la génération active d’un objet et décoder un flux direct sous une limite d’octets fournie par l’appelant
Modifié (Changed)
ValidatePdfVTutilise désormais des lectures clairsemées bornées pour les vérifications de métadonnées PDF/VT, de DPart, d’OutputIntent, d’Info, de page et de dictionnaires ordinaires sur le chemin xref valide normal
Version 3.90.0
Ajouté (Added)
TPdfSparseDictionaryReadergarde un index clairsemé de xref et d’object-stream ouvert pour des lectures répétées et bornées de dictionnaires d’objets indirects
Modifié (Changed)
InjectPdfVTMarkersvalide et préserve désormais une hiérarchie DPart PDF/VT existante avec des lectures de source bornées, tandis que les hiérarchies malformées continuent via la solution de repli de reconstruction
Version 3.89.0
Ajouté (Added)
ReadPdfSparsePageDictionariesrenvoie les identités d’objets de page et des octets de dictionnaire bornés dans l’ordre de l’arbre de pages via l’index d’objets clairsemé
Modifié (Changed)
InjectPdfVTMarkerssynthétise désormais la hiérarchie DPart PDF/VT et ajoute des objets marqueurs avec des lectures de source bornées lorsque le PDF sauvegardé ne contient pas déjà de hiérarchie DPart
Version 3.88.0
Ajouté (Added)
ReadPdfSparseCatalogSubDictlit un sous-dictionnaire de catalogue direct ou indirect via l’index d’objets clairsemé, utilisé par l’injection de marqueurs PDF/UA pourMarkInfoetViewerPreferences
Modifié (Changed)
InjectPdfUaMarkersrésout désormaisMarkInfoetViewerPreferencesdu catalogue via une recherche clairsemée et ajoute la révision PDF/UA avec des lectures de source bornées sur le chemin xref normal
Version 3.87.0
Ajouté (Added)
AppendPdfSparseUpdatediffuse une révision clairsemée sur un PDF sauvegardé : octets de source verbatim, corps d’objets fournis par l’appelant à des décalages enregistrés et un bloc unique xref/trailer incrémental chaîné via/PrevNormalizePageViewRectnormalise deux coins mappés de l’espace de page en rectangle visible borné à la page, ou signale qu’aucune partie de la page n’est visible- L’injection de marqueurs PDF/E synthétise un objet Info neuf avec
/ISO_PDFEVersionlorsque le document source n’a pas de dictionnaire Info
Modifié (Changed)
- L’injection de marqueurs PDF/E, PDF/X et PDF/R résout désormais le catalogue, Info et le trailer via une recherche clairsemée et ajoute des révisions via
AppendPdfSparseUpdateavec des lectures de source bornées sur le chemin xref normal - Le rappel de remplissage de formulaire
FFI_GetPageViewRectsignale désormais la partie de la page réellement visible dans leTPdfViewattaché au lieu de toujours la boîte de page entière, avec repli sur les dimensions de la page pour les documents sans interface TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 3.87.0 de manière cohérente
Corrigé (Fixed)
- Les points de contrôle de segments de tracé exposés depuis la liaison
FPDFPath_GetBezierControlPointsn’étaient jamais remplis : l’export natif ne répond que pour l’index de point final de chaque cubique à trois entrées, si bien que la requête a désormais lieu une fois par courbe et les trois entrées portent les points de contrôle de la courbe
Version 3.86.0
Ajouté (Added)
ReadPdfSparseRevisionInfoexpose des faits bornés de dernière révision, de catalogue, de chiffrement, d’ID de document et de structure étiquetée pour les postprocesseurs de fluxComposePdfSparseUpdateIdpréserve ou dérive des identifiants de document de mise à jour incrémentale sans matérialiser le PDF source complet
Modifié (Changed)
InjectPdfAMarkersrésout désormais le catalogue et le trailer via une recherche clairsemée, copie les entrées volumineuses en morceaux bornés et ajoute la révision PDF/A sans allouer un tableau d’octets de la taille de la source sur le chemin xref normal- L’injection de marqueurs PDF/A préserve le style de sortie classique ou xref-stream, les générations du catalogue et d’Info, les identifiants du trailer, le comportement de refus en cas de chiffrement et les règles de rétrogradation de niveau A
Version 3.85.0
Ajouté (Added)
SanitiseActiveContentPdfStreamaccepte un espace de travail d’élagage appartenant à l’appelant pour un stockage borné personnalisé ou sur disque
Modifié (Changed)
- La désinfection du contenu actif met désormais à jour le catalogue et le trailer via une recherche clairsemée, des fenêtres d’analyse bornées et une copie de plages à taille fixe au lieu de lire le PDF complet dans un seul tableau d’octets sur le chemin xref normal
TPdf.SaveAsSanitisedappliqueSaveMemoryLimitetSaveTemporaryDirectoryà son espace de travail d’élagage et rapporte ses diagnostics de débordement
Corrigé (Fixed)
StripMetadata=Truesupprime désormais une référence/Infodu trailer même lorsque le catalogue n’a pas d’entrée/Metadata
Version 3.84.0
Modifié (Changed)
TPdf.PdfVersionréutilise désormais l’état de l’analyseur PDFium viaFPDF_GetFileVersionau lieu de réanalyser le PDF source complet- Les requêtes de version lisent au plus l’en-tête PDF de huit octets pour empêcher une déclaration de catalogue malformée de dégrader la version effective
Version 3.83.0
Modifié (Changed)
PageLabelledPdfStreamrésout et met à jour désormais le catalogue via des fenêtres de flux bornées et l’index d’objets clairsemé paresseux- La sortie d’étiquettes de page copie les PDF sources volumineux en plages à taille fixe au lieu d’allouer un tableau d’octets complet du document sur le chemin xref normal
Version 3.82.0
Modifié (Changed)
ApplyDefaultOpenActionlit désormais les révisions classiques, xref-stream, hybrides et object-stream via un index d’objets clairsemé paresseux, y compris les documents avec des numéros d’objets très élevés- Le traitement d’OpenAction par défaut utilise des fenêtres à taille fixe et une copie de plages bornée au lieu de charger le PDF complet dans un seul tableau d’octets
Version 3.81.0
Ajouté (Added)
PostProcessSavedPdfaccepte trois espaces de travail positionnables appartenant à l’appelant pour des plafonds de mémoire personnalisés et un traitement sur disque
Modifié (Changed)
TPdf.SaveAsappliqueSaveMemoryLimitetSaveTemporaryDirectoryà chaque espace de travail de post-traitement du PDF sauvegardé et inclut leurs débordements dans les diagnostics- La réparation native incrémentale de xref-stream utilise des fenêtres de fin et de dictionnaire à taille fixe avec une copie de plages bornée au lieu de tableaux d’octets du fichier entier et de réallocations complètes répétées du fichier
Version 3.80.0
Ajouté (Added)
ReadAttachmentMetadatacapture les noms de pièces jointes, les descriptions, les sous-types MIME, les tailles décodées et la lisibilité en une seule énumération native bornéeExtractAttachmentsToStreamsécrit un lot vers des flux appartenant à l’appelant avec des limites d’octets par fichier et globales, des morceaux d’écriture configurables, l’annulation et des résultats par élément
Modifié (Changed)
- L’extraction par lot conserve au plus une pièce jointe décodée dans la mémoire de PDFium Delphi Component au lieu de matérialiser chaque charge utile du lot
Version 3.79.0
Ajouté (Added)
TPdfCacheGovernor,TPdf.CacheBudgetBytes, des requêtes d’utilisation par type et la télémétrie coordonnent la mémoire de cache retenue via un budget global d’octets LRU thread-safe uniqueTPdfTileCacheet le cache de polices système à l’échelle du processus peuvent rejoindre un gouverneur sélectionné par l’appelant avec une comptabilité exacte des bitmaps et des octets de polices
Modifié (Changed)
- Les scènes de pages analysées, les miniatures, les données de structure, les instantanés de texte et les instantanés d’objets de page entrent désormais en concurrence sous un budget
TPdfpar défaut de 256 MiB tout en préservant leurs limites de nombre d’entrées existantes - Les scènes de pages actives restent épinglées jusqu’à la fin du rendu, et les scènes de pages natives opaques utilisent une charge estimée explicite car PDFium n’expose aucune API configurable d’octets de cache total
Version 3.78.0
Ajouté (Added)
TPdfLayoutPagedPlan,TPdfLayoutDocument.BuildPagedPlanetTPdf.GeneratePagedLayoutdiffusent les commandes de mise en page vers un stockage positionnable sélectionné par l’appelant et matérialisent une page à la fois
Modifié (Changed)
- Les mises en page générées volumineuses peuvent déborder les commandes vers un stockage temporaire, conserver un cache de pages LRU configurable, restaurer des segments d’en-tête et de pied non contigus et libérer le texte enveloppé après chaque élément de flux
Version 3.77.0
Ajouté (Added)
TPdfLayoutTable, les lignes, les cellules et les options de tableau ajoutent des tableaux inter-pages avec des pistes de grille résolues, des légendes, des lignes d’en-tête répétées, des lignes de corps fractionnables, des liens et des bordures configurables
Modifié (Changed)
- Les tableaux étiquetés générés préservent une structure Table / TR / TH / TD continue à travers les pages, gardent les groupes s’étendant sur plusieurs lignes atomiques et associent automatiquement les cellules de données aux ID d’en-tête
Version 3.76.0
Ajouté (Added)
TPdfLayoutConstraintsetSetLastItemConstraintsajoutent aux mises en page générées le maintien ensemble, le maintien avec le suivant, les sauts de page physiques avant / après et un contrôle configurable des lignes veuves / orphelines
Modifié (Changed)
BuildPlanréutilise chaque résultat de texte enveloppé pour la prédiction de pagination et l’émission de commandes, empêchant keep-with-next de répéter la mesure du texte
Version 3.75.0
Ajouté (Added)
TPdf.InspectPdfUaUnicodeCoveragerapporte des preuves bornées au niveau objet pour les mappages Unicode directs, les remplacementsActualText, les erreurs de mappage, les valeurs Unicode manquantes et les objets sources non résolus
Modifié (Changed)
TPdf.ValidatePdfUaréutilise désormais un balayage de caractères unique par portée d’objet qui exclut les caractères d’Artifact et générés et empêche l’ActualTextd’un objet texte de masquer le contenu adjacent
Version 3.74.0
Modifié (Changed)
ValidatePdfUaPageContentTaggingetTPdf.ValidatePdfUasignalent désormaispvuaiArtifactInStructureTreelorsqu’un objet de page Artifact est revendiqué par un MCID de l’arbre de structure, y compris les artifacts de pagination basés sur des tracés- Le balayage du contenu de page PDF/UA ne court-circuite désormais qu’après la détection à la fois du contenu réel non étiqueté et du confinement Artifact invalide, préservant la couverture inter-pages sans répéter les vérifications déjà effectuées
Version 3.73.0
Ajouté (Added)
TPdf.InspectPdfUaLanguageCoveragerapporte des preuves bornées d’objets de page et de chaînes de structure pour les passages en langue naturelle, y compris la langue effective, la source de déclaration, le MCID, l’index de structure et des extraits de texteResolvePdfUaEffectiveLanguagerésout les déclarations de langue du contenu marqué, de l’ancêtre de structure le plus proche et du catalogue avec des preuves de validité explicites
Modifié (Changed)
TPdf.ValidatePdfUasignale désormaispvuaiNaturalLanguageUncoveredlorsque du texte non artifact ou des chaînes d’accessibilité n’ont pas de déclaration/Langeffective valide
Version 3.72.0
Ajouté (Added)
TPdf.InspectPdfAMetadatarapporte des preuves d’équivalence typées par champ pour les huit mappages Info vers XMP de l’ISO 19005-1, y compris les valeurs vides explicites et les échecs d’analyse de datesTPdf.NormalizePdfAMetadatarépare uniquement les propriétés XMP mappées incohérentes tout en préservant les espaces de noms sans rapport et les alternatives de langue non par défaut
Modifié (Changed)
TPdf.ValidatePdfAsignale désormaispvaiInfoXmpValueMismatchlorsque les valeurs Info décodées par PDFium diffèrent des valeurs XMP correctement typées après une comparaison de dates Unicode ou tenant compte du fuseau horaire
Version 3.71.0
Ajouté (Added)
InspectPdfVT2sStreamrenvoie des preuves de conditions d’impression pour chaque partie MIME PDF/VT, y compris l’identité d’OutputIntent, la provenance du profil embarqué ou MIME, les hachages ICC et les faits d’en-tête, ainsi que les comptes de pages et d’enregistrements DPartFPdfIccProfilefournit une inspection bornée d’en-tête et de table d’étiquettes ICC avec prise en charge de MD5, SHA-256, espace colorimétrique, version, classe de périphérique, ID de profil et description de profil multilingue
Modifié (Changed)
- La validation PDF/VT-2s résout désormais les pièces jointes MIME ICC antérieures via des spécifications de fichiers URL
DestOutputProfileRefet valideCheckSum,ICCVersion,ProfileCS,ProfileName, la classe de périphérique et les espaces colorimétriques de procédés autorisés - Toutes les parties PDF/VT exigent désormais un OutputIntent
GTS_PDFXfaisant autorité, un conditionnement de profil embarqué ou externe approprié à la base PDF/X et la même condition d’impression caractérisée, tandis que les pièces jointes PDF/X uniquement restent hors des comparaisons PDF/VT - La validation PDF/VT-2 de fichier unique reconnaît désormais
DestOutputProfileRefcomme un profil de destination externe au lieu de le signaler comme manquant
Version 3.70.0
Modifié (Changed)
- La validation PDF/VT vérifie désormais
GTS_Scope,GTS_XID,GTS_EnvetGTS_Encapsulateddirectement sur chaque XObject au lieu de laisser des dictionnaires proches ou imbriqués satisfaire les exigences d’indices - La portée
Recordrésout désormaisRecordLeveldepuis le dictionnaire indirectDPartRoot, tandis que la portéeStreamest rejetée dans les fichiers PDF/VT-1 - Les flux de contenu décodés de pages et de Form XObjects valident désormais la visibilité des ressources
Do, les comptes d’occurrencesSingleUseet la propriété des enregistrements destinataires via les ressources héritées effectives et la hiérarchie DPart - Les XObjects encapsulés valident désormais la forme booléenne, la portée recommandée, l’
IntentImage, les groupes de transparence isolés, les espaces colorimétriques de fusion et les dépendances de contenu optionnel directes ou imbriquées
Version 3.69.0
Modifié (Changed)
- La validation PAdES rejette désormais les entrées dupliquées
Contents,ByteRange,SubFilter,FilteretTypeau lieu d’accepter la valeur sélectionnée par l’analyseur - La découverte de signatures utilise désormais un balayage linéaire de dictionnaires conscient des flux, reconnaît les jetons de noms PDF échappés et ne peut pas être détournée par un dictionnaire imbriqué fermé placé avant le vrai
ByteRange - La validation du
ByteRangede signature exige désormais que l’intervalle exclu corresponde exactement au jeton hexadécimalContentsdirect tout en autorisant toujours des révisions incrémentales ultérieures - Les dictionnaires de signature exigent désormais un
Filterde valeur nom unique et appliquent des combinaisons cohérentes de type et de sous-filtreSigouDocTimeStamp
Version 3.68.0
Ajouté (Added)
TPdf.BuildPadesEvidenceReportcorrèle les faits de signature PDFium, la politique CMS, les statuts de confiance et d’horodatage, les hachages de chemin de certificats, la couverture DSS/VRI et les décisions de révisions ultérieures pour chaque signatureTPadesEvidenceReportexporte des preuves multi-signatures bornées en JSON ou CSV et rapporte la télémétrie de source, de signature, de DSS, de révision et de troncature
Modifié (Changed)
- La validation de confiance PAdES enregistre désormais les identités SHA-256 du certificat du signataire et du chemin de certificats Windows ordonné tout en préservant la validation hors ligne par défaut
- La génération de preuves réutilise une capture unique retenue des octets de la source à travers les analyses de conformité, de confiance, de DSS et de révision au lieu de copier le PDF original dans un nouveau flux pour chaque étape
Version 3.67.0
Ajouté (Added)
TPadesSignatureFieldOptionscrée des noms de champs de signature configurables, des valeurs de germe requises, des listes de motifs et d’attestations légales, des certificats de signataires acceptables et des verrouillages de champs- La signature locale et distante peut créer des signatures d’approbation ou de certification avec les transformations ISO 32000-1
FieldMDPetDocMDP
Modifié (Changed)
- Les signatures de certification préservent les permissions existantes du catalogue tout en enregistrant la nouvelle signature via
/Perms /DocMDP
Version 3.66.0
Ajouté (Added)
RenderPageBandedToStreamécrit une sortie PNG ou TIFF directement dans un flux de l’appelant avec une hauteur de bande configurable, une compression PNG et des limites d’octets de sortieRenderPageBandedToEncoderalimente des codecs définis par l’appelant avec des bandes de pages séquentielles et renvoie la télémétrie de bande, de ligne, de mémoire, d’achèvement et de sortie
Corrigé (Fixed)
RenderPageBandedpréserve désormais la géométrie de rendu pleine page et rogne chaque bande demandée au lieu de remettre à l’échelle la page complète dans chaque bande
Version 3.65.0
Ajouté (Added)
TPdfParallelRenderReportrapporte désormais la taille de la source, la mémoire capturée maximale, le backend de stockage et le type de support partagé
Modifié (Changed)
RenderPagesParallelpartage la source capturée via une mémoire immuable, un mappage de fichier en lecture seule ou un accès aléatoireFPDF_LoadCustomDocumentau lieu d’allouer un second tableau d’octets du document complet- Les sources de rendu parallèle débordées restent sous
SaveMemoryLimitet ne nécessitent plus de recharger le PDF complet dans la mémoire adressable du processus
Version 3.64.0
Ajouté (Added)
ImportImposeddispose désormais d’une surcharge renvoyantTPdfImpositionExecutionReportavec les comptes d’import natif, de sources uniques, d’emplacements vides, de modèles XObject, d’objets de formulaire, de générations de contenu et de pages de sortie
Modifié (Changed)
- L’imposition à géométrie nulle envoie chaque page source ordonnée via un seul appel
FPDF_ImportPagesByIndexavant l’insertion de pages blanches et la composition N-up native - L’imposition à géométrie personnalisée réutilise un modèle XObject natif par page source unique, lit des métriques de pages en cache sans modifier la page source et préalloue un stockage de plan exact
Version 3.63.0
Ajouté (Added)
BeginPageObjectEditTransaction,CommitPageObjectEditTransactionetRollbackPageObjectEditTransactionregroupent les mutations natives d’objets de page en un lot atomique par portée de page avec annulation par instantané validéPageObjectEditTransactionStatusrapporte la page liée, l’état modifié, le nombre de mutations réussies et le nombre de générations de contenu
Modifié (Changed)
- Les lots d’objets validés invoquent désormais
FPDFPage_GenerateContentune seule fois au lieu d’une fois par mutation d’insertion, de suppression, de transformation, de propriété, de marque, d’objet d’annotation ou d’apparence - La sauvegarde, les changements de page, la suppression de pages, les transactions d’édition imbriquées et les mises à jour natives échouées d’insertion ou d’annotation sont rejetées avant que le contenu différé puisse être perdu
Version 3.62.0
Ajouté (Added)
ReadPageObjectsSnapshotcapture des faits d’objets de page appartenant à l’appelant avec des budgets d’objets, de tracés, de rognage, de marques, de texte, de chaînes et de délaiPageObjectsSnapshotfournit une réutilisation LRU consciente des révisions avec une capacité configurable et une télémétrie d’occupation, de réussites et d’échecs
Modifié (Changed)
PageComplexityréutilise désormais l’instantané immuable d’objets de page au lieu de répéter les requêtes natives d’énumération d’objets, de transparence, de tracés et d’images
Version 3.61.0
Ajouté (Added)
TPdfexpose désormais un LRU de miniatures unifié pour les aperçus embarqués et rendus avec des plafonds d’entrées et d’octets configurables ainsi qu’une télémétrie de réussites, d’échecs, d’évictions, d’occupation et de révisionsRenderPageThumbnailaccepte la rotation, les options de rendu, la couleur d’arrière-plan etTPdfColorSchemetout en préservant le contrat de bitmap appartenant à l’appelant
Modifié (Changed)
- L’extraction et le rendu répétés de miniatures réutilisent les résultats PDFium natifs via des clés de révision, de page, de source, de taille, de rotation, d’indicateurs, d’arrière-plan et de jeu de couleurs, y compris l’absence en cache de miniatures embarquées optionnelles
TPdfThumbnailViewsynchronise son cache de bitmaps de pages visibles avec les révisions de miniatures du document, si bien que les éditions ne peuvent laisser des aperçus périmés
Version 3.60.0
Ajouté (Added)
ReadTextPageSnapshotcapture l’Unicode, les mappages UTF-16, la géométrie et le style des caractères et les métadonnées normalisées d’objets texte en une seule passe avec des budgets explicites de caractères, d’objets, de noms de polices et de délaiTextPageSnapshotfournit des copies profondes appartenant à l’appelant via un LRU configurable conscient des révisions avec une télémétrie de capacité, de comptage, de réussites et d’échecs
Modifié (Changed)
GetStructuredTextetGetTextInReadingOrderen disposition physique réutilisent désormais le même instantané de texte et appliquent un tri géométrique O(n log n)
Corrigé (Fixed)
- Les petits caches d’instantanés de texte et de structure évincent désormais la page la plus ancienne tout en stockant les nouvelles données sous l’index de page demandé, empêchant l’aliasing inter-pages du cache
Version 3.59.0
Ajouté (Added)
LifecycleActionPolicysélectionne l’exécution automatique désactivée, explicite uniquement ou compatible des actions de cycle de vie de documents et de pages PDFExecuteDocumentLifecycleActionexpose les actions JavaScript, d’ouverture, de fermeture, de sauvegarde et d’impression du document, tandis queExecutePageLifecycleActionexécute les actions d’ouverture et de fermeture de page sans modifierPageNumber
Modifié (Changed)
- Les chargements de pages sans interface reçoivent désormais les mêmes actions automatiques d’ouverture et de fermeture de page que les chargements pilotés par le visualiseur, avec des pages temporaires réutilisées ou libérées sous le verrou de rendu
Version 3.58.0
Ajouté (Added)
ReadStructureElementsetVisitStructureElementsfournissent un parcours itératif de structures étiquetées avec des budgets explicites de profondeur, d’éléments, d’attributs et de temps ainsi qu’un statut d’achèvement détailléStructureElementsForPageexpose des instantanés de pages indexés à partir de un sans modifierPageNumber, adossés à un cache LRU configurable conscient des révisions avec une télémétrie de réussites, d’échecs et de comptage
Modifié (Changed)
- Les consommateurs d’accessibilité, de reflux, de validation et de visualiseur réutilisent désormais des instantanés de structure appartenant à l’appelant jusqu’à ce qu’une édition pertinente du document ou de la page les invalide
Version 3.57.0
Ajouté (Added)
- Les rappels natifs complets d’hôte de formulaire fournissent désormais des handles de pages paresseux sûrs pour le cycle de vie, le routage de curseur de la vue d’interaction, la notification de changement de valeur, les rectangles de texte sélectionné, les événements URI et les événements de destination GoTo
FormHostCallbacksCompleterapporte la disponibilité des rappels, tandis queFormSelectionRectsetClearFormSelectionRectsexposent une géométrie de sélection bornée dans l’espace de page
Corrigé (Fixed)
- Les rappels de page courante XFA traduisent désormais correctement entre les index de pages PDFium à base zéro et le
PageNumberdu composant à base un - Les rappels URI AcroForm et XFA préservent désormais les octets URI bruts et exigent une approbation explicite de l’hôte avant tout lancement externe
Version 3.56.0
Ajouté (Added)
- Les instantanés indexés de
PageMetricsexposent les dimensions, la rotation, l’étiquette, la transparence et les cinq boîtes de page standard d’une page sans modifier la page active
Modifié (Changed)
- Les lectures répétées de métadonnées de page réutilisent un cache d’instantanés natif automatiquement invalidé, réduisant les ouvertures de pages dans les charges de travail de miniatures, de préflight et d’analyse de documents
Version 3.55.0
Ajouté (Added)
- L’inspection de tracés expose les points de contrôle cubiques de Bézier exacts lorsque le build PDFium chargé fournit
FPDFPath_GetBezierControlPoints, avec une sonde de capacités optionnelle pour les DLL plus anciennes FormFieldTypeAtPoint,TPdfView.FormFieldTypeAtet les propriétés indexéesFontFlagsexposent les faits natifs de formulaires et de polices sans handles brutsTPdf.Signaturesrenvoie tous les contenus de signatures natifs, ByteRanges, sous-filtres, motifs, horodatages et permissions dans un seul instantané appartenant à l’appelant
Modifié (Changed)
- Les vérifications de présence de champs de formulaire utilisent désormais le test de contact natif direct de points au lieu d’ouvrir et de fermer des handles d’annotations
Corrigé (Fixed)
- La validation PDF/E-1 autorise désormais les champs AcroForm ordinaires, les fichiers embarqués et les annotations FileAttachment tout en signalant précisément
/XFAet/NeedAppearances trueAcroForm de premier niveau, y compris les valeurs indirectes et object-stream
Version 3.54.0
Ajouté (Added)
FPdfProductionajoute la sélection d’images multi-codec mesurée, les backends de traitement de couleur et de police, les chemins SVG, les plans de remplacement stylisé, les mises à jour transactionnelles de paquets XFA, les vecteurs de codes-barres, les modèles Portfolio et l’extraction RichMedia sûreFPdfStandardsExecutionajoute la conversion de mesure et GeoPDF, la réparation transactionnelle PDF/A, les plans PDF/UA-2, les profils multicolores externes, les preuves historiques DSS et VRI, les requêtes DPart, les faits PDF/E approfondis et les bandes PDF/R à mémoire fixeTPdf.ImportImposedcompose des plans N-up et livret bornés via les chemins N-up natifs ou de XObjects de page avec une géométrie exacte de gouttière, fond perdu et dérive, tandis queTPdf.CompareWithrapporte des différences sémantiques, géométriques et de pixels tolérantes- La signature PAdES prend désormais en charge les validateurs de chaîne enfichables et les fournisseurs HSM, le MAC PDF attaché à la signature,
cms-algorithm-protectionet les documents de politique de signature hors ligne
Modifié (Changed)
- Le moteur de mise en page accepte du HTML et du Markdown bornés, s’écoule sur plusieurs colonnes et résout des pistes de grille fixes, automatiques et fractionnaires
- Les allers-retours XFDF conservent désormais les champs multivaleurs et de texte enrichi, les popups, les actions, les destinations, les superpositions d’apparence, les espaces de noms personnalisés et l’état de présence explicite
Version 3.53.0
Ajouté (Added)
ConfigurePdfLibraryfournit une configuration immuable du moteur de rendu natif, des polices, de V8, de Brotli, du chemin de polices utilisateur et du bac à sable avant le premier chargement de PDFium- Les attributs de structure natifs, les relations d’annotation, les pièces jointes de fichier d’annotation, les valeurs de dictionnaire typées, les politiques de focus, les requêtes d’ordre z de lien et de formulaire et les diagnostics de correspondance TTF par défaut sont disponibles via des API de haut niveau bornées
TPdfView.ReplaceFormTextAndKeepSelectionpréserve la sélection active à travers des modifications répétées et les événements de relâchement du bouton droit atteignent désormais le moteur de formulaire natif
Modifié (Changed)
- L’heure déterministe du document utilise désormais une conversion de calendrier UTC stable en plus de l’époque fixe, produisant les mêmes métadonnées dans chaque fuseau horaire de l’hôte
- Les écritures de chaîne de pièce jointe valident le résultat natif et encodent les clés de dictionnaire en UTF-8
Version 3.52.0
Ajouté (Added)
TPdf.GetImageObjectRenderedBitmaprenvoie le résultat rendu d’un objet image avec sa matrice courante, son espace colorimétrique, ses masques et son état de rendu appliquésTPdf.TextObjectGlyphWidth,TPdf.TextObjectFontSizeetTPdf.SetTextObjectFontSizeexposent la mesure native des glyphes et l’édition exacte de la taille de police des objets texteTPdf.TransformPageObjectClipPath,TPdf.DetachFormObjectChild,TPdf.SharePageObjectMarketTPdf.IsAnnotationObjectSubtypeSupportedajoutent l’édition précise des objets de contenu et l’inspection des capacités
Version 3.51.0
Corrigé (Fixed)
- Huit membres de
TPdfannoncés dans des notes de version antérieures étaient déclarés dans la section privée et ne pouvaient pas être appelés depuis l’extérieur de l’unitéPDFium; ils sont désormais publics, comme documenté :LinkAtPoint,GetTextRenderMode,GetTextObjectRenderedBitmap,IsAnnotationSubtypeSupported,ChooseRenderFlags,AttachmentHasKey,GetAttachmentStringValueetSetAttachmentStringValue
Modifié (Changed)
- La documentation de référence en anglais couvre désormais tous les membres publics de
TPdfet deTPdfView: 88 membres qui n’avaient pas de page de référence en ont reçu une, et les pages de classe, l’index de navigation et la référence de l’API les répertorient tous - Les pages de référence qui pointaient auparavant vers une page partagée renvoient désormais vers la page du membre lui-même, si bien qu’un résultat de recherche ouvre la description de l’API recherchée
- La référence de l’API documente les énumérations et les enregistrements accessibles depuis les signatures publiques, notamment les types de rapport de chargement et de flux, les types de texte, de police et d’OCR, les types de générateur de mise en page, les types de validation PAdES, les types de lot et de validation, et les types de rendu parallèle
Version 3.50.0
Ajouté (Added)
- Chaque démo graphique s’ouvre désormais avec un contenu prêt à l’emploi au lieu d’un formulaire vide : les démos de visionneuse et de laboratoire chargent un document d’exemple généré, les démos de rapport produisent un rapport complet au démarrage, et les démos de traitement pré-génèrent des entrées d’exemple afin que l’action principale s’exécute en un clic
MultiPageViewer,SplitViewetFontPropertiesgénèrent des documents d’exemple en mémoire au démarrage (un aperçu de six pages, deux documents de comparaison côte à côte et une page multi-polices à inspecter en un clic)- Les démos de traitement telles que
MergePDF,BatchExport,SplitPDF,ExtractText,PDFtoJpg,PrintPDFetPrintPreferencespré-génèrent des PDF d’exemple à côté de l’exécutable et pré-remplissent leurs contrôles d’entrée, avec une régénération idempotente qui n’écrase jamais les fichiers existants FormFilletExtractImageschargent automatiquement les fichiers d’exemple livrés dans leurs dossiers de démo,ImageToPDFgénère deux bitmaps d’exemple,WatermarkStamppré-construit ses tampons d’exemple, etXfdfLabs’ouvre sur un document généré portant des annotations de texte et de surlignage
Modifié (Changed)
CreatePDFgénère désormaisSample.pdfà côté de l’exécutable au démarrage sans afficher de boîte de dialogue, si bien que le document existe dès l’ouverture de la démoTPdf.AboutInfoet les métadonnées de l’installateur signalent désormais Version 3.50.0 de manière cohérente
Version 3.49.0
Ajouté (Added)
FORM_GetTextDirectionetFORM_SetTextDirectiondes binaires PDFium mis à jour sont désormais liés, maintenant la couche de liaison dynamique à une couverture complète des 472 exports PDFiumTPdf.FocusedFormFieldTextDirectionetTPdf.SetFocusedFormFieldTextDirectionexposent la direction de texte en mémoire du widget focalisé via le nouvel enumTPdfFormTextDirection(ftdUnknown,ftdAuto,ftdLTR,ftdRTL), avec des équivalentsTPdfViewqui repeignent la scène de page après un changement de direction
Modifié (Changed)
FPDF_LIBRARY_CONFIGreflète désormais la disposition de la version 6 de PDFium avec le champ expérimentalm_BrotliEnabledpour les binaires compilés avecPDF_ENABLE_BROTLITPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur signalent désormais Version 3.49.0 de manière cohérente
Version 3.48.0
Ajouté (Added)
- La démo
PDFViewergénère maintenant au démarrage un document de démonstration de six pages en mémoire via l’API de création, si bien que la visionneuse s’ouvre avec du contenu rendu, sans fichier d’exemple sur disque - Un panneau de vignettes bâti sur
TPdfThumbnailViewoffre des aperçus de pages cliquables à côté de l’arborescence des signets dans les trois portages de démonstration - La recherche de la visionneuse met maintenant en évidence chaque correspondance sur la page courante via
HighlightSearchTextau lieu d’un seul rectangle de résultat, et signale le nombre de correspondances dans la barre d’état - Les boutons de barre d’outils
Nightet2-Upen un clic basculent le mode de rendu duotone nocturne et le mode d’affichage double page
Modifié (Changed)
- La sélection de texte dans la visionneuse utilise désormais le moteur de sélection intégré de
TPdfView, avec sélection de mot par double-clic, sélection par glissement et raccourcis presse-papiers, en remplacement du code de sélection écrit à la main - Les pages sont rendues avec une ombre portée et un défilement fluide pour une expérience de lecture moderne
TPdf.AboutInfoet les métadonnées de l’installateur signalent désormais Version 3.48.0 de manière cohérente
Version 3.47.0
Ajouté (Added)
FPdfBenchmarkexécute des corpus PDF bornés avec échauffement et passes mesurées configurables, limites de pages et de pixels, annulation coopérative, et un statut de réussite, d’échec ou d’ignoré par casTPdfBenchmarkReportenregistre les tailles d’entrée et de sauvegarde en octets, la latence de chargement et de première page, le débit de rendu, les temps de sauvegarde et de réouverture, l’ensemble de travail maximal échantillonné, les empreintes SHA-256 sémantiques et pixel, la stabilité des exécutions répétées, les portes d’empreintes attendues et l’équivalence indépendante de réouverture- Les rapports de benchmark exportent un CSV protégé contre les formules et un JSON structuré pour la CI, la qualification des versions et le suivi longitudinal des performances
GetSkiaRenderCapabilities,RenderPageSkiaetRenderPageSkiaByIndexexposent le rendu natif optionnel des pages et des formulaires par Skia avec réutilisation du cache des pages analysées et sans exigence stricte d’export DLL- Un ABI d’impression versionné et conditionné aux capacités expose l’énumération exacte des plaques de tons directs, le rendu des plaques, la détection de la surimpression et l’aperçu de surimpression lorsque le module PDFium chargé les fournit
Corrigé (Fixed)
- Les builds PDFium sans
PDF_USE_SKIAse chargent désormais normalement au lieu d’échouer parce que les exports Skia expérimentaux sont absents
Modifié (Changed)
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 3.47.0 de manière cohérente
Version 3.46.0
Ajouté (Added)
ValidatePdfRvérifie désormais le contenu de page purement raster, la géométrie des bandes, les modèles de couleur, la résolution effective, les paramètres de compression, les métadonnées requises et les profils PDF 2.0 chiffrés via des options de validation configurablesBuildPdfARepairPlantransforme les preuves de validation en étapes de remédiation ordonnées par dépendances, avec classes de sûreté, gardes d’impact sur les signatures et sortie JSONBuildPdfXProductionPreflightrapporte les boîtes de page, les polices embarquées, les intents de sortie, les colorants, la transparence, la surimpression, les séparations, la résolution des images et l’aptitude à la production sans décoder les charges utiles d’images- La validation de structure PDF/UA-2 vérifie désormais la propriété des fichiers associés, l’ordre de lecture, les descriptions, les relations et la découvabilité
Modifié (Changed)
TAssociateFile.Description,TPdf.ImageInfoetTPdf.PageComplexityexposent les métadonnées nécessaires aux flux de travail des fichiers associés et du préflight de productionTPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 3.46.0 de manière cohérente
Version 3.45.0
Ajouté (Added)
TPdfXmpPacketanalyse, modifie, clone et sérialise du XMP conscient des espaces de noms avec espaces de noms inconnus, conteneurs RDF typés, valeurs URI et ressource, qualificateurs, alternatives de langue, enveloppes de paquet et remplissage préservéTPdf.ReadXmpPacketetSaveAsWithXmpPacketexposent la lecture de métadonnées de haut niveau et une sortie atomique, les modifications de documents signés exigeant une autorisation explicite
Sécurité (Security)
- Le lecteur XML borné rejette les DTD et les entités externes et limite les octets du paquet, l’imbrication, les nœuds, les attributs et les références numériques de caractères
Modifié (Changed)
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 3.45.0 de manière cohérente
Version 3.44.0
Ajouté (Added)
TPdfValidationRuleRegistryenregistre des clauses de profil avec sévérité, dépendances, conseils de réparation, preuves et prédicats intégrés ou personnalisésTPdfValidationBudgetetTPdfValidationExecutionContextbornent règles, échecs, objets, récursion, preuves UTF-8, mémoire réservée, temps écoulé, échec rapide et annulation coopérativeValidatePdfFilesParallelvalide des fichiers via des documents de travail isolés tout en préservant l’ordre d’entrée et en agrégeant les distributions de problèmes, temps, échecs, annulations et erreurs de chargement
Modifié (Changed)
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 3.44.0 de manière cohérente
Version 3.43.0
Ajouté (Added)
TPdfStructureElementporte désormais les faits d’espace de noms, de mappage de rôle d’espace de noms, de référence, de fichier associé, d’annotation, de widget, d’étiquette et d’apparence pour la validation sémantique PDF/UA-2ValidatePdfUa2StructureElementset ses validateurs dédiés vérifient les espaces de noms et le confinement ISO/TS 32005, les grilles de tableaux bornées, les annotations, les formulaires, les associations Formula/MathML, les fichiers associés, les racines de document, FENote, les listes, les références de TOC, les titres et les légendes sans chargerpdfium.dllClassifyPdfUaNamespaceidentifie les espaces de noms de structure PDF 1.7, PDF 2.0, MathML, ARIA, DPUB, personnalisés et manquantsPdfUa2StructureHasIssuefournit une requête à problème unique sûre pour C++Builder sans renvoyer un ensemble Pascal par valeur
Modifié (Changed)
ValidatePdfUaStructureElementsapplique automatiquement le nouveau jeu de règles sémantiques pourpuc2tout en préservant le chemin de règles PDF/UA-1TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 3.43.0 de manière cohérente
Version 3.42.0
Ajouté (Added)
TPdfUaSaveOptions.PdfUa2crée une sortie PDF/UA-2 avecpdfuaid:part2,pdfuaid:rev2024 et une version de catalogue effective PDF 2.0ValidatePdfUadétectepuc2et signale les métadonnées de révision manquantes, les fichiers non PDF 2.0, les configurations de contenu optionnel sans nom, les annotations dépréciées et les titres H génériques
Modifié (Changed)
- La validation PDF/UA sélectionne désormais des règles d’ordre de tabulation, de XFA et de titres spécifiques au profil pour PDF/UA-1 et PDF/UA-2
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 3.42.0 de manière cohérente
Version 3.41.0
Ajouté (Added)
SetPageObjectMarkParamajoute ou remplace un paramètre entier, réel, chaîne ou blob sur une entrée de contenu marqué existante sans remplacer la marqueRemovePageObjectMarkParamsupprime une propriété sélectionnée tout en préservant le nom de la marque et chaque propriété sans rapport
Modifié (Changed)
- Les nombres non entiers de contenu marqué font désormais un aller-retour en tant que
pmpFloatau lieu d’être tronqués dans des instantanés entiers - Un échec de validation de paramètre pendant
AddPageObjectMarksupprime la marque native partiellement créée TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 3.41.0 de manière cohérente
Version 3.40.0
Ajouté (Added)
ConfigureSystemFontProviderinstalle un mappeur de polices d’application avant le démarrage de PDFium et fournit des octets TrueType ou OpenType validés pour les polices de document manquantes ou substituéesTPdfSystemFontPolicycontrôle la substitution de fontes, le repli natif, les limites d’octets par police et un cache borné de requêtesGetSystemFontProviderStatisticsrapporte l’activité de mappage, de cache, de repli, de rejet, de table de données et de handles vivants
Modifié (Changed)
- Les rappels du fournisseur exposent la fonte, la graisse, le style, le jeu de caractères et le pitch demandés par PDFium tout en gardant les échecs de rappel à l’intérieur de la frontière native
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 3.40.0 de manière cohérente
Version 3.39.0
Ajouté (Added)
AddCidType2Textembarque des données TrueType fournies par l’appelant avec une géométrie CID-vers-GID explicite par glyphe et des mappages CID-vers-UnicodeTPdfCidFontOptionssélectionne l’embarquement complet, le sous-ensemble préféré avec repli ou le sous-ensemble requis et configure des budgets bornés de polices, de glyphes et d’UnicodeTPdfCidFontReportrapporte les décisions de sous-ensembles, les tailles en octets, les glyphes uniques, l’état d’embarquement, le texte attendu, le texte extrait et l’intégrité de l’extraction
Modifié (Changed)
- Le sous-ensemblement TrueType préserve les identifiants de glyphes demandés, rejette les sorties non sûres et annule chaque objet de page inséré si la vérification de mappage ou d’extraction échoue
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 3.39.0 de manière cohérente
Version 3.38.0
Ajouté (Added)
BuildReflowDocumentcrée un arbre de nœuds sémantiques borné et réutilisable à partir de la structure Tagged PDF ou d’une inférence de mise en page physique sur une plage de pages sélectionnéeTPdfReflowDocument.ToHtmlémet des titres, paragraphes, listes, figures, légendes, sections de page et tableaux adaptatifs et échappés avec une sémantique d’en-têtes et de portéeTPdfReflowOptionscontrôle la détection de tableaux, les sections de page, la géométrie, le CSS, les sauts de ligne, la plage de pages, l’annulation et les budgets de ressources
Modifié (Changed)
- Le contenu des tableaux remplace les blocs de paragraphes chevauchants pendant le reflow, et l’état de page active est restauré après succès, échec ou annulation
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 3.38.0 de manière cohérente
Version 3.37.0
Ajouté (Added)
ApplyOcrSearchLayereffectue le rendu des pages sélectionnées via PDFium et envoie des pixels BGRA bornés de haut en bas à unIPdfOcrProviderfourni par l’appelantTPdfOcrWordporte le texte Unicode, la confiance et des quadrilatères en espace pixel qui sont projetés via la géométrie native de la page en texte invisible interrogeableTPdfOcrReportenregistre l’achèvement par page, les ignorations de texte existant, les échecs, l’annulation, les pixels rendus et les mots acceptés ou rejetés
Modifié (Changed)
- L’insertion OCR préserve les flux d’images de numérisation originaux, filtre les résultats mal formés ou de faible confiance, valide une seule fois par page et restaure la page active
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 3.37.0 de manière cohérente
Version 3.36.0
Ajouté (Added)
ExtractTablesdétecte les tableaux à filets et alignés sur les espaces à partir de la géométrie native des mots et des filets transformésTPdfTablerapporte les lignes, colonnes, fusions de cellules, limites de page, cellules d’en-tête, mode de détection, confiance et sortie directe CSV ou JSONExtractDocumentTablesanalyse chaque page sous des budgets partagés et marque les tableaux correspondants qui se poursuivent au-delà des limites de pages
Modifié (Changed)
- L’extraction de tableaux applique des limites configurables de mots, de filets, de cellules et de tableaux, et restaure la page active après les analyses au niveau du document
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 3.36.0 de manière cohérente
Version 3.35.0
Ajouté (Added)
GenerateTaggedLayoutcrée un nouveau document de mise en page sémantique avec contenu marqué natif, un arbre de structure Document, les mappages ParentTree et IDTree, et les métadonnées de langue du documentTPdfLayoutSemanticsmodélise les titres, sections, listes, figures, légendes, tableaux, associations d’en-têtes, spans, textes alternatifs, textes réels, langues et identifiants d’élémentsTPdfLayoutDocument.AddLinkémet des annotations URI Link et associe chaque annotation à son élément de structure Link via les mappages OBJR et StructParent
Modifié (Changed)
- Le texte de mise en page adopte par défaut la sémantique de paragraphe, tandis que les en-têtes, pieds de page, filets, images et formulaires réutilisables sont des artefacts par défaut sauf balisage explicite
- La validation du plan sémantique rejette les identifiants en double, les parents manquants, les cycles, les contenances de listes ou de tableaux invalides, les figures sans texte de remplacement et les identifiants d’en-têtes de tableau non résolus avant l’émission du document
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 3.35.0 de manière cohérente
Version 3.34.0
Ajouté (Added)
TPdf.AddShapedTextécrit des suites de glyphes RTL, bidi, contextuels et ligatures via la mise en forme native du système et les API PDFium de polices CID Type 2ShapePdfTextetTPdfUniscribeTextShaperexposent les identifiants de glyphes positionnés, les avancées, les décalages, les clusters sources, les positions de suites visuelles et les niveaux bidi sans modifier un document
Modifié (Changed)
- Les cartes ToUnicode générées couvrent chaque glyphe mis en forme tandis que
ActualTextstocke la chaîne Unicode logique d’origine pour les consommateurs d’extraction et d’accessibilité conformes - Les chaînes de contenu marqué avec marques d’ordre des octets UTF-16 se décodent désormais correctement via
PageObjectMarks TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 3.34.0 de manière cohérente
Version 3.33.0
Ajouté (Added)
TPdfLayoutCachedNodeconstruit le contenu de mise en page sous-classé à la première utilisation et prend en charge des placements répétés à l’échelle viaAddCachedNodeTPdfLayoutPlanrapporte les accès et échecs du cache de mesure, les placements de nœuds en cache et les XObjects natifs réutilisés
Modifié (Changed)
BuildPlanréutilise les plans correspondants par contraintes complètes de page, contenu, police, style, source et identités de mesureur sans répéter la mesure du texteGenerateLayoutconvertit chaque nœud en cache unique en un XObject lié à la destination et crée des objets Form légers pour chaque placementTPdf.AboutInfo, les métadonnées du paquet et les métadonnées de l’installateur rapportent désormais Version 3.33.0 de manière cohérente
Version 3.32.0
Ajouté (Added)
TPdfLayoutDocumentconstruit du texte replié, des espacements, des filets, des images, des XObjects de page réutilisables, des sauts de page explicites, des en-têtes et des pieds de page dans un plan de pages mesuréGenerateLayoutpagine la mise en page complète avant d’ajouter atomiquement des pages et objets de page natifs, avec des références{page}et{pages}stables
Modifié (Changed)
TPdf.AboutInfo, les métadonnées du paquet et les métadonnées de l’installateur rapportent désormais Version 3.32.0 de manière cohérente
Version 3.31.0
Ajouté (Added)
- Les constructeurs de
TPdfPagePlandécrivent des opérations de page de suppression, déplacement, insertion, scission et fusion sans les appliquer ValidatePagePlanrenvoie la correspondance exacte des anciennes pages vers les nouvelles et inventorie les signets, destinations nommées, étiquettes de pages, champs de formulaire, pages balisées, fonctionnalités importées et signatures affectés
Sécurité (Security)
- Les plans qui laisseraient des cibles de navigation pendantes ou modifieraient le contenu signé sans autorisation explicite sont rejetés avant toute opération native de page
Modifié (Changed)
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 3.31.0 de manière cohérente
Version 3.30.0
Ajouté (Added)
SaveRecoverySnapshotécrit un paquet de récupération à somme de contrôle et à taille bornées contenant l’empreinte source et le journal d’édition de document vérifiéRestoreRecoverySnapshotrejoue un paquet de récupération uniquement lorsque sa somme de contrôle, sa chaîne de journal, son empreinte source et son empreinte récupérée correspondent toutesEnableRecoveryAutosaverafraîchit atomiquement un fichier de récupération explicite après chaque validation, annulation ou rétablissement de changement sans réécrire le PDF source
Modifié (Changed)
InspectRecoverySnapshotrapporte la source de récupération, les empreintes, le nombre d’entrées, la position et le stockage borné sans appliquer le paquetImportEditJournalet la restauration de récupération exigent désormais une autorisationAllowSignedDocumentexplicite avant d’appliquer des modifications à un PDF signé- Le stockage des paquets de récupération utilise le magasin à accès aléatoire borné configuré et un remplacement en écriture directe dans le même répertoire pour les grands journaux et des mises à jour d’autosauvegarde résistantes aux plantages
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 3.30.0 de manière cohérente
Version 3.29.0
Ajouté (Added)
BeginEditTransaction,CommitEditTransactionetRollbackEditTransactionregroupent des modifications natives arbitraires du document en transactions atomiquesUndoEditetRedoEditappliquent des deltas inverses et directs vérifiés par SHA-256 sur les modifications de pages, d’objets, d’annotations, de pièces jointes et de métadonnéesExportEditJournaletImportEditJournalpersistent des deltas portables bornés avec validation d’empreinte source et de chaîne d’empreintes pour un rejeu ultérieur
Modifié (Changed)
- Les instantanés de transaction utilisent une sortie native reproductible afin que les validations sans changement restent vides même lorsque les sauvegardes ordinaires de PDFium contiennent des identifiants ou horodatages non déterministes
- Les validations échouées et les rejeux de journal invalides restaurent atomiquement le document chargeable précédent, tandis que le nombre d’entrées, les octets stockés et la taille des instantanés restent sous les limites configurées par l’appelant
- Les PDF signés exigent une autorisation
AllowSignedDocumentexplicite avant le début d’une transaction d’édition de document TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 3.29.0 de manière cohérente
Version 3.28.0
Ajouté (Added)
TPdf.InspectOptionalContenténumère les calques OCG, les configurations par défaut et alternatives, les états d’usage View/Print/Export, les métadonnées de zoom et de langue, les calques verrouillés, les tableaux d’ordre, les groupes radio, les politiques OCMD, les expressions de visibilité et l’état effectif de renduTPdf.SaveAsOptionalContentConfiguredécrit une copie strictement vérifiée avec les états de calques choisis par l’appelant pour un usage et une configuration donnés
Modifié (Changed)
- La sortie d’états de calques met désormais à jour les tableaux
/ONet/OFFde la configuration et les dictionnaires d’état Usage des OCG afin que PDFium applique la visibilité demandée via son contexte de rendu natif - Les écritures de configuration rejettent les groupes inconnus, les changements de calques verrouillés, les conflits de groupes radio, les fichiers intermédiaires chiffrés et les fichiers signés sans autorisation explicite, et suppriment par défaut les règles d’état automatique pour garder le résultat sélectionné déterministe
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 3.28.0 de manière cohérente
Version 3.27.0
Ajouté (Added)
TPdf.RenderPageByIndexeffectue le rendu de n’importe quelle page en base un à une taille en pixels exacte sans changer la page d’édition active ni déclencher d’événements de changement de pagePageSceneCacheCapacity,PageSceneCacheCountetClearPageSceneCacheexposent le contrôle et les diagnostics bornés du cache de scènes
Modifié (Changed)
- Les rendus de pages indexés, les miniatures rendues et l’extraction de miniatures embarquées réutilisent désormais l’état des pages PDFium analysées via un cache LRU à huit entrées par défaut
- Les entrées de scène sont invalidées à l’activation de page, à l’édition, aux changements d’arborescence de pages, aux rappels d’état de formulaire, au nettoyage explicite et au démontage du document, les rendus en cours étant conservés en sécurité jusqu’à leur libération
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 3.27.0 de manière cohérente
Version 3.26.0
Ajouté (Added)
TPadesSignatureAlgorithmInforapporte chaque OID d’empreinte, de signature, de clé publique et de courbe nommée du signataire CMS avec son état de politique d’algorithme évalué indépendammentInspectPadesSignatureAlgorithmetEvaluatePadesSignatureAlgorithmreconnaissent les profils P-256, P-384, P-521, brainpoolP256r1, brainpoolP384r1, brainpoolP512r1, Ed25519 et Ed448
Sécurité (Security)
- La validation PAdES rejette désormais les désaccords d’empreinte et de courbe elliptique, les OID de signature ECDSA en désaccord avec l’empreinte CMS, les paramètres EC sans nom, les paramètres Ed25519 et les longueurs de sortie Ed448 SHAKE256 autres que 512 bits
- La vérification CMS native reste la source de validité cryptographique, tandis que les algorithmes indisponibles et les courbes non reconnues sont rapportés comme
pcsUnsupportedau lieu d’être traités comme des signatures invalides TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 3.26.0 de manière cohérente
Version 3.25.0
Ajouté (Added)
TPdf.ExportObjectGraphexporte les objets classiques, xref-stream et object-stream actifs sous forme de JSON typé borné avec dictionnaires explicites, tableaux, chaînes, noms, valeurs scalaires, références indirectes, comptes d’octets de flux et empreintes SHA-256 optionnelles de fluxTPdf.SaveAsObjectGraphPatcheddéfinit ou supprime des valeurs de dictionnaires de premier niveau vérifiées par schéma via des valeurs de correctif null, booléen, entier, réel, nom, chaîne de texte et référence indirecte typées
Sécurité (Security)
- L’export de graphe d’objets applique des budgets d’objets, de récursion, de chaînes et d’octets de sortie, tandis que la correction valide chaque opération avant livraison et rejette les références pendantes, les opérations en double, les entrées chiffrées, les changements de filtre ou de longueur de flux protégés et les documents signés sauf autorisation explicite
- Les correctifs de graphe d’objets sont placés dans une révision incrémentale, rematérialisés pour vérification xref, strictement chargés via PDFium, puis copiés ou renommés atomiquement une fois toutes les vérifications réussies
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 3.25.0 de manière cohérente
Version 3.24.0
Ajouté (Added)
TPdf.ValidatePadesTrustvérifie chaque signature détachée découvrable contre leByteRangeoriginal exact, évalue la liaison signing-certificate-v2 et la confiance système Windows courante, et rapporte des états indépendants de signature, de chaîne, de révocation et d’horodatageTPdf.ValidatePadesTrustAsynccapture la source originale chargée avant la distribution, rapporte la progression par étapes pour l’analyse, la cryptographie, la construction de chaînes, AIA, OCSP, CRL et le travail d’horodatage RFC 3161, et prend en charge l’annulation coopérativeTPadesTrustValidationOptionssélectionne la confiance hors ligne ou en ligne, la vérification optionnelle de révocation et d’horodatage, un délai borné de récupération d’URL, un jeton d’annulation et un rappel de progression
Sécurité (Security)
- Les horodatages de signature et les jetons Document Time-stamp valident désormais leur empreinte de message SHA-256, leur signature CMS attachée, leur chaîne TSA et leur état de révocation optionnel indépendamment de la signature ordinaire du document
- La validation de confiance ne hache jamais une copie réenregistrée par PDFium, utilise par défaut la récupération de certificats limitée au cache hors ligne, et rapporte les états non pris en charge ou indéterminés au lieu de traiter une confiance ou des preuves de révocation natives indisponibles comme valides
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 3.24.0 de manière cohérente
Version 3.23.0
Ajouté (Added)
TPdf.RenewPadesArchiveTimestampetRenewPadesArchiveTimestampToStreamajoutent un nouveau Document Time-stamp RFC 3161 à une chaîne de signatures PAdES existante sans modifier aucun octet historiqueTPadesArchiveTimestampOptionscontrôle l’accès TSA, le nonce, la capacité de jeton réservée et un rafraîchissement DSS complet optionnel, tandis queTPadesArchiveTimestampReportenregistre les niveaux source et résultat, les longueurs de chaînes, les longueurs en octets et l’identité de l’horodatage renvoyé
Corrigé (Fixed)
- La sortie PAdES B-LTA nouvelle et renouvelée déclare ESIC ExtensionLevel 2, tandis que la validation B-LT n’exige plus le niveau 2 sauf si un Document Time-stamp est présent
Sécurité (Security)
- Le renouvellement hache les octets chargés originaux exacts plus toute mise à jour DSS demandée, rejette les sources chiffrées ou incomplètes, valide le résultat B-LTA découvrable avant d’écrire la sortie et place la sortie de fichier avant remplacement
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 3.23.0 de manière cohérente
Version 3.22.0
Ajouté (Added)
TPdf.AnalyzeSignatureRevisionsreconstruit la chaîne originale de révisions incrémentales et renvoie les changements d’objets par signature classés selon les permissions DocMDP et FieldMDPTPadesRevisionAnalysisReportdistingue les mises à jour autorisées de formulaires, d’annotations, de signatures et de matériel de validation des changements interdits de pages ou de document, des cas non résolus et des définitions fantômes suspectes
Sécurité (Security)
- L’analyse de révisions détecte les définitions d’objets non référencées, les redéfinitions d’objets de signature, le contenu actif, les chaînes de révisions mal formées et les objets compressés non résolus tout en appliquant des budgets bornés de révisions, d’objets et de changements
- L’analyse utilise toujours le fichier original chargé, le tampon mémoire, le flux personnalisé ou la source progressive achevée plutôt que des octets réécrits par PDFium
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 3.22.0 de manière cohérente
Version 3.21.0
Ajouté (Added)
TPdf.PreparePadesRemoteSignaturecrée un espace réservé de signature détachée à largeur fixe et renvoie une requête persistante contenant l’empreinte SHA-256 du document, leByteRangeexact, les coordonnées de réservation et l’empreinte du PDF préparéTPdf.CompletePadesRemoteSignatureachève les sessions de signature HSM, cloud ou interrompues après validation de la requête persistée et du CMS renvoyéTPdf.SavePadesRemoteSigningRequestetTPdf.LoadPadesRemoteSigningRequestfournissent un format de session binaire versionné stable pour les frontières de processus et de machines
Sécurité (Security)
- L’achèvement rejette les PDF préparés modifiés, les coordonnées
ByteRangealtérées, les espaces réservés non vides réutilisés, les valeurs CMS surdimensionnées, les formes SignedData non prises en charge, les attributs signing-certificate-v2 manquants et les empreintes de message CMS qui ne correspondent pas au document préparé TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 3.21.0 de manière cohérente
Version 3.20.0
Ajouté (Added)
TPadesDssOptions.Vrisécrit un dictionnaire indirect/Type /VRIpar signature, clé par le SHA-1 majuscule de la valeur/Contentsdécodée complète, remplissage inclusTPadesDssVrisélectionne le matériel de certificats, OCSP et CRL via des index validés, tandis que la signature PAdES B-LT et B-LTA crée désormais automatiquement le VRI de la nouvelle signature
Modifié (Changed)
- Les certificats DSS, réponses OCSP et CRL sont dédupliqués par empreinte de contenu avec ordre stable de première occurrence, vérifications de collisions d’octets exacts et remappage des références VRI avant toute écriture d’octets de destination
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 3.20.0 de manière cohérente
Version 3.19.0
Ajouté (Added)
TPdf.GetStructuredTextconvertit la page courante en enregistments réutilisables de blocs, lignes et spans stylés tout en préservant les index de caractères sources, les scalaires Unicode, la géométrie, les noms de polices, les tailles, les graisses et les angles de texteTPdfStructuredTextOptionssélectionne l’ordre du flux de contenu ou de la mise en page physique, l’enrichissement optionnel de polices et de sémantique, et un budget maximal de caractères en échec fermé- Les fragments Tagged PDF et de contenu lisible heuristique enrichissent les blocs avec le type de structure, le niveau de titre, la langue, la source et l’identité de l’élément de structure, tandis que le texte alternatif des Figures sans correspondance reste représenté
Modifié (Changed)
- L’extraction par mise en page physique utilise désormais un ordonnancement de caractères en O(n log n), des tampons de lignes et de spans à croissance géométrique, le regroupement en lignes et colonnes, la construction d’Unicode en tampon et le cache de polices des objets texte adjacents non nuls pour des performances prévisibles sur les grandes pages
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 3.19.0 de manière cohérente
Version 3.18.0
Sécurité (Security)
TPdf.SaveAsRedactedapplique chaque rectangle/Redactà un instantané isolé du document, supprime chaque objet de page de premier niveau intersectant et peint un rectangle de remplacement opaque sans modifier le document chargé- La sortie expurgée supprime les annotations d’expurgation, supprime optionnellement les autres annotations intersectantes, efface les pièces jointes natives embarquées et retire
/AFdu catalogue, le contenu actif, les formulaires, les métadonnées et les objets de révisions antérieures inaccessibles TPdfRedactionOptionscontrôle la couleur de remplacement, la suppression des annotations chevauchantes et un budget d’analyse d’objets de page en échec fermé, tandis queTPdfRedactionReportenregistre chaque suppression et métrique de sortieTPdfSanitiseOptions.StripAssociatedFilessupprime désormais par défaut les références de fichiers associés au niveau du catalogue
Modifié (Changed)
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 3.18.0 de manière cohérente
Version 3.17.0
Ajouté (Added)
TPdf.RenderPagesParalleleffectue le rendu simultané de requêtes de pages en base un tandis que chaque worker possède un module PDFium, un document et un état de page chargés indépendamment, issus d’un seul instantané de document capturéTPdfParallelRenderOptionscontrôle le DPI, le nombre de workers, la rotation, les indicateurs natifs de rendu, la couleur d’arrière-plan, les limites de pixels par page et les limites agrégées de sortie conservéeTPdfParallelRenderReportpréserve l’ordre des requêtes et renvoie des tampons BGRA ou RGBA de haut en bas possédés par l’appelant avec succès, annulation, échec, dimensions, chronométrage et détails de diagnostic par page- Le rendu worker progressif interroge
IPdfCancellationTokenentre les blocs natifs, tandis que les requêtes invalides et les échecs de budget restent isolés dans leurs résultats correspondants TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 3.17.0 de manière cohérente
Version 3.16.0
Ajouté (Added)
TPdfEncryptionRevision.erR7ajoute la sortie ISO/TS 32003 AES-256-GCM avec/V 6,/R 7,/CFM /AESV4et l’extension de développeur PDF 2.0 requise- Chaque chaîne et flux chiffrés reçoivent un IV unique de 96 bits, un texte chiffré de longueur inchangée et une étiquette d’authentification de 128 bits, tandis que
EncryptMetadata = Falsepréserve les octets du flux de métadonnées DecryptAesGcmDocumentBytesvalide les mots de passe utilisateur ou propriétaire, les permissions chiffrées, les données PDF MAC autonomes optionnelles et chaque étiquette GCM avant de renvoyer des octets en clair compatibles PDFium- La sortie AESV4 peut être combinée avec
TPdfEncryptOptions.EnableIntegrityProtectionafin que l’authentification GCM par objet et la protection ISO/TS 32004 PDF MAC du document entier coexistent - Le chiffrement utilise désormais des entrées de table de références croisées classiques valides au lieu d’interpréter du texte en forme d’objet dans les données de flux comme des objets indirects
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 3.16.0 de manière cohérente
Version 3.15.0
Ajouté (Added)
TPdfEncryptOptions.EnableIntegrityProtectionécrit des codes d’authentification PDF MAC autonomes ISO/TS 32004 pour les documents AES-256 du Standard Security Handler révisions 5 et 6TPdf.ValidatePdfMacvérifie les octets source originaux exacts, le/ByteRangestrict couvrant le EOF, leAuthenticatedDataCMS, la clé de fichier dérivée du mot de passe, les attributs authentifiés, la clé MAC enveloppée et la valeur HMACFPdfHmacajoute HMAC-SHA256 et HKDF-SHA256, tandis queFPdfAesajoute les primitives RFC 3394 AES-256 Key Wrap et de désenveloppement authentifiéTPdfMacValidationResultdistingue les codes d’authentification valides, absents, invalides et non pris en charge avec un texte de diagnosticTPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 3.15.0 de manière cohérente
Version 3.14.0
Ajouté (Added)
TPdf.ValidatePadesvérifie désormais les signatures CMS détachées contre les segments/ByteRangeoriginaux exacts sous Windows, y compris les attributs signés et la valeur de signatureTPadesValidationResultexpose l’état d’intégrité agrégé et les états par signature de ByteRange, CMS,signing-certificate-v2, confiance système, révocation et horodatage sans confondre des preuves non prises en charge ou non vérifiées avec une signature invalide- La liaison du certificat signataire est vérifiée avec SHA-256, les chaînes de certificats utilisent l’évaluation de confiance système Windows limitée au cache, et les codes d’erreur natifs restent disponibles pour le diagnostic
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 3.14.0 de manière cohérente
Version 3.13.1
Corrigé (Fixed)
TPdf.ValidatePadesinspecte désormais le fichier original, la mémoire tamponnée ou les octets de flux personnalisé au lieu d’une copie réenregistrée par PDFium qui pouvait invalider des décalages ou perdre des dictionnaires de signature- Les vérifications PAdES
/ByteRangeacceptent désormais les signatures couvrant une révision PDF complète antérieure suivie de mises à jour incrémentales valides, tout en validant les plages Document Time-stamp TPadesValidationResult.SourceStatusdistingue la validation de la source originale d’une entrée progressive indisponible ou incomplète, et les prédicats de conformité rejettent les résultats sans octets originauxTPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 3.13.1 de manière cohérente
Version 3.13.0
Ajouté (Added)
FPdfSha3fournit des primitives SHA3-256, SHA3-384, SHA3-512 et SHAKE256 sans dépendance pour ISO/TS 32001 et les travaux cryptographiques PDF 2.x associés- Les contextes incrémentaux absorbent des entrées arbitrairement fractionnées, tandis que SHAKE256 prend en charge des appels de sortie répétés et une sortie qui franchit les limites de débit de l’éponge
- Des aides en un coup pour tableaux d’octets et hexadécimal minuscule complètent l’API de flux, avec validation explicite du cycle de vie et des tailles sur Delphi, C++Builder et Lazarus
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 3.13.0 de manière cohérente
Version 3.12.0
Ajouté (Added)
TPdf.ImportFDFimporte des données de formulaire FDF depuis des fichiers ou des flux et applique les valeurs analysées via le chemin existant de champs de widgetsFdfImportFromStreametFdfImportFromFileanalysent les champs hiérarchiques directs ou indirects, les chaînes PDF littérales et hexadécimales, PDFDocEncoding, le texte Unicode, les valeurs de nom et les valeurs vides explicites sous des budgets de ressources bornés- L’export FDF écrit désormais les noms et valeurs de champs non ASCII sous forme de chaînes de texte UTF-16BE conformes aux normes et échappe sûrement les noms de fichiers sources
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 3.12.0 de manière cohérente
Version 3.11.0
Ajouté (Added)
TPdf.DetectPageSkeweffectue le rendu de la page courante à bas DPI et détecte l’angle d’inclinaison en projetant les pixels sombres sur des angles de rotation candidats, renvoyant l’angle qui maximise la variance des sommes de lignes (alignement des lignes de texte) avec une précision d’environ 0,1 degréTPdfSkewReportexpose l’angle détecté, la confiance et les dimensions de l’échantillonTPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 3.11.0 de manière cohérente
Version 3.10.0
Ajouté (Added)
TPdf.GetTextInReadingOrderextrait le texte de la page courante en ordre brut du flux de contenu ou en ordre de mise en page physique (de haut en bas, de gauche à droite) viaFPDFText_GetCharBox+ extraction de caractères triés par position, si bien que le texte multi-colonnes et réordonné visuellement se lit naturellement- L’énumération
TPdfReadingOrderchoisit entreroContentOrderetroPhysicalLayout TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 3.10.0 de manière cohérente
Version 3.09.0
Ajouté (Added)
TPdfImageOptimizeOptions.PreserveBilevelignore les images binaires à 1 bit (ImageMask / numérisations de tracés) pendantOptimizeImagesafin que le sous-échantillonnage au plus proche voisin ne détruise pas leurs bords netsTPdfImageOptimizeOptions.MinDimensionignore les images plus petites que le seuil (typiquement des icônes ou des éléments décoratifs qui ne bénéficient pas d’une réduction supplémentaire)TPdfImageOptimizeOptions.Defaultfournit le point de départ recommandé (cible 150 DPI, ratio 1.5, images binaires préservées, dimension minimale 8)TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 3.09.0 de manière cohérente
Version 3.08.0
Ajouté (Added)
TPdfTileCachefournit un cache LRU borné de tuiles de pages rendues, clé par révision de document, page, zoom, rotation, indicateurs de rendu et rectangle de périphérique, si bien que les tuiles inchangées ne sont pas re-rendues lors des repeints et que les tuiles périmées d’une sauvegarde antérieure sont évincées automatiquementTTileKeyexpose la clé de cache composite avec une fabriqueCreatestatique et un comparateurEqualsTPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 3.08.0 de manière cohérente
Version 3.07.0
Ajouté (Added)
TPdf.GetAnnotationFontColoretTPdf.SetAnnotationFontColorenveloppent lesFPDFAnnot_GetFontColoretFPDFAnnot_SetFontColorprécédemment liés mais inutilisés, exposant la lecture et l’écriture de la couleur de texte des widgets pour l’édition de champs de formulaire sans toucher directement au dictionnaire d’annotationTPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 3.07.0 de manière cohérente
Version 3.06.0
Ajouté (Added)
TPdf.RenderPageBandedeffectue le rendu de la page courante en bandes horizontales via un rappel, si bien que les posters et les pages d’ingénierie peuvent être exportés sans jamais allouer un bitmap de destination complet — chaque bande est rendue dans unTBitmapfraîchement créé à la hauteur de bande demandée et libérée après le retour du rappelTPdfBandCallbackexpose le contrat par bande (index de bande, décalage y supérieur, bitmap) avec un retour booléen qui permet aux appelants d’annuler tôt le rendu en bandesTPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 3.06.0 de manière cohérente
Version 3.05.0
Ajouté (Added)
TPdf.RenderPageProgressiveWithColorSchemepilote la boucle de rendu progressif native avec un schéma de couleurs pour malvoyants viaFPDF_RenderPageBitmapWithColorScheme_Start, permettant aux appelants de remplacer les couleurs de remplissage / contour des tracés et de remplissage / contour du texte pour l’accessibilité tout en conservant la boucle Continue sensible à l’annulationTPdfColorSchemeexpose les quatre champs de remplacementTColoravec unDefaultqui délègue aux couleurs intégrées de PDFium lorsque tous les champs sontclDefaultTPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 3.05.0 de manière cohérente
Version 3.04.0
Ajouté (Added)
TPdf.ExportFDFsérialise les valeurs de champs de formulaire sous forme de document FDF (ISO 32000-1 §12.7.11) à côté du chemin XFDF existant, en réutilisant le même modèle de donnéesTXfdfFieldsi bien que les appelants collectent les champs une fois et émettent l’un ou l’autre formatFdfExportToStreametFdfExportToFiledansFPdfXfdfexposent le sérialiseur FDF de bas niveau pour les appelants qui construisent des collections de champs indépendamment d’unTPdfchargéTPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 3.04.0 de manière cohérente
Version 3.03.0
Ajouté (Added)
TPdf.SaveAsSanitisedécrit une copie propre à révision unique qui retire le contenu actif du catalogue (/OpenAction,/AAdu catalogue,/Names,/AcroForm,/Metadata) puis élague les objets inaccessibles afin que les corps JavaScript, actions et pièces jointes orphelins disparaissent du corps du fichierTPdfSanitiseOptionsexpose des contrôles de retrait indépendants par vecteur plus une passe optionnelle d’élagage d’accessibilité ;TPdfSanitiseReportenregistre le nombre d’entrées retirées, le nombre d’objets élagués, les comptes d’octets et toute erreurTPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 3.03.0 de manière cohérente
Version 3.02.0
Ajouté (Added)
TPdf.SaveAsPageLabelledécrit une copie PDF complète dont l’arbre de nombres/PageLabelsdu catalogue est remplacé par les plages fournies, appliquant les styles de numérotation décimal, romain majuscule / minuscule et lettres majuscules / minuscules avec des chaînes de préfixe optionnelles et des numéros de départ par ISO 32000-1 §12.4.2TPdfPageLabelRange,TPdfPageLabelRanges,TPdfPageLabelStyleetTPdfPageLabelReportexposent le modèle de plages, l’énumération de styles et les comptes d’octets et de plages par sauvegarde- Les entrées
/PageLabelsexistantes du catalogue sont détectées et rejetées sauf siReplaceExisting=Trueest passé, auquel cas l’ancienne entrée est retirée avant l’injection des nouvelles plages TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 3.02.0 de manière cohérente
Version 3.01.0
Ajouté (Added)
TPdf.FlattenPageRotationincorpore le/Rotatecourant de chaque page dans le flux de contenu, les boîtes de page et les rectangles d’annotations, puis réinitialise/Rotateà 0 — en enveloppantFPDFPageObj_TransformF+FPDFAnnot_GetRect/SetRect+FPDFPage_SetMediaBox/SetCropBox+FPDFPage_SetRotationafin que la mise en page visuelle soit préservée sans dépendre de l’indicateur d’affichage de rotationTPdfFlattenRotationOptionsexpose les contrôles de transformation d’annotations par page, d’échange de boîtes de page et de mise à jour automatique ;TPdfFlattenRotationReportenregistre les pages traitées, ignorées et échouées ainsi que le total d’objets et d’annotations transformésTPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 3.01.0 de manière cohérente
Version 3.00.0
Ajouté (Added)
TPdf.StampPagesFromPdfapplique une page source en tant que calque ou fond de Form XObject positionné, mis à l’échelle et éventuellement pivoté sur une ou plusieurs pages cibles, en enveloppantCreateXObjectFromPage+FPDFPageObj_SetMatrix+FPDFPageObj_SetBlendMode+FPDFPage_InsertObjectAtIndexavec des politiques explicites de boîtes de page, d’ancrage, de marge, d’échelle, de rotation, de fusion et d’ordre zTPdfOverlayOptionsetTPdfOverlayReportexposent les contrôles de placement, de transformation, de fusion et d’ordre z plus les comptes par page de pages estampillées, échouées et ignoréesTPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 3.00.0 de manière cohérente
Version 2.99.0
Ajouté (Added)
TPdf.RefreshAppearancerégénère sélectivement le flux d’apparence d’un seul widget viaFPDFAnnot_SetAP, évitant une reconstructionNeedAppearancesde la page entièreTPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.99.0 de manière cohérente
Version 2.98.0
Ajouté (Added)
TPdfView.MouseDownroute désormais les événements du bouton droit vers le moteur natif de remplissage de formulaire viaFORM_OnRButtonDown, permettant les menus contextuels et les interactions de widgets au clic droit- Les éléments 78 (mappage des annotations de lien), 82 (présentation des widgets) et 83 (modèle d’attributs de structure) de la carte de routage sont confirmés comme déjà complets grâce à l’infrastructure existante
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.98.0 de manière cohérente
Version 2.97.0
Ajouté (Added)
TPdf.SetDeterministicTimeetTPdf.RestoreActualTimepermettent aux tests et aux builds reproductibles d’injecter une heure fixe de création, de modification et courante via les rappels natifs pris en chargeTPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.97.0 de manière cohérente
Version 2.96.0
Ajouté (Added)
TPdf.GetWidgetAdditionalActionJavaScriptlit le JavaScript d’actions additionnelles d’un widget pour un déclencheur d’événement donné viaFPDFAnnot_GetFormAdditionalActionJavaScriptsans exécuter aucun scriptTPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.96.0 de manière cohérente
Version 2.95.0
Ajouté (Added)
TPdf.GetObjectTextextrait le texte Unicode d’un objet de page texte viaFPDFTextObj_GetTextpour une édition de contenu précise et des diagnostics d’encodageTPdf.GetObjectsByTyperenvoie les index de tous les objets de page correspondant à une catégorie (texte, tracé, image, formulaire, dégradé) pour une sortie sélective par catégorieTPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.95.0 de manière cohérente
Version 2.94.0
Ajouté (Added)
TPdf.AttachmentHasKey,GetAttachmentStringValueetSetAttachmentStringValuelisent, écrivent et sondent des valeurs d’extension de file-spec personnalisées sur les pièces jointes embarquéesTPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.94.0 de manière cohérente
Version 2.93.0
Ajouté (Added)
TPdf.InsertObjectAtIndexinsère un objet de page à une position demandée de la pile viaFPDFPage_InsertObjectAtIndexau lieu de toujours ajouter à la finTPdf.UpdateAnnotationObjectvalide un objet d’apparence d’annotation modifié viaFPDFAnnot_UpdateObjectafin que les changements d’objets de page possédés par des annotations persistent de manière fiableTPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.93.0 de manière cohérente
Version 2.92.0
Ajouté (Added)
TPdf.InsertClipPathcrée un chemin de détourage rectangulaire et l’insère dans la page courante via les chemins natifsFPDF_CreateClipPathetFPDFPage_InsertClipPath, complétant l’inspecteurPageObjectClipPathexistantTPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.92.0 de manière cohérente
Version 2.91.0
Ajouté (Added)
TPdf.GetPageComplexityanalyse la page courante et rapporte les comptes d’objets image, tracé et texte, plus le total de segments de tracés, le total de pixels d’images et la présence de transparence pour la planification du renduTPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.91.0 de manière cohérente
Version 2.90.0
Ajouté (Added)
TPdf.IsAnnotationSubtypeSupporteddemande à la DLL PDFium chargée quels sous-types d’annotations elle prend en charge avant l’éditionTPdf.ChooseRenderFlagssélectionne des indicateurs natifs de rendu (trame, cache d’images limité) à partir de l’échelle finale et de la taille de destination pour un sous-échantillonnage adaptatif des imagesTPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.90.0 de manière cohérente
Version 2.89.0
Ajouté (Added)
TPdf.GetTextRenderModeexpose le mode natif de rendu de texte (remplissage, contour, détourage) d’un objet de page texte pour l’audit de créationTPdf.GetTextObjectRenderedBitmapeffectue le rendu d’un seul objet texte vers un bitmap isolé via le chemin natifFPDFTextObj_GetRenderedBitmapTPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.89.0 de manière cohérente
Version 2.88.0
Ajouté (Added)
TPdf.GetThumbnailretombe désormais sur le rendu d’une image de remplacement lorsque la page n’a pas de miniature embarquée, implémentant la préférence miniature embarquée d’abordTPdf.LinkAtPointindique si un lien natif existe à une coordonnée de l’espace page viaFPDFLink_GetLinkAtPointplutôt que des analyses limitées aux rectanglesTPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.88.0 de manière cohérente
Version 2.87.0
Ajouté (Added)
TPdf.AuditActiveContentrenvoie un instantanéTPdfActiveContentAuditdu nombre d’actions JavaScript, du nombre de fichiers embarqués, du nombre de signatures, du type de formulaire XFA et des permissions du document sans exécuter aucun script ni actionTPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.87.0 de manière cohérente
Version 2.86.0
Ajouté (Added)
TPdf.GetFeatureInventoryanalyse chaque page une fois et renvoie un enregistrement unifié des comptes d’objets texte, tracé, image, Form XObject et dégradé, aux côtés des faits de pièces jointes, signatures, type de formulaire, permissions et version PDFTPdfFeatureInventoryagrège en un seul instantané des faits à l’échelle du document qui exigeaient auparavant des appels de propriétés séparésTPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.86.0 de manière cohérente
Version 2.85.0
Ajouté (Added)
TPdf.SaveAsReproducibleréécrit le document afin que deux sauvegardes du même état en mémoire produisent une sortie identique octet par octet- Les horodatages non déterministes de
/Info(/CreationDate,/ModDate) sont retirés et le/IDsource (dérivé d’octets dépendant de l’horloge) est omis, tandis que l’ordre et la génération des objets restent stables TPdfReproducibleReportrapporte les comptes d’objets conservés et élagués, plus le nombre d’entrées d’horodatage retiréesTPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.85.0 de manière cohérente
Version 2.84.0
Ajouté (Added)
TPdf.SaveAsInlineImagesExternalisedréécrit le document en extrayant chaque image en ligneBI/ID/EIvers un XObject d’image réutilisable et en remplaçant le bloc en ligne par un opérateur/ImN Do- Les abréviations du dictionnaire d’images en ligne (
/W,/H,/BPC,/CS,/F, valeurs d’espaces couleur et valeurs de filtres) sont développées vers leurs noms complets d’image XObject afin que l’objet extrait soit conforme aux normes - Le dictionnaire
/Resources /XObjectde la page est mis à jour avec les nouvelles références XObject, et le flux de contenu réécrit est compressé en Flate TPdfInlineImageExternaliseReportrapporte les comptes externalisés, ignorés et échoués, plus le nombre de XObjects créésTPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.84.0 de manière cohérente
Version 2.83.0
Ajouté (Added)
TPdf.SaveAsFlateRecompressedréécrit le document et réencode les fluxFlateDecodeéligibles à la compression maximale, ne remplaçant un flux que lorsque l’économie d’octets mesurée dépasse un seuil défini par l’appelantTPdfFlateRecompressOptionssélectionne une économie minimale en octets et un ratio minimal d’économie afin que les flux déjà optimaux restent intactsTPdfFlateRecompressReportrapporte les comptes de flux recompressés, ignorés et échoués, avec les totaux d’octets originaux et recompressés- Les numéros et générations d’objets restent stables ; seules les charges utiles recompressées et leurs valeurs
/Lengthdirectes changent, si bien que chaque référence croisée survivante reste valide TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.83.0 de manière cohérente
Version 2.82.0
Ajouté (Added)
TPdf.OptimizeImagesparcourt chaque objet d’image de page et sous-échantillonne ceux dont le DPI effectif de placement dépasse une cible choisie par l’appelant, puis valide chaque page touchée via le générateur de contenu natifTPdfImageOptimizeOptionssélectionne le DPI cible et un ratio minimal afin que seules les images réellement sur-échantillonnées soient réencodéesTPdfImageOptimizeReportrapporte les comptes d’images optimisées, ignorées et échouées avec un message d’échec structuré- Le sous-échantillonnage utilise une passe au plus proche voisin sur le tampon bitmap natif de PDFium, préservant le format, le stride et le canal alpha de la source, et
FPDFImageObj_SetBitmapréencode le survivant TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.82.0 de manière cohérente
Version 2.81.0
Ajouté (Added)
TPdf.SaveAsDeduplicatedréécrit le document en une seule révision propre qui fusionne les polices, images et Form XObjects compatibles sur un représentant partagé unique- Une empreinte de contenu récursive combine chaque dictionnaire de ressources, son sous-graphe complet accessible et sa charge utile de flux brute, si bien que les doublons ne fusionnent que lorsque leur contenu entier est identique
- Chaque référence croisée vers un doublon fusionné est réécrite vers le représentant survivant, tandis que la table de références croisées classique reconstruite garde les numéros d’objets stables
TPdfDedupReportrapporte les comptes d’objets conservés et élagués, plus les comptes par catégorie de polices, images et Form XObjects fusionnésTPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.81.0 de manière cohérente
Version 2.80.0
Ajouté (Added)
TPdf.SaveAsReachableréécrit le document en une seule révision propre qui ne conserve que les objets indirects accessibles depuis le catalogue et le dictionnaire /Info du trailerTPdfPruneReportrapporte les comptes d’objets indirects conservés et élagués avec les tailles en octets source et sortie, et des raisons d’échec structurées pour les entrées chiffrées ou mal formées- Les objets orphelins inaccessibles laissés par des mises à jour incrémentales, des fusions de pages ou des sauvegardes réparées sont balayés, tandis que la table de références croisées classique et le trailer reconstruits préservent
/Root,/Infoet/IDsans renumérotation TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.80.0 de manière cohérente
Version 2.79.0
Ajouté (Added)
TPdf.CreateDocumentSearchcrée une recherche à l’échelle du document, en avant ou en arrière, qui renvoie une correspondance à la fois sans construire un index de texte du document completTPdfDocumentSearchResultrapporte la page en base un, la plage de caractères, le texte correspondant et les rectangles en espace page pour chaque résultat- Les sessions de recherche acceptent
IPdfCancellationToken, ne conservent que les handles PDFium de page et de texte courants, et se terminent en sécurité à la fermeture du document TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.79.0 de manière cohérente
Version 2.78.0
Modifié (Changed)
TPdfRangeRequestSchedulerpréempte désormais les transferts chevauchants de priorité inférieure afin que les indications PDFium critiques pour les pages n’attendent pas derrière des téléchargements en arrière-plan- Les octets épars disponibles en externe annulent les transferts actifs redondants, tandis que les rappels de transport remplacés ou en double renvoient False sans publier de couverture périmée
- La promotion de priorité préserve les historiques de tentatives indépendants, et la préemption du transport ne consomme plus le budget de tentatives des fins de plages non concernées
TPdfRangeRequestStatistics.SupersededRequestCountrapporte le travail de transport déplacé par des indications de priorité supérieure ou une couverture fournie en externeTPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.78.0 de manière cohérente
Version 2.77.0
Ajouté (Added)
TPdf.SaveAsNormalizedContentécrit un contenu de page à la syntaxe normalisée vers un flux ou un fichier remplacé atomiquement, et rapporte les comptes de pages normalisées, ignorées et coalescéesNormalizePdfContentSequencefournit une normalisation autonome bornée de jetons pour les séquences décodées de flux de contenu
Modifié (Changed)
- Les tableaux
/Contentsde page peuvent désormais être coalescés en un seul flux tout en préservant les chaînes, noms, charges utiles d’images en ligne, opérateurs inconnus et état graphique inter-flux - Les jetons mal formés, les portées d’état déséquilibrées, les filtres non pris en charge, les entrées chiffrées et les réécritures de documents signés ont des politiques explicites et un rapport d’état structuré
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.77.0 de manière cohérente
Version 2.76.0
Ajouté (Added)
TPdfStreamInspectorinventorie des objets de flux PDF physiques arbitraires et rapporte les décalages d’objets, les longueurs brutes, les chaînes de filtres, DecodeParms, les marqueurs de fichiers externes, l’état de chiffrement et les chemins natifs d’images ou de pièces jointesCopyRawDatacopie des charges utiles encodées complètes ou des fenêtres d’octets validées, tandis queDecodeDataapplique ASCIIHex, ASCII85, LZW, Flate, RunLength, les prédicteurs TIFF 8 bits et PNG dans l’ordre déclaréTPdfStreamInspectOptionsborne les ressources source, brutes, décodées, de dictionnaire, de comptage de flux et de ratio d’expansion, avec des rapports structurés pour les limites, les données mal formées, les codecs non pris en charge, le chiffrement et les échecs d’écriture
Modifié (Changed)
- La résolution de longueur de flux expose désormais les étendues exactes des valeurs
/Lengthdirectes et indirectes, y compris les flux de longueur nulle et les charges utiles contenant la séquence littéraleendstream TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.76.0 de manière cohérente
Version 2.75.0
Ajouté (Added)
TPdfLoadOptionsajoute des politiques compatible, stricte et de récupération au chargement de fichiers, de mémoire, de plages d’octets et de flux personnalisésTPdfLoadReportrapporte la route de récupération native, la validité xref, les décalages endommagés, les conflits d’entrées, les comptes de révisions, les budgets d’audit et les problèmes structurés pour les documents classiques, hybrides et xref-streamTPdf.SaveAsRepairedcrée une copie complète à révision unique et la recharge indépendamment en mode strict avant de livrer le flux vérifié ou de remplacer atomiquement un fichier cible
Modifié (Changed)
- Les surcharges de chargement existantes conservent un comportement compatible et publient désormais la validité xref native et l’état de récupération via
LastLoadReport - Le chargement strict rejette les documents qui exigeaient une reconstruction xref native ou qui ont échoué à l’audit structurel, tandis que la sortie de réparation signée exige une autorisation explicite de l’appelant
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.75.0 de manière cohérente
Version 2.74.0
Ajouté (Added)
TPdf.MergeFilesfusionne des listes de sources adossées à des fichiers avec des plages de pages et des mots de passe par source, tout en gardant au plus un document source ouvertTPdfBatchMergeOptionsajoute la gestion d’erreurs arrêt ou ignorance, les imports par source ou par blocs, les politiques de formulaires et de structure, le contrôle d’insertion, les rappels de progression, l’annulation, la copie des préférences de visualiseur et le contrôle de restaurationTPdfBatchMergeReportrapporte les pages validées et annulées, les résultats des sources, les appels natifs d’import, le plus grand lot, le nombre maximal de sources ouvertes, les détections de politiques, les problèmes et le statut terminal
Modifié (Changed)
- Le chemin par lot par défaut effectue un import natif de pages par source afin que PDFium puisse réutiliser les objets clonés de cette source, puis ferme la source avant d’ouvrir le fichier suivant
- Le mode par blocs offre des points d’annulation plus fins et des lots natifs plus petits, tandis que les sources partiellement échouées et les résultats d’arrêt ou d’annulation peuvent retirer toutes les pages insérées par l’opération
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.74.0 de manière cohérente
Version 2.73.0
Ajouté (Added)
TPdfRandomAccessStorefournit des E/S séquentielles et positionnées sûres pour les threads, garde les petits contenus en mémoire bornée et déborde une seule fois vers un stockage temporaire privé à un plafond choisi par l’appelantTPdf.SaveMemoryLimitetSaveTemporaryDirectoryconfigurent la préparation de sauvegarde, tandis queLastSaveSpillCountetLastSaveLargestMemoryBufferexposent des diagnostics mesurables par sauvegarde
Modifié (Changed)
- Les tampons de préparation de sauvegarde, conversion de normes, validation, chiffrement, DSS et PAdES partagent désormais un stockage de travail borné avec des fichiers de débordement exclusifs supprimés à la fermeture et effacement de la mémoire
- Les rappels de blocs PDFium personnalisés sérialisent les positions ordinaires de flux et utilisent des lectures positionnées indépendantes du curseur lorsqu’ils sont adossés à
TPdfRandomAccessStore - L’analyse de capacité XFA adossée aux fichiers lit désormais des blocs chevauchants de taille fixe au lieu de copier le PDF complet en mémoire
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.73.0 de manière cohérente
Version 2.72.0
Ajouté (Added)
TPdf.BeginIncrementalSave,CommitIncrementalSaveetEndIncrementalSavefournissent une session de révisions qui n’ajoute que les objets indirects modifiés ou nouvellement créésTPdfIncrementalCommitInforapporte le nombre d’objets modifiés, les octets ajoutés, le total d’octets de sortie et le nombre de révisions réussies pour chaque validation
Modifié (Changed)
- Chaque validation d’éléments modifiés préserve la sortie précédente complète comme préfixe d’octets exact, n’émet aucune révision quand rien n’a changé et poursuit le format classique ou xref-stream de la source
- La sortie incrémentale native xref-stream est réparée avec son type, son entrée self, sa longueur, son index et son terminateur d’objets requis avant tout traitement ultérieur
- Les documents chiffrés sont rejetés avant le début d’une session, tandis que les documents signés exigent une permission explicite de l’appelant afin que la politique de signature ne puisse pas être contournée accidentellement
- La surcharge fichier achève un fichier temporaire frère avant de remplacer atomiquement la destination et restaure l’état de session après tout échec d’écriture ou de remplacement
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.72.0 de manière cohérente
Version 2.71.0
Ajouté (Added)
TPdf.SaveAsObjectStreamécrit des fichiers PDF 1.5+ avec des groupes d’objets compressés bornés et un flux xref pur contenant des entrées de type 2 complètesPackPdfObjectStreamspeut moderniser des entrées classiques, hybrides, xref-stream et object-stream existantes après résolution de la révision active
Modifié (Changed)
- L’ordonnancement des objets local aux pages, les largeurs de champs xref adaptatives, l’accès direct au catalogue et les plafonds configurables de membres et d’octets décodés équilibrent taille de fichier et performance d’accès aléatoire
- La surcharge fichier achève un fichier temporaire frère avant de remplacer atomiquement la destination, tandis que les options incrémentales, de version et de regroupement invalides sont rejetées avant le début de la sortie
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.71.0 de manière cohérente
Version 2.70.0
Ajouté (Added)
TPdf.SaveAsLinearizedécrit un vrai PDF Fast Web View vers un flux ou un fichier via le regroupement d’objets de première page, deux sections de références croisées et les tables d’indications d’offsets de pages et d’objets partagés de l’Annexe F- Les membres actifs d’object-stream sont matérialisés automatiquement, permettant aux entrées xref-stream et object-stream de devenir des sorties adaptées aux plages sans changer le contenu visible des pages
Modifié (Changed)
- La surcharge fichier achève un fichier temporaire frère avant de remplacer atomiquement la destination, tandis que la surcharge flux conserve les options de sauvegarde PDFium normales et les vérifications explicites de version
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.70.0 de manière cohérente
Version 2.69.0
Ajouté (Added)
TPdfRangeRequestSchedulerconvertit les indications de plages d’octets PDFium en travail de transport priorisé, coalescé et borné en taille sans forcer un téléchargement contigu- L’achèvement complet et partiel, les tentatives bornées, la déduplication de disponibilité éparses, les statistiques de requêtes et l’annulation sûre entre générations prennent en charge HTTP Range et les pipelines de transport personnalisés
TPdfProgressiveDocument.RangeRequestsreçoit automatiquement les indications de document, de formulaire et de pages, ne promouvant que les octets exacts qui bloquent une page interactive
Modifié (Changed)
CancelProgressiveLoadannule désormais le travail de plages actif avant la disponibilité native et le démontage de flux, et les achèvements de transport périmés sont ignorés en sécuritéTPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.69.0 de manière cohérente
Version 2.68.0
Ajouté (Added)
TPdfProgressiveDocumentmaintient vivante la session de disponibilité de PDFium tandis qu’un flux à accès aléatoire distant ou croissant reçoit les plages d’octets demandées par PDFiumCheckDocumentAvailability,CheckFormAvailabilityetLoadAvailablePagerenvoient des indicationsTPdfDownloadRangefusionnées afin qu’un hôte ne récupère que les données nécessaires pour ouvrir et afficher une page linéariséeAvailableByteCountprend en charge les téléchargements contigus monotones, tandis queOnDataAvailableprend en charge les caches de plages éparses et hors ordre
Modifié (Changed)
- Les fichiers linéarisés utilisent les portes natives de document, de formulaire et de page de PDFium ; les fichiers non linéarisés basculent automatiquement vers le chargeur natif de flux personnalisé une fois le fichier complet présent
TPdfStreamAdapterpeut exposer une taille finale logique différente des octets actuellement stockés, tout en préservant la limite explicite de 4 GiB deFPDF_FILEACCESSTPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.68.0 de manière cohérente
Version 2.67.0
Ajouté (Added)
TPdfView.AllowFormEventscoupe les événements de souris, de clavier et de focus que le visualiseur transmet à la couche de remplissage de formulaire, pour un visualiseur en lecture seule ou un visualiseur qui pilote lui-même l’interaction avec les formulaires- Les champs de formulaire se rendent toujours normalement lorsqu’il est désactivé : le chargement et la fermeture de page sont délibérément laissés non filtrés, car ceux-ci initialisent la couche de formulaire au lieu de réagir à la saisie
- Le commutateur rejoint les bascules existantes
AllowUserPageChangeetAllowUserTextSelectionet vaut True par défaut, si bien que le comportement existant est inchangé
Modifié (Changed)
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.67.0 de manière cohérente
Version 2.66.0
Ajouté (Added)
- Les actions nommées qu’un document déclenche (ISO 32000-1 §12.6.4.11) atteignent désormais l’hôte via le nouvel événement
OnNamedAction; auparavant, chacune d’elles était ignorée - Laissées non gérées, les quatre noms de navigation standards —
NextPage,PrevPage,FirstPage,LastPage— déplacent la page, en se bornant à la première et à la dernière plutôt qu’en bouclant TPdf.PerformNamedActionpermet à une application de déclencher le même comportement directement, en renvoyant False pour un nom sans signification fournie par la bibliothèque
Corrigé (Fixed)
- Un test de chiffrement mesurait un corps de flux en balayant à rebours depuis
endstream, ce qui prenait occasionnellement un octet de texte chiffré pour un terminateur de ligne et rapportait un échec intermittent ; la bibliothèque était correcte en tout point
Modifié (Changed)
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.66.0 de manière cohérente
Version 2.65.0
Ajouté (Added)
BuildToUnicodeCMapgénère la carte ToUnicode (ISO 32000-1 §9.10.3) dont une police CID a besoin pour que son texte puisse être copié, recherché et lu par les technologies d’assistance — sans elle, le texte se rend correctement mais s’extrait en vide- Les entrées sont découpées à la limite de 100 par bloc fixée par la spécification, les glyphes dupliqués sont écrits une seule fois et
.notdefest ignoré - La carte suit la convention CID = GID, si bien qu’aucun flux
CIDToGIDMapn’est nécessaire à côté
Modifié (Changed)
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.65.0 de manière cohérente
Version 2.64.0
Ajouté (Added)
- Les annotations d’encre et de tampon se dessinent depuis leurs propres objets de page plutôt que depuis le flux de contenu de la page, et ces objets sont désormais accessibles :
AnnotationObjectCountetAnnotationObjectInfoles lisent,AddPathToAnnotationremet à l’annotation un tracé construit avecCreatePath, etRemoveAnnotationObjecten supprime un - Construire l’apparence d’un tampon n’exige plus d’outil externe : créez le tracé comme d’habitude, puis remettez-le à l’annotation au lieu de la page
- PDFium n’accepte les objets de page que sur les sous-types encre et tampon, si bien que tout autre sous-type est refusé avec un message nommant la restriction au lieu d’échouer de façon obscure
Modifié (Changed)
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.64.0 de manière cohérente
Version 2.63.0
Ajouté (Added)
TPdf.AddStandardFontTextdessine du texte avec l’une des 14 polices que tout lecteur PDF doit fournir, sans embarquer aucun programme de police — le fichier résultant est mesurablement plus petit que le même texte dessiné avecAddText, qui embarque la fonte système qu’il trouve- La nouvelle énumération
TPdfStandardFontnomme les 14 fontes, si bien qu’un appelant ne peut pas mal saisir un nom de police de base ; PDFium correspond ces noms exactement et une coquille ne donnerait silencieusement aucune police - PDF/A et PDF/X exigent tous deux que chaque police soit embarquée, si bien que la sortie visant ces profils doit continuer d’utiliser
AddText
Modifié (Changed)
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.63.0 de manière cohérente
Version 2.62.0
Ajouté (Added)
TPdf.TextObjectGlyphOutlinerenvoie le contour d’un glyphe de la police d’un objet texte sous forme de segments de tracé, pour convertir du texte en art vectoriel ou inspecter un glyphe qu’une substitution de police peut avoir altéré- Le résultat réutilise le type
TPdfPathSegmentsexistant, si bien qu’il se lit exactement comme le contour d’un objet de tracé dessiné - Les coordonnées sont dans l’espace de conception propre de la police, normalisées pour qu’un em vaille 1.0 ; la taille de police demandée ne les met pas à l’échelle, si bien qu’un appelant voulant des unités périphériques multiplie lui-même par la taille en points
- Un résultat vide signifie que la police n’expose aucun contour pour ce glyphe, ce qui n’est pas une erreur ; demander un glyphe d’un objet non texte lève une exception
Modifié (Changed)
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.62.0 de manière cohérente
Version 2.61.0
Ajouté (Added)
TPdf.InspectAvailabilityrapporte ce que PDFium peut dire d’un PDF sans le charger en document : si le fichier est linéarisé (« optimisé pour le Web »), si une analyse complète réussirait, s’il transporte des données de formulaire et quelle page un visualiseur montrerait en premier- Les nouveaux types
TPdfAvailability,TPdfLinearizationetTPdfFormAvailabilityportent les réponses ; le flux est lu mais non conservé, et sa position est restaurée au retour - Cela ferme la dernière lacune de la famille
FPDFAvail_*, qui était liée et chargée mais n’avait aucun appelant dans toute la bibliothèque - Delphi, Lazarus et C++Builder couvrent chacun les faits rapportés, la garantie de position de flux et le rejet de flux nil
Modifié (Changed)
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.61.0 de manière cohérente
Version 2.60.0
Ajouté (Added)
- Le contenu marqué (ISO 32000-1 §14.6) est désormais accessible depuis l’API de haut niveau :
PageObjectMarkslit chaque étiquette BDC et sa liste de propriétés sur un objet de page,AddPageObjectMarken écrit une,RemovePageObjectMarken supprime une, etPageObjectMarkedContentIDrapporte le MCID - Les nouveaux types
TPdfContentMark,TPdfContentMarkParametTPdfMarkParamKindportent le nom d’étiquette et ses paramètres typés (entier, float, chaîne, blob), le type de valeur étant résolu depuis PDFium plutôt que deviné depuis le getter qui réussit - L’ajout d’une marque reconstruit le flux de contenu de la page, si bien que l’étiquette survit à une sauvegarde ; cela devait être explicite car
SaveAsne régénère pas le contenu de lui-même - Delphi, Lazarus et C++Builder portent chacun six cas, dont un qui gonfle le flux de contenu sauvegardé pour confirmer que l’opérateur BDC et sa liste de propriétés sont bien arrivés
Modifié (Changed)
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.60.0 de manière cohérente
Version 2.59.0
Ajouté (Added)
TPdfAnnotationgagneHasLinkUrietLinkUri, si bien queCreateAnnotationpeut désormais produire un lien Web fonctionnel : l’annotation est sauvegardée avec une action/URIpointant vers l’adresse donnée- Définir une URI de lien sur un sous-type autre que
anLinklève une exception, car seule une annotation Link porte un dictionnaire d’action - Le champ est en écriture seule pour l’instant ; la relecture d’une cible de lien passe par la famille
FPDFLink_*, qui exige le handle de document - Delphi, Lazarus et C++Builder vérifient tous que les octets sauvegardés portent l’action
/URIet l’adresse cible
Modifié (Changed)
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.59.0 de manière cohérente
Version 2.58.12
Ajouté (Added)
- La validation PDF/X rapporte
pvxiTrimBoxWithArtBoxlorsqu’une page porte/TrimBoxet/ArtBoxensemble ; toutes deux énoncent la page finie, si bien qu’un RIP ne peut pas savoir laquelle fait autorité (ISO 15930) - La validation PDF/X rapporte
pvxiPageBoxOutsideMediaBoxlorsque/TrimBoxou/BleedBoxdépasse/MediaBox, y compris une boîte à origine négative ; une boîte au-delà du support ne peut pas être exposée - Les rectangles sont normalisés avant comparaison, si bien que tout ordre de coins est accepté, et une boîte touchant exactement le bord du support reste valide
- Les rapports de préflight classent les deux problèmes sous la structure et nomment le remède concret
- Delphi, Lazarus et C++Builder couvrent tous les deux cas rejetés et le cas conforme
Modifié (Changed)
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.58.12 de manière cohérente
Version 2.58.11
Ajouté (Added)
- La validation PDF/UA rapporte
pvuaiTociWithoutToclorsqu’un document balise des entrées TOCI mais jamais le conteneur TOC auquel elles appartiennent, ce qui laisse les technologies d’assistance annoncer des entrées de table des matières sans table des matières (ISO 14289-1 §7.7) - Les rapports de préflight classent le problème sous la structure et recommandent d’envelopper les entrées dans un élément TOC
- C++Builder gagne sa première couverture de tests PDF/UA aux côtés des cas Delphi et Lazarus
Modifié (Changed)
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.58.11 de manière cohérente
Version 2.58.10
Ajouté (Added)
- La validation PDF/A rapporte
pvaiSymbolicTrueTypeEncodinglorsqu’une police TrueType symbolique porte une entrée/Encoding; ISO 19005-1 §6.3.7 n’admet que la cmap intégrée de la police, si bien qu’un/Encodingla contredirait - L’indicateur symbolique est lu depuis le
/FontDescriptor, qu’il soit écrit en ligne dans le dictionnaire de police ou référencé indirectement ; une police non symbolique conserve son/WinAnsiEncodingou/MacRomanEncodingrequis sans être signalée - Les rapports de préflight classent le problème sous le contenu et recommandent de retirer l’entrée
- Delphi et Lazarus couvrent le cas signalé plus les deux cas acceptés ; C++Builder couvre le cas signalé et le cas non symbolique
Modifié (Changed)
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.58.10 de manière cohérente
Version 2.58.9
Ajouté (Added)
- La validation PDF/A rapporte les limites d’implémentation de conteneur de l’Annexe C d’ISO 19005-1 :
pvaiNameOverLimitpour les noms de plus de 127 octets,pvaiArrayOverLimitau-delà de 8191 éléments,pvaiDictOverLimitau-delà de 4095 entrées etpvaiNestingOverLimitau-delà de 28 niveaux d’imbrication - Les limites sont inclusives, si bien qu’un conteneur posé exactement sur l’une d’elles reste valide ; les tests épinglent le côté rejeté et le côté accepté de chaque frontière
- Les rapports de préflight classent les quatre problèmes sous la structure et nomment la limite concrète dans chaque recommandation
- Delphi et Lazarus couvrent les quatre limites plus les cas de frontière ; C++Builder couvre la limite de tableau et la frontière
Modifié (Changed)
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.58.9 de manière cohérente
Version 2.58.8
Ajouté (Added)
- La validation PDF/R rapporte
pvriPageImageMismatchlorsque le nombre d’images ne correspond pas au nombre de pages ; ISO 23504-1 §6.5.1 fait de chaque page exactement une image de bande, si bien qu’une page sans image ou avec plusieurs n’est pas conforme - Les tests Delphi, Lazarus et C++Builder couvrent une page sans image, une page avec deux et le cas conforme à une image
Modifié (Changed)
- Les tests d’injection de marqueurs PDF/R partent désormais d’une page source portant déjà une image de bande, puisque l’injection de marqueurs ajoute des métadonnées et ne peut pas fournir le contenu de page
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.58.8 de manière cohérente
Version 2.58.7
Ajouté (Added)
- La validation PDF/R rapporte
pvriFontForbiddenlorsqu’une page nomme une ressource de police ; une page PDF/raster porte l’image numérisée et rien d’autre (ISO 23504-1 §6.5.2) - La validation PDF/R rapporte
pvriForbiddenImageFilterpour les encodages de bande hors liste blanche, si bien que/LZWDecode,/RunLengthDecode,/ASCII85Decode,/ASCIIHexDecode,/JBIG2Decodeet/Cryptsont rejetés tandis que/CCITTFaxDecode,/DCTDecode,/JPXDecodeet/FlateDecodepassent (ISO 23504-1 §6.6) - Les rapports de préflight classent les deux problèmes sous le contenu et recommandent le remède concret
- Les tests Delphi, Lazarus et C++Builder couvrent une ressource de police, un filtre rejeté et une page n’utilisant que des encodages de la liste blanche
Modifié (Changed)
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.58.7 de manière cohérente
Version 2.58.6
Ajouté (Added)
- La validation PDF/E rapporte
pveiFontNotEmbeddedlorsqu’un document montre une utilisation de police mais ne porte aucun programme de police embarqué, si bien que l’exigence est vérifiée sur le chemin sans DLL comme via PDFium - Un dessin d’ingénierie doit se rendre identiquement des décennies plus tard, si bien qu’ISO 24517-1 n’exempte aucune des 14 polices standards ; la vérification s’applique de la même manière à
/Type1,/TrueType,/Type0et/MMType1 - Les rapports de préflight classent le nouveau problème sous le contenu et recommandent d’embarquer chaque programme de police
- Les tests Delphi, Lazarus et C++Builder couvrent un descripteur sans programme, un
/FontFile2embarqué et un document n’utilisant aucune police
Modifié (Changed)
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.58.6 de manière cohérente
Version 2.58.5
Ajouté (Added)
InjectPdfEMarkersécrit désormais l’intent de sortie qu’exige ISO 24517-1 §6.2 : un profil ICC de destination sRGB embarqué, un intent de sortie/GTS_PDFE1le nommant et le tableau/OutputIntentsdu catalogue, le tout dans la même mise à jour incrémentale- Le flux de profil tire son
/Nde l’en-tête ICC plutôt que de supposer trois composantes, si bien qu’un profil CMYK serait décrit correctement - La validation PDF/E rapporte
pveiMissingOutputIntentetpveiMissingIccProfile, si bien qu’un candidat sans condition colorimétrique énoncée n’est plus accepté - Les tests Delphi, Lazarus et C++Builder couvrent un intent de sortie accepté, un intent sans profil de destination et un catalogue sans intent de sortie du tout
Modifié (Changed)
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.58.5 de manière cohérente
Version 2.58.4
Ajouté (Added)
- La validation PDF/X rapporte désormais
pvxiFontNotEmbeddeddepuis un balayage d’octets, si bien qu’une police non embarquée est interceptée sur le chemin sans DLL au lieu de l’être seulement via la vérification adossée à PDFium - Contrairement au PDF/A, les 14 polices standards ne sont pas exemptées en PDF/X, si bien que toute utilisation de police sans programme embarqué est signalée
- La vérification reste conservatrice : elle ne se déclenche que lorsque le fichier montre une utilisation de police mais ne porte aucun
/FontFile,/FontFile2ou/FontFile3, car compter les descripteurs contre les programmes produit des faux positifs sur les descripteurs partagés - Les tests Delphi, Lazarus et C++Builder couvrent un descripteur sans programme, un programme embarqué et un document n’utilisant aucune police
Modifié (Changed)
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.58.4 de manière cohérente
Version 2.58.3
Ajouté (Added)
- La validation PDF/X rapporte désormais
pvxiColorSpaceForbiddenlorsqu’un candidat PDF/X-1a porte/DeviceRGB,/CalRGBou/Lab, qu’ISO 15930-1 §6.2 exclut de son échange CMYK - La vérification ne porte que sur PDF/X-1a seul, si bien que PDF/X-3 et les suivants continuent d’autoriser RGB et les espaces indépendants du périphérique qu’ils associent à l’intent de sortie
- Seuls les jetons de noms d’espaces couleur non ambigus sont testés ; un flux
ICCBasedexige la résolution de son/Net reste au niveau du modèle d’objets - Les tests Delphi, Lazarus et C++Builder couvrent un espace RGB signalé, un espace Lab signalé, une paire CMYK et niveaux de gris acceptée, et le cas permis en PDF/X-3
Modifié (Changed)
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.58.3 de manière cohérente
Version 2.58.2
Ajouté (Added)
- La validation PDF/X rapporte désormais
pvxiTransparencyForbiddenpour un groupe de transparence ou un soft mask actif, qu’interdisent ISO 15930-1 §6.2 (PDF/X-1a) et ISO 15930-3 §6.3 (PDF/X-3) - La vérification est conditionnée à la conformité détectée, si bien que PDF/X-4 et PDF/X-6 continuent d’autoriser la transparence et qu’un fichier dont le niveau n’a pas pu être identifié n’est jamais signalé pour une règle qui peut ne pas s’appliquer à lui
- Un soft mask explicitement désactivé par
/SMask /Nonen’est pas traité comme de la transparence PdfHasActiveSMaskest passé deFPdfPdfadans l’interfaceFPdfPdfCommonafin que chaque validateur puisse partager une seule règle de soft mask- Les tests Delphi, Lazarus et C++Builder couvrent un groupe signalé en X-1a, un soft mask signalé en X-3, un soft mask désactivé et le cas permis en X-4
Modifié (Changed)
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.58.2 de manière cohérente
Version 2.58.1
Ajouté (Added)
- La validation PDF/X vérifie désormais la forme de l’intent de sortie qu’exige ISO 15930-7 §6.2.4 :
pvxiOutputIntentSchemesignale un sous-type présent mais différent de/GTS_PDFX, etpvxiOutputIntentMissingIdentifiersignale un/OutputConditionIdentifiermanquant - Le sous-type est apparié comme jeton de nom complet, si bien qu’un nom plus long comme
/GTS_PDFXVersionne passe plus, tandis qu’une orthographe#xxéchappée du même nom passe toujours - Un intent de sortie ne portant aucun sous-type est laissé tranquille, car son absence est déjà signalée par les problèmes de niveau marqueur
- Les rapports de préflight classent les deux problèmes sous la catégorie intent de sortie et suggèrent le correctif
- Les tests Delphi, Lazarus et C++Builder couvrent le sous-type accepté, un sous-type PDF/A, un jeton de nom plus long, un sous-type absent et un identifiant de condition manquant
Modifié (Changed)
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.58.1 de manière cohérente
Version 2.58.0
Modifié (Changed)
- Les 35 rappels que PDFium invoque depuis ses propres trames C++ (remplissage de formulaire, XFA, plateforme JavaScript, pause de rendu progressif, lecture et écriture de flux) contiennent désormais toute exception Pascal et renvoient la valeur d’échec documentée au lieu de se dérouler à travers la frontière de langage
- Un gestionnaire d’événement qui lève, une allocation qui échoue ou une erreur inattendue dans un rappel ne peuvent donc plus faire tomber le processus ni laisser PDFium dans un état indéfini
Corrigé (Fixed)
- L’enregistrement d’une minuterie de formulaire fuyait son entrée lorsque la minuterie sous-jacente ne pouvait pas être créée
Ajouté (Added)
- Les tests Delphi, Lazarus et C++Builder couvrent désormais la sauvegarde dans un flux de destination refusant les écritures et affirment que le document reste utilisable et sauvegardable ensuite
Version 2.57.8
Corrigé (Fixed)
- Les anciennes versions de Delphi (XE5 et antérieures) arrêtaient de compiler la bibliothèque d’évaluation avec
E2003 Undeclared identifier: 'GetTickCount64'dansFPdfPades.pas, car l’unité Windows livrée avec ces compilateurs n’exporte pas le symbole - Les mêmes compilateurs échouaient aussi sur
GetUserDefaultLocaleNamedansPDFium.paset sur l’assignation deTBytesversarray of BytedansGetXfaFormPackets; le rappel de locale XFA et l’instantané de paquets se compilent désormais aussi sur ces compilateurs
Modifié (Changed)
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.57.8 de manière cohérente
Version 2.57.7
Modifié (Changed)
- Toute réécriture côté sauvegarde tronque désormais le flux de destination avant d’écrire au lieu de seulement le rembobiner, si bien qu’un tampon fourni par l’appelant contenant déjà un document plus long ne peut pas conserver une traîne périmée au-delà du nouveau
%%EOF - Les tests Delphi, Lazarus et C++Builder couvrent désormais la sauvegarde dans un flux prérempli
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.57.7 de manière cohérente
Version 2.57.6
Corrigé (Fixed)
- Le balayage d’objets qui précède le chiffrement acceptait des suites de chiffres de longueur quelconque, si bien qu’un long nombre n’importe où dans le fichier pouvait boucler en numéro d’objet négatif ou erroné et ajouter une entrée fantôme à la table de références croisées reconstruite
- Les numéros d’objets au-delà de la limite de l’Annexe C d’ISO 32000-1 et les générations supérieures à 65535 sont désormais rejetés comme en-têtes d’objets au lieu d’être tronqués
Ajouté (Added)
- Les tests Delphi, Lazarus et C++Builder affirment désormais le compte exact d’entrées en usage de la table reconstruite
Modifié (Changed)
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.57.6 de manière cohérente
Version 2.57.5
Corrigé (Fixed)
- Chiffrer avec
EncryptMetadata = Falseécrivait/EncryptMetadata falsedans le dictionnaire Encrypt mais chiffrait quand même le flux de métadonnées du document, si bien qu’un lecteur suivant cette déclaration trouvait du XMP illisible - Un flux
/Type /Metadataest désormais copié sans changement lorsque le chiffrement des métadonnées est désactivé, tandis que tous les autres flux restent chiffrés
Ajouté (Added)
AnsiNameTokenMatchesKeyfait désormais partie de l’interfaceFPdfPdfCommonpour des comparaisons de noms sensibles aux délimiteurs- Les tests Delphi, Lazarus et C++Builder couvrent désormais les deux modes de chiffrement des métadonnées
Modifié (Changed)
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.57.5 de manière cohérente
Version 2.57.4
Corrigé (Fixed)
- La table de références croisées reconstruite pendant le chiffrement omettait la tête de liste libre obligatoire de l’objet 0 exigée par ISO 32000-1 §7.5.4, si bien que sa première sous-section commençait un objet trop tard
- Chaque entrée reconstruite se prétendait de génération 0 ; les objets écrits avec une génération supérieure la conservent désormais, si bien que la table s’accorde avec les en-têtes d’objets qu’elle pointe
Ajouté (Added)
- Les tests Delphi, Lazarus et C++Builder couvrent désormais l’entrée de tête de liste libre et la préservation de génération dans la table reconstruite
Modifié (Changed)
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.57.4 de manière cohérente
Version 2.57.3
Corrigé (Fixed)
- La sortie chiffrée laissait tomber le mot-clé
streamde chaque objet de flux, si bien que le fichier sauvegardé n’était plus une syntaxe PDF valide et que les lecteurs stricts rapportaient le contenu de page comme n’étant ni un flux ni un tableau de flux - La réécriture du
/Lengthappariait/Lengthcomme simple sous-chaîne, si bien qu’un dictionnaire de flux portant/Length1(toute police embarquée) avait son nom de clé corrompu tandis que la longueur réelle restait périmée - Un flux énonçant sa longueur indirectement comme
/Length N 0 Ravait son numéro d’objet écrasé par la nouvelle longueur ; l’entrée est désormais remplacée par la longueur chiffrée directe - Un dictionnaire de flux sans aucun
/Lengthen reçoit désormais un, au lieu de laisser le lecteur sans longueur
Ajouté (Added)
AnsiFindDictKeyTokenfait désormais partie de l’interfaceFPdfPdfCommonpour des recherches de clés de dictionnaire de premier niveau sensibles aux délimiteurs- Les tests Delphi, Lazarus et C++Builder couvrent désormais la préservation de
/Length1, le remplacement de longueur indirecte et l’accord des tailles de corps de flux
Modifié (Changed)
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.57.3 de manière cohérente
Version 2.57.2
Corrigé (Fixed)
SaveAsEncryptedetSaveAsEncryptedToStreamavecRevision = erR6produisaient des documents qui rejetaient leur propre mot de passe correct dans environ un fichier sur quatre, car le compteur de tours de l’algorithme 2.B d’ISO 32000-2 §7.6.4.3 commençait un tour trop bas et le tour supplémentaire changeait les valeurs/U,/O,/UEet/OE- Les documents chiffrés R6 se rouvrent désormais avec le mot de passe utilisateur ou propriétaire dans tout lecteur conforme, et rejettent toujours un mot de passe erroné
Ajouté (Added)
- Les suites de tests Lazarus et C++Builder ont gagné la couverture de chiffrement auparavant réservée à Delphi : longueurs de clé R6, champs du dictionnaire Encrypt, un aller-retour répété de chiffrement et réouverture, et le rejet de mot de passe erroné
Modifié (Changed)
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.57.2 de manière cohérente
Version 2.57.1
Modifié (Changed)
- La saisie dans un champ de formulaire, le déplacement du curseur et le basculement de cases à cocher ne repeignent désormais que la zone que PDFium signale comme endommagée, au lieu du visualiseur entier
- Les boîtes d’endommagement sont normalisées pour l’axe Y de page orienté vers le haut, élargies d’un pixel pour que les bordures de widgets anticrénelées restent nettes, et découpées à la zone cliente visible
- Une boîte d’endommagement entièrement sortie de la fenêtre d’affichage ne planifie plus de repeinture, tandis qu’une vue inactive ou une page non mappée retombe toujours sur un repeint complet
- Les tests Delphi, Lazarus et C++Builder couvrent désormais l’invalidation bornée des formulaires, les boîtes de page inversées, les boîtes hors écran et la sécurité des vues inactives
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.57.1 de manière cohérente
Version 2.57.0
Ajouté (Added)
TPdfThumbnailView.Orientationprend en charge les dispositions de miniatures verticales et horizontales tout en préservant la valeur verticale par défaut existanteFirstVisiblePageIndex,LastVisiblePageIndexetEnsureCurrentPageVisibleexposent et contrôlent la fenêtre des miniatures avec des index de page basés sur un
Modifié (Changed)
- La modification de
CurrentPageIndexfait désormais défiler la miniature sélectionnée dans la vue dans l’une ou l’autre orientation - Les tests Delphi, Lazarus et C++Builder couvrent désormais les valeurs par défaut d’orientation, la commutation, les plages visibles et la visibilité des pages sélectionnées
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.57.0 de manière cohérente
Version 2.56.2
Modifié (Changed)
HighlightSearchText,AddSearchTextHighlightetClearHighlightinvalident désormais uniquement les rectangles de périphérique pour les plages de recherche qui ont été ajoutées ou supprimées au lieu de repeindre l’intégralité de la visionneuse- Le remplacement des surbrillances par les mêmes correspondances ou l’ajout de correspondances en double ne planifie plus de repeinture inutile
- Les tests Delphi, Lazarus et C++Builder couvrent désormais l’invalidation bornée, les mises à jour idempotentes, l’effacement et la sécurité des vues inactives
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.56.2 de manière cohérente
Version 2.56.1
Modifié (Changed)
TPdfThumbnailViewréutilise désormais les bitmaps rendus pour les pages qui restent visibles d’un repeint à l’autre et entre positions de défilement adjacentes- Le cache ne conserve que la plage de pages visibles courante et libère les entrées précisément lorsque les pages quittent cette plage, que le document assigné change ou que les dimensions des miniatures changent
- Les tests Delphi, Lazarus et C++Builder couvrent désormais la réutilisation du cache, l’élagage de la fenêtre, l’invalidation par taille, le remplacement de document et la destruction du composant
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.56.1 de manière cohérente
Version 2.56.0
Ajouté (Added)
TPdfView.CutSelectedFormTextToClipboardetTPdfView.PasteFormTextFromClipboardfournissent l’édition Unicode via le presse-papiers pour le widget de formulaire modifiable ayant le focus
Modifié (Changed)
- Les éditeurs de formulaire ayant le focus gèrent désormais les raccourcis clavier standards copier, couper, coller et tout sélectionner avant de transmettre la saisie de texte à PDFium
- Couper et coller rejettent les champs en lecture seule et les sessions sans autorisation de remplissage ou de modification de formulaire, tandis que couper copie avec succès avant de supprimer le texte sélectionné
- Les tests Delphi, Lazarus et C++Builder couvrent désormais le comportement sans focus, l’aller-retour des raccourcis et le rejet en lecture seule
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.56.0 de manière cohérente
Version 2.55.0
Ajouté (Added)
TPdfView.AddSearchTextHighlightajoute les correspondances uniques d’un autre terme de recherche à la superposition de page courante, permettant à plusieurs requêtes de rester surlignées ensemble
Modifié (Changed)
HighlightSearchTextreste le point d’entrée de remplacement et partage désormais le scanner additif, tandis que les plages de caractères en double sont ignorées et queClearHighlightsupprime l’ensemble accumulé complet- Les tests Delphi, Lazarus et C++Builder couvrent désormais l’accumulation de requêtes distinctes et la suppression des plages en double
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.55.0 de manière cohérente
Version 2.54.0
Ajouté (Added)
TPdfexpose désormais des instantanés complets d’objets de page, des mises à jour de style par lot, des transformations d’objets affines, des segments de chemin, des chemins de détourage et des enfants Form XObject- L’inspection des caractères inclut désormais les couleurs de remplissage et de trait, le nom et les indicateurs de police, les limites de glyphe lâches, les matrices effectives, les handles d’objet texte et la conversion d’index de caractère en texte
- Les annotations font désormais un aller-retour de la géométrie de bordure et des flux d’apparence normal, rollover et down
- Les nouveaux accesseurs de miniatures brutes et décodées, les transformations de contenu de page et d’annotation, et
RenderPageWithMatrixfournissent des chemins avancés directs de rendu et d’édition
Modifié (Changed)
- Les modifications de style d’objet de page peuvent être validées en un seul lot afin que PDFium régénère le contenu de page une seule fois
- Le rendu matriciel utilise le chemin bitmap zéro copie existant lorsque la disposition du bitmap de destination est compatible
Version 2.53.1
Corrigé (Fixed)
- La légende du menu Copier chinois intégré utilise désormais des points de code Unicode indépendants de l’encodage et s’affiche correctement dans les builds Lazarus
- Les anciennes chaînes d’outils Delphi peuvent compiler
FPdfAsynclorsque leur unitéWinapi.Windowsomet la déclarationGetTickCount64
Version 2.53.0
Ajouté (Added)
- Nouveau harnais de tests
Tests.ApiCoveragecouvrant les API TPdf publiques qui n’avaient précédemment aucune couverture de tests de bout en bout :GetPageBox/SetPageBox(lecture/écriture MediaBox/CropBox, erreurs de boîte manquante et aller-retour de sauvegarde),FlattenPage/FlattenAllPages(valeur de retour et préservation du nombre de pages),GenerateFormAppearances(aucune action sur les documents sans formulaire),SaveAsEncrypted/SaveAsEncryptedToStream(AES-256 avec aller-retour par mot de passe — vérifie que le fichier chiffré refuse de s’ouvrir sans le mot de passe et s’ouvre avec), validation des limites deDeletePage(page 0 et hors plage lèventEPdfError), et les sentinelles d’annotationHasContents/HasAuthorintroduites dans v2.38.0 (vérifiant queDefault(TPdfAnnotation)les laisse àFalse)
Version 2.52.0
Ajouté (Added)
TPdfView.CopySelectedFormTextToClipboardcopie la sélection de texte à l’intérieur du widget AcroForm ayant le focus vers le presse-papiers Windows en tant queCF_UNICODETEXT
Modifié (Changed)
- Les opérations de copie de texte de page et de formulaire ayant le focus partagent désormais le même rédacteur défensif de presse-papiers Unicode et laissent le presse-papiers inchangé lorsque leur sélection est vide
- Les tests Delphi, Lazarus et C++Builder couvrent désormais les appels de copie de formulaire inactifs ou sans focus et un aller-retour de sélection de formulaire ayant le focus via le presse-papiers Windows
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.52.0 de manière cohérente
Version 2.51.0
Ajouté (Added)
TPdfView.SelectLineAtsélectionne la ligne de texte visuelle contenant une page basée sur un et un index de caractère basé sur zéro sans nécessiter de saisie de la souris
Modifié (Changed)
- La sélection de ligne programmatique, la sélection par triple clic et
Shift+HomeouShift+Endpartagent désormais un modèle de limite de ligne de boîte de caractères - Les tests Delphi, Lazarus et C++Builder couvrent désormais la sélection de ligne stable et les index de page ou de caractère invalides
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.51.0 de manière cohérente
Version 2.50.0
Ajouté (Added)
TPdf.LoadDocumentaccepte désormais une fenêtreIndexbasée sur zéro etCountdans un tamponTBytes, permettant aux PDF intégrés de se charger sans allouer de tranche de tableau d’octets temporaire
Modifié (Changed)
- Le chargement par plage d’octets rejette les fenêtres négatives ou hors limites avant de modifier l’état du document et préserve les options de durée de vie de tampon mis en cache et de tampon emprunté existantes
- Les tests Delphi, Lazarus et C++Builder couvrent désormais les fenêtres PDF intégrées et les arguments de plage d’octets invalides
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.50.0 de manière cohérente
Version 2.49.1
Ajouté (Added)
TPdfView.FitModeprend désormais en chargepfmFitHeightpour ajuster la page courante à la hauteur visible de la fenêtre tout en permettant le défilement horizontal lorsque c’est nécessaire
Corrigé (Fixed)
- Les modes d’ajustement convergent désormais après qu’un changement de barre de défilement modifie la zone cliente, gardant les résultats fit-page, fit-width et fit-height cohérents entre VCL et LCL
- Les tests de visionneuse Delphi, Lazarus et C++Builder couvrent désormais la sélection
pfmFitHeightet les allers-retours d’énumération TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installateur rapportent désormais Version 2.49.1 de manière cohérente
Version 2.49.0
Ajouté (Added)
- La surface de liaison PDFium publique couvre désormais les 470 fonctions exportées dans les en-têtes revus, y compris l’accès aux descriptions de pièce jointe via
FPDFAttachment_SetDescriptionetFPDFAttachment_GetDescription TPdfexpose désormais les descriptions de pièce jointe, la validité des renvois croisés, les décalages de fin de trailer, la révision du gestionnaire de sécurité, le chargement en mémoire 64 bits, les plages d’octets de signature, les plages de texte de lien web, ainsi que des instantanés étendus de données d’image, de filtre, de métadonnées et de profil ICC- Les assistants de formulaire prennent désormais en charge le focus natif des champs, les requêtes et mises à jour d’option de choix focalisée, le transfert de la molette, les traits d’encre inscriptibles et les surcalques de formulaire après le rendu progressif
Modifié (Changed)
FormFieldCount, les index de champ de formulaire et l’ordre de tabulation décrivent désormais uniquement les annotations de widget au lieu d’inclure des annotations de page sans rapport- Les pages
TPdfheadless entrent et quittent désormais le cycle de vie de page de remplissage de formulaire afin que le focus natif et les API de champ focalisé fonctionnent sansTPdfView - Les exports de description de pièce jointe sont protégés par fonctionnalité afin que les applications utilisant une ancienne version de PDFium puissent toujours charger la bibliothèque et détecter la fonctionnalité indisponible
Corrigé (Fixed)
- Le rendu progressif des pages peint désormais les contrôles de formulaire lorsque le remplissage de formulaire est activé
- Les tests Delphi, Lazarus et C++Builder couvrent désormais les nouveaux diagnostics de document, les descriptions de pièce jointe, les chemins d’encre, le comportement de formulaire, les plages d’octets de signature, les plages de lien web et les métadonnées d’image
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installeur signalent désormais la Version 2.49.0 de manière cohérente
Version 2.48.0
Ajouté (Added)
TPdfMatrixexpose désormais des fabriques, le clonage et l’affectation, des diagnostics d’état fini et d’inversibilité, une comparaison avec tolérance, l’accès à la translation, le signalement du déterminant et la décomposition affine- La composition en préfixe, la rotation sensible au pivot, la mise à l’échelle, l’inclinaison et les retournements, plus la correspondance de rectangle stretch, contain et cover prennent en charge les flux de travail en espace local et en disposition ajustée sans arithmétique manuelle des coefficients
- L’accès inverse non mutateur, la correspondance de points inverse, les transformations de vecteur et de quadrilatère, les lots dynamiques de points et de rectangles, les variantes sur place et les bornes transformées en une seule passe étendent la surface géométrique réutilisable
Modifié (Changed)
- La translation, la mise à l’échelle et les retournements d’axe ne mettent à jour que les coefficients concernés au lieu de passer par une multiplication affine générale
- La transformation de rectangle normalise son entrée une fois, utilise un chemin exact spécialisé aligné sur les axes quand c’est possible, et calcule les bornes générales pivotées sans enregistrements de points temporaires
- Les transformations par lot de points et de rectangles allouent un seul tableau de résultats ou réutilisent le stockage de l’appelant, tandis que les bornes de points transformés sont accumulées en une seule passe sans tableau intermédiaire
Corrigé (Fixed)
- La correspondance de rectangles rejette les résultats de taille nulle, non finis et en dépassement de
Singleavant de publier une matrice inutilisable - Les tests Delphi, Lazarus et C++Builder vérifient désormais l’ordre de composition, les invariants de pivot, les allers-retours inverses, les rectangles ajustés, la décomposition et le comportement géométrique en masse
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installeur signalent désormais la Version 2.48.0 de manière cohérente
Version 2.47.0
Ajouté (Added)
FPdfAsyncfournit désormais des motifs et messages d’annulation structurés, des enregistrements de rappel amovibles, des sources basées sur délai d’attente, l’attente d’annulation et des opérations atomiques d’essai d’annulation via des interfaces étendues qui préservent l’API d’origineTPdfFuture<T>.RunExajoute la distribution configurable du rappel et la priorité du worker tandis que les enveloppes de résultat exposent les identifiants d’opération, la validité de valeur, les noms de classe d’exception, le minutage d’achèvement et des assistants d’achèvement réutilisablesTPdfAsyncExecutorajoute un pool de workers fixes réutilisable avec quatre voies de priorité FIFO, une contre-pression optionnelle par file bornée, des handles de tâches annulables, une attente sensible au délai, des instantanés de tâche, des statistiques agrégées et un arrêt en douceur
Modifié (Changed)
- Les tâches asynchrones répétées peuvent réutiliser les threads de travail et les opérations de file O(1) au lieu de créer un thread pour chaque tâche, tandis que l’achèvement synchronisé reste disponible pour les hôtes d’interface utilisateur
- Les défaillances d’exécuteur et de future préservent les diagnostics de classe et de message d’exception, l’annulation conserve son motif d’origine, et les exceptions de rappel restent isolées du cycle de vie du worker et de l’arrêt
- Les tests Delphi, Lazarus et C++Builder couvrent désormais la surface étendue d’annulation, les métadonnées de future, le contrôle de tâche, la contre-pression, l’ordre de priorité, les statistiques, les défaillances et l’arrêt
Corrigé (Fixed)
- Les propriétaires d’annulation concurrents reçoivent désormais un résultat déterministe du premier scripteur au lieu de s’appuyer sur une séquence distincte d’observation et d’annulation
- L’attente d’inactivité du thread principal traite les rappels de tâche synchronisés, empêchant un worker achevé de laisser l’exécuteur durablement non inactif lors d’un arrêt coordonné
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installeur signalent désormais la Version 2.47.0 de manière cohérente
Version 2.46.0
Ajouté (Added)
FPdfAsn1expose désormais les classes d’identifiant, l’encodage et le décodage 64 bits high-tag-number, les enregistrements TLV analysés, les fenêtres de lecteur enfant sans copie, les décodeurs typés primitifs et les tranches de contenu ou de valeur encodée- Les enregistreurs DER prennent désormais en charge la plage complète 64 bits non signée d’INTEGER, le contenu INTEGER arbitraire validé, ENUMERATED, la sélection automatique UTCTime ou GeneralizedTime, les balises application et privées, les SEQUENCE multi-valeurs et la sortie SET OF triée canoniquement
ValidateDerrenvoie des erreurs de validation conscientes du décalage tout en appliquant des limites configurables d’imbrication, de nombre de nœuds, de longueur de contenu, de nombre d’erreurs, de racine et, en option, d’ordre des SET
Modifié (Changed)
- La concaténation DER et la composition multi-valeurs utilisent une seule allocation de sortie, les tampons d’enregistreur exposent des opérations de réservation, de comptage, de capacité et de transfert de propriété, et le tri SET OF utilise désormais un tri fusion
O(n log n) - Les valeurs BOOLEAN, INTEGER, BIT STRING, OBJECT IDENTIFIER, NULL, UTF8String, PrintableString, IA5String, UTCTime et GeneralizedTime reçoivent des contrôles de forme canonique lors de l’encodage, du décodage typé ou de la validation
- Le paquet d’exécution Lazarus exporte désormais
FPdfAsn1, et les suites de tests Delphi, Lazarus et C++Builder exercent la même surface DER publique
Corrigé (Fixed)
- Les numéros de balise context-specific supérieurs à 30 ne sont plus tronqués dans les cinq bits de poids faible de l’identifiant
- Les identifiants high-tag mal formés, les longueurs définies non minimales, les UTF-8 invalides, le remplissage BIT STRING non nul, les champs de temps invalides, les racines en traîne et les violations de limite de ressources sont rejetés de manière déterministe
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installeur signalent désormais la Version 2.46.0 de manière cohérente
Version 2.45.0
Ajouté (Added)
FPdfPreflightReportaffecte désormais une sévérité Info, Warning ou Error à chaque problème et expose des API de sévérité par standard et au niveau du rapport, de statut, de catégorie, de code de problème, de recherche, d’indexation, d’aplatissement et de filtrage- Les rapports preflight exportent désormais SARIF 2.1.0, XML JUnit, NDJSON et XML natif via des méthodes
To*etSave*ToFilecorrespondantes pour les pipelines CI, d’automatisation et de flux - Des empreintes SHA-256 stables de rapport identifient les résultats de validation équivalents indépendamment des chemins source et des horodatages de génération
Modifié (Changed)
- Les rapports JSON, CSV, texte, Markdown et HTML incluent désormais la sévérité et des récapitulatifs de statut étendus ; le HTML ajoute des légendes de tableau accessibles et un récapitulatif de statut
- La construction des collections de problèmes et de standards utilise une croissance géométrique de capacité, les résultats de requête sont pré-dimensionnés, l’échappement JSON écrit dans un seul tampon de sortie borné, et tous les fichiers de rapport utilisent un seul enregistreur UTF-8 direct
- Les récapitulatifs de catégorie de problème utilisent un ordre déterministe, les horodatages incluent les millisecondes, le JSON transporte
formatVersion: 2, et les cellules CSV neutralisent les formules de tableur
Corrigé (Fixed)
- L’export JSON préserve désormais les paires Unicode supplémentaires valides et remplace les unités de code substitut UTF-16 isolées au lieu d’émettre des données scalaires mal formées
- L’export HTML échappe désormais les apostrophes, et les vues de rapport filtrées possèdent des tableaux de problèmes indépendants au lieu de partager un stockage de résultats muable
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installeur signalent désormais la Version 2.45.0 de manière cohérente
Version 2.44.0
Ajouté (Added)
- Les signets et destinations exposent l'état d'ouverture, les comptes de descendants, les cibles d'action, les modes d'affichage de destination et jusqu'à quatre paramètres d'affichage
Metadata,GrantedPermissions,UserGrantedPermissions,HasPermissionetUserHasPermissionfournissent des instantanés typés d'inspection de document et des requêtes de permissionExtractThumbnail(PageNumber)effectue le rendu d'une page demandée sans modifier la page active, et les résultats d'horodatage RFC 3161 exposent la stratégie, l'heure de génération et les détails du nonce
Modifié (Changed)
- Les chemins de signets, JavaScript, métadonnées, destinations et miniatures utilisent des tampons validés en deux passes, une croissance géométrique des collections et un parcours protégé contre les cycles
- Le post-traitement de sauvegarde résout le catalogue actif, l'arborescence des pages et l'action ouverte via la révision xref courante, met en cache les flux d'objets décodés et analyse les dictionnaires PDF avec des limites lexicales
- L'analyse PDF partagée applique désormais des en-têtes d'objet exacts, des générations, des clés de dictionnaire, des longueurs de flux, une géométrie de prédicteur, des plages d'entiers et des limites de commentaire, de chaîne littérale et de chaîne hexadécimale
- La validation des réponses RFC 3161 lie désormais à la fois le nonce et le
messageImprintSHA-256, exige un signataire structurellement valide et applique des règles strictes de longueur DER, d'OID, d'INTEGER et de GeneralizedTime
Corrigé (Fixed)
- Les documents incrémentiels ne sélectionnent plus de catalogues dupliqués inactifs ni de suffixes de référence malformés lors de l'ajout d'une action ouverte par défaut
- Les jetons d'horodatage avec des longueurs DER à forme longue conservent le jeton codé complet, tandis qu'un ordre de champs facultatifs CMS malformé et des ensembles de signataires vides sont rejetés
- Les builds Delphi propres écrivent désormais les champs de graine de nonce PAdES via des copies d'octets sûres pour l'alignement et transmettent les octets de réponse XFA avec le type de pointeur natif exact
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de l’installeur signalent désormais la Version 2.44.0 de manière cohérente
Version 2.43.0
Ajouté (Added)
- Les enregistrements de champs et d'annotations XFDF exposent désormais des indicateurs de présence qui distinguent une valeur XML omise d'une valeur explicitement vide
Modifié (Changed)
- L'import XFDF accepte les éléments et attributs préfixés par un espace de noms, le contenu mixte texte et CDATA, les références d'entité et les valeurs significatives en espaces tout en rejetant les références scalaires Unicode invalides
- L'import et l'export XFDF utilisent une correspondance de champs indexée et des tampons géométriques bornés, améliorant le débit et le comportement d'allocation de pointe pour les formulaires profondément imbriqués, les grandes collections d'annotations, les listes d'encre, les sommets et les quadrilatères de balisage
- La validation PDF/A et PDF/UA utilise une croissance bornée pour les grandes collections de pages, de flux, de noms de structure et de RoleMap ; la résolution RoleMap PDF/UA suit désormais les tableaux directs et les objets indirects de nom ou de tableau à génération exacte
Corrigé (Fixed)
- Les allers-retours XFDF préservent désormais les chemins de champs profondément imbriqués, les valeurs de champ explicitement vides, les contenus d'annotation explicitement vides et la distinction entre contenus absents et vides
- Les chargements de tampons mémoire invalides et les affectations de pages hors plage sont rejetés sans laisser d'état partiel de document ou de page, et un échec de rechargement de page natif préserve la page précédemment active
- Les grands identifiants de contenu marqué et les tampons de métadonnées de signature sont bornés et validés avant l'allocation ou l'accès natif
Version 2.42.0
Ajouté (Added)
TPdfMatrixfournit désormaisInvert,TryInvert,TransformPointetTransformRectpour le mappage de coordonnées, les tests de positionnement, les bornes normalisées et la gestion explicite des matrices singulièresTPdf.WrapTexta gagné une surchargeBreakLongWordsqui découpe le texte CJK et autre texte sans espaces tout en gardant ensemble les paires de substitution UTF-16 validesTPdfAnnotation.AttachmentPointSetsexpose chaque quadrilatère dans les annotations de balisage multilignes tandis que le champAttachmentPointsexistant reste un alias du premier ensemble
Modifié (Changed)
- L'extraction de texte, la construction de contenu lisible, la recherche de mots et le mappage des décalages de texte parlé utilisent désormais une allocation bornée et des chemins de recherche binaire, réduisant les allocations répétées et les balayages linéaires sur les grandes pages
- La sérialisation ASN.1 et la génération de PDF chiffrés utilisent désormais des tampons de sortie géométriques ; l'ordre des objets chiffrés utilise un tri
O(n log n)et les lignes xref sont écrites directement dans le tampon final WrapTextpréserve les limites de ligne CR, LF et CRLF et réutilise un seul objet de mesure natif pour toute l'opération- L'import et l'export XFDF préservent chaque quadrilatère de balisage ; l'import applique aussi les couleurs RGB/intérieures et analyse les coordonnées décimales indépendamment des paramètres régionaux du processus
Corrigé (Fixed)
- Les appelants existants peuvent à nouveau mettre à jour le contenu et l'auteur d'une annotation en affectant des chaînes non vides sans définir les sentinelles plus récentes
HasContentsetHasAuthor - Les chaînes d'annotation explicitement vides utilisent désormais un tampon natif valide à terminaison zéro, de sorte qu'effacer
/Contents,/Tet d'autres clés de texte facultatives ne transmet plus un pointeur nil à PDFium
Version 2.41.0
Modifié (Changed)
- Les rapports de contrôle en amont
SaveJsonToFile,SaveMarkdownToFileetSaveTextToFileécrivent désormais en UTF-8 sous Delphi (correspondant auSaveHtmlToFileexistant), au lieu de la page de code ANSI du système ; les caractères non-ASCII dans les chemins de fichiers, les recommandations et les notes de portée étaient déformés sous Delphi lors de l'enregistrement via ces méthodes SaveCsvToFileécrit désormais en UTF-8 avec un préfixe BOM, de sorte qu'Excel pour Windows détecte automatiquement l'encodage ; sans le BOM, Excel traite un CSV UTF-8 comme la page de code 1252 et altère les caractères non-ASCII
Corrigé (Fixed)
- La démo
ExtractImagesfuyait les objetsTBitmapmis en cache dansFExtractedImageslorsque le formulaire était fermé sans être explicitement effacé au préalable ; le formulaire surcharge désormaisDestroypour appelerClearExtractedImages, libérant chaque bitmap mis en cache
Version 2.40.0
Modifié (Changed)
TPdf.RenderPage(HDC, ...)masque désormais les exceptions FPU/SSE autour de l'appelFPDF_RenderPage, correspondant àTPdfView.RenderPage(HDC)(corrigé dans la v2.25.0) et à chaque point d'entrée de rendu renvoyant un bitmap ; la surcharge directe vers DC au niveau deTPdflaissait auparavant les exceptions FPU non masquées sur les compilateurs antérieurs à D12
Corrigé (Fixed)
ColorToARGBrenvoie désormais un pixel entièrement transparent (alpha 0) pourclNoneetclDefaultau lieu de traiter la valeur sentinelle comme une couleur RGB littérale ; le comportement précédent produisait un remplissage sombre et presque opaque lorsqu'un appelant transmettaitclNoneen s'attendant à “aucune couleur”
Version 2.39.1
Corrigé (Fixed)
- Les sauvegardes explicites PDF 1.3 suppriment désormais les entrées
/SMask /None,/AIS falseet/TK truequi ne font que répéter l'état graphique initial tout en continuant de rejeter l'état de transparence non défini par défaut
Version 2.39.0
Modifié (Changed)
CreatePDFetImageToPDFutilisent désormais des destinations de sauvegarde confirmées et signalent le succès uniquement lorsqueSaveAsse termine avec succèsBatchExport,PDFtoJpgetSplitPDFallouent désormais des répertoires de sortie uniques afin que les exécutions répétées et les entrées de même nom préservent les résultats précédentsSplitViewenveloppe désormais la recherche une seule fois sans laisser d'état de page masqué après une annulation ou en l'absence de correspondance, et interrompt les travaux d'impression incomplets au lieu de soumettre une sortie partielle
Corrigé (Fixed)
MergePDFrejette désormais les jetons de plage de pages malformés et les chemins de sortie écrasant la source, compte les pages réellement importées et refuse d'enregistrer un résultat vide- Les démos Delphi et C++Builder
Attachmentvalident désormais les sauvegardes sur le même chemin via un remplacement de fichier sécurisé contre les échecs, de sorte qu'un renommage ayant échoué ne puisse pas supprimer le PDF d'origine
Version 2.38.0
Modifié (Changed)
SetAnnotationDataprotège désormais les écritures de/Contentset/Authorderrière les sentinellesHasContents/HasAuthorsurTPdfAnnotation, correspondant au modèleHasName/HasSubject/HasIconexistant ; auparavant, ces deux champs étaient écrits inconditionnellement, de sorte que l'attribution d'un enregistrementDefault(TPdfAnnotation)pour mettre à jour uniquement la couleur ou les drapeaux écrasait silencieusement le contenu et l'auteur existants de l'annotation avec des chaînes vides ;GetPageAnnotationdéfinit désormais les sentinelles afin qu'un cycle de lecture-modification-écriture préserve les valeurs d'origine
Corrigé (Fixed)
GenerateFormAppearanceslit désormais la valeur de la case à cocher ou du bouton radio viaFPDFAnnot_GetFormFieldValue(qui remonte jusqu'au dictionnaire de champ parent selon la norme ISO 32000-1 §12.7.5) au lieu deFPDFAnnot_GetStringValue(Annot, 'V', ...)(qui lit le dictionnaire de widget) ; le widget ne contenant généralement pas de/V,/ASn'était jamais synchronisé avec l'état coché et une case à cocher ou un bouton radio aplati s'affichait comme non coché
Version 2.37.0
Modifié (Changed)
ParseTsaUrllimite désormais le port à1..65535après l'analyse ; une valeur de port trop grande aurait sinon bouclé par troncatureDWORDet aurait pu atterrir sur un port valide- Le
ParseFieldde XFDF accepte désormais un paramètre de profondeur (par défaut 0, limité à 64) et renvoie un champ vide à la limite, de sorte qu'une chaîne de<field>imbriquée de manière malveillante à 100 000 niveaux ne puisse plus provoquer de dépassement de pile
Corrigé (Fixed)
- La requête HTTP TSA se protège désormais contre un corps de requête vide avant de passer
@ReqDer[0]àWinHttpSendRequest; une déréférence de tableau dynamique de longueur nulle aurait accédé à un pointeur non initialisé ;BuildTimeStampReqrenvoie toujours une SEQUENCE non vide, mais le site d'appel défend désormais le contrat
Notes (Notes)
- Le commentaire d'en-tête de
FPdfTsaWinconcernant la vérification de révocation HTTPS a été corrigé : WinHttp valide la chaîne de certificats du serveur par défaut mais n'effectue pas de vérification de révocation CRL/OCSP sauf si cela est explicitement activé viaWinHttpSetOption; la formulation précédente affirmait que la vérification de révocation “était gratuite”, ce qui était trompeur
Version 2.36.0
Modifié (Changed)
- Les requêtes HTTP TSA envoient désormais un en-tête
Content-Lengthexplicite en plus des en-têtesContent-TypeetAccept; WinHttp le synthétise à partir de la longueur totale, mais certains proxys RFC 3161 exigent un en-tête explicite et rejettent la requête avec411 Length Requiredsans celui-ci - L'exportation XFDF supprime désormais les caractères de contrôle C0 (autres que TAB/LF/CR qui sont déjà échappés) au lieu d'émettre une séquence antislash-hexadécimale invalide ; l'échappement précédent
\-01Fn'est pas du XML valide (l'antislash n'a pas de signification particulière en XML), donc tout lecteur conforme aurait rejeté le document comme malformé InjectAssociatedFilesécrit désormais/Subtypesur le dictionnaire de flux EmbeddedFile lorsque l'appelant fournitTAssociateFile.MIMEType; le champ était déclaré et documenté mais l'injecteur codait auparavant en dur/Type /EmbeddedFileet l'ignorait (la norme ISO 32000-2 §7.11.4 autorise/Subtypesur le flux)
Corrigé (Fixed)
- L'importation XFDF sautait le premier octet de contenu après un BOM UTF-8 et le premier octet lorsqu'aucun BOM n'était présent :
BytesToAnsi(Bytes, 4, ...)(BOM) etBytesToAnsi(Bytes, 1, ...)(pas de BOM) utilisaient des décalages de départ décalés d'un carBytesToAnsiprend un index de tableau basé sur 0 ; les appels utilisent désormais3et0 ExtractSignatureValueprésentait deux bogues d'indentation de type dangling-ifoùR.Position:= CNs'exécutait inconditionnellement pour les branches facultativescertificates [0]etsignedAttrs [0]; les branches sont désormais enveloppées dansbegin/endafin que la position ne soit avancée que lorsque le TLV optionnel a été réellement lu (même classe de bogue corrigée dansAddSignatureTimestampToCmsdans la v2.22.0)
Version 2.35.0
Modifié (Changed)
TFPDFAvail_IsDocAvail,TFPDFAvail_IsPageAvailetTFPDFAvail_IsFormAvailprennent désormaishints: PFX_DOWNLOADHINTSau lieu devar hints: FX_DOWNLOADHINTS, de sorte que le mode requête uniquementnullptrdocumenté (vérifier la disponibilité actuelle sans demander plus de données) soit accessible depuis Delphi ; l'en-tête PDFium autorise explicitementhintsà être nul, ce que la liaisonvarprécédente rendait impossibleTFPDF_SetSystemFontInfoprend désormaispFontInfo: PFPDF_SYSFONTINFOau lieu devar pFontInfo: FPDF_SYSFONTINFO, afin que les appelants puissent passernilpour indiquer à PDFium de cesser d'utiliser une interface de police système précédemment enregistrée (le chemin de désactivation documenté)TPdfThumbnailView.Paintcalcule désormaisVisibleRowsavec la même formule queUpdateScrollBarRange(ClientHeight div RowHeight), afin que le nombre de lignes peintes corresponde à la taille de page de la barre de défilement ; la formule précédente de peinture seule ((ClientHeight - FMarginY) div RowHeight + 1) pouvait différer d'une ligne aux hauteurs limites, gaspillant un rendu sur une ligne hors page ou manquant la dernière ligne visible
Version 2.34.0
Ajouté (Added)
TPdf.SaveAsEncrypted/SaveAsEncryptedToStream— API de haut niveau qui enregistre le document puis le chiffre avec le format PDF 2.0 AES-256-CBC (V=5/R=5/R=6) ; prend unTPdfEncryptOptionsavec mot de passe utilisateur/propriétaire, autorisations et révision ; délègue àEncryptDocumentBytes- Chiffrement des chaînes littérales StrF :
EncryptDocumentByteschiffre désormais les chaînes littérales(...)dans les objets hors flux (dictionnaire Info, etc.) en chaînes hexadécimales AES-256-CBC, correspondant au format de chiffrement de flux (IV de 16 octets + texte chiffré PKCS7) ; les chaînes hexadécimales<...>ne sont pas modifiées
Version 2.33.0
Ajouté (Added)
- Injecteur de chiffrement AES-256-CBC pour document complet dans
FPdfEncrypt.pas;EncryptDocumentBytesprend un PDF en clair et un mot de passe, chiffre chaque objet de flux indirect (IV de 16 octets + AES-256-CBC PKCS7 sous la clé de fichier), corrige/Length, ajoute l'objet dictionnaire/Encryptet reconstruit une table de références croisées classique complète + un trailer avec/Encryptet/ID; complète la pile de chiffrement PDF 2.0 (bloc AES + GCM + SHA-512/384 + dérivation de clé R6 + dictionnaire + balayage de document) - Assistant
EncryptStreamPayload— le format de flux PDF 2.0 AES-256 (IV ajouté au texte chiffré AES-CBC-PKCS7), réutilisable par les appelants qui gèrent leur propre disposition d'objets
Version 2.32.0
Ajouté (Added)
- La nouvelle unité
FPdfSha512.pasimplémente le hachage SHA-512 / SHA-384 (FIPS 180-4) entièrement en Pascal ; ces fonctions sont nécessaires à la boucle de hachage des mots de passe PDF 2.0 R6, qui choisit SHA-256/384/512 à chaque tour selon le résultat mod-3 d’une valeur de 128 bits ; l’implémentation a été vérifiée avec le vecteur de test FIPS-180-4 B.1 - La nouvelle unité
FPdfEncrypt.pasassure la dérivation des clés de chiffrement PDF 2.0 et la construction du dictionnaire Encrypt ; elle implémente l’algorithme 2.B d’ISO 32000-2 §7.6.4.3 (boucle de hachage R6 : AES-128-CBC + sélection itérative de SHA-256/384/512), dérive la clé de chiffrement du fichier de 32 octets ainsi que les entrées/O,/U,/OE,/UEet/Perms, puis construit le dictionnaire Encrypt V=5/R=5/R=6 avec/CFM /AESV3; les tampons d’octets suivent le modèle TBytes
Version 2.31.0
Ajouté (Added)
- La nouvelle unité
FPdfAes.pasfournit les primitives de chiffrement par blocs AES (FIPS 197) : AES-128 et AES-256 entièrement en Pascal, fonctions utilitaires pour le mode CBC et backend CSPRNG ; les vecteurs de test des annexes C.2 / C.3 de FIPS-197 en vérifient la justesse ; ces primitives constituent la base cryptographique de la pile de chiffrement PDF 2.0 - Chiffrement authentifié AES-GCM (NIST SP 800-38D) dans la nouvelle unité
FPdfAesGcm.pas; implémente GHASH (multiplication GF(2^128)), GCTR et la construction GCM AEAD sur les primitives de bloc AES ; les cas de test NIST GCM 1 et 3 (AES-128) correspondent exactement au texte chiffré et à la balise officiels ; le cas de test 13 (AES-256) effectue un aller-retour complet ; GCM est le mode ISO/TS 32003 pour le PDF 2.0 - Validation de l'intégrité de ParentTree et ClassMap pour PDF/A Level A (ISO 19005-1 §6.8.3) ;
pvaiParentTreeMissingsignale un StructTreeRoot sans l'arbre de nombres /ParentTree ;pvaiClassMapUnresolvedsignale une référence de classe /C sans /ClassMap
Version 2.30.0
Ajouté (Added)
- Injection de fichiers associés (
InjectAssociateFiles/TPdf.SaveAsWithAssociateFiles, ISO 32000-2 §7.11.4) ; la nouvelle unitéFPdfAssocFilesattache des tableaux/AFde références filespec au catalogue ou à tout dictionnaire de page, couvrant les huit valeurs de/AFRelationshipde la table 45 de la norme ISO 32000-2 ; réutilise le modèle de mise à jour incrémentielle éprouvé parInjectPadesDssMarkers - Prise en charge de PDF/X-6 (ISO 15930-9:2020) ;
TPdfXConformanceajoutepxc6; l'injecteur et le validateur le transmettent via l'identificationpdfxid:GTS_PDFXVersion; PDF/X-6 est le successeur basé sur PDF 2.0 de PDF/X-4 pour un échange complet - PDF/A interdit l'action
/Thread(lacune dans la liste blanche ISO 19005-1 §6.6.1) ; la liste des actions interdites couvre désormais Thread aux côtés de Launch, ResetForm, ImportData, SetOCGState, SetState, GoTo3DView, Rendition et Hide
Corrigé (Fixed)
- Le chemin de validation PDF/A-4e respecte désormais les mêmes vérifications de structure balisée, de MarkInfo et de césure que le Level A ; le déclassement côté sauvegarde de la v2.29.0 couvrait
PdfAIsLevelE, mais trois portes deValidatePdfACompliancevérifiaient uniquementPdfAIsLevelA, de sorte qu'un document PDF/A-4e sans structure balisée passait silencieusement - Dérive de test OCG
/BaseState: la passe PostProcess de la v2.28.0 a correctement élargi l'acceptation à/ONou/OFF(ISO 32000-1 Table 8.70), mais les tests Delphi et C++ s'attendaient toujours à ce que/OFFsoit rejeté ; les tests utilisent désormais une valeur réellement invalide (/Undefined) et un nouveau test positif verrouille l'acceptation de/OFF - Sur-appariement géospatial
/Subtype /GEO:ContainsDictionarySubtype('GEO')correspondait à tout dictionnaire portant le jeton, y compris ceux non liés comme un/ViewerPreferences << /Subtype /GEO >>parasite ; le nouveauContainsMeasureDictionarySubtypeexige en outre/Type /Measureou une clé sœur exclusive à Measure, de sorte que les dictionnaires non-Measure ne déclenchent plus l'exigence ExtensionLevel 3 de ADBE
Version 2.29.0
Ajouté (Added)
- Prise en charge de PDF/A-4 (ISO 19005-4:2020) dans le validateur, l'injecteur XMP et la couche de modèle d'objet Pdfium ;
TPdfAConformanceajoutepac4base,pac4fetpac4e; le niveau de base est le PDF 2.0 (ISO 32000-2) et remplace les anciens niveaux A/B/U par base + F (formulaire) + E (accessibilité) ;ValidatePdfAlit un paquet XMPpdfaid:part=4(la base omet l'élément de conformité),SaveAsPdfAl'émet, etSignPadesWithPdfAacceptepac4basecomme conteneur d'archivage à long terme - Liaison
FPDFBookmark_GetColor— le dernier export public non lié de PDFium (469/469) ;TBookmarkobtient les champsHasColoretColorrenseignés à partir du tableau/Cdu signet (ISO 32000-1 §12.3.3) ; la liaison utilise un chargement tolérant afin que les anciennes DLL antérieures à l'exportation continuent de fonctionner - Vérification de la version d'en-tête PDF/E-1 (ISO 24517-1 §5)
pveiBadPdfVersion— PDF/E-1 est basé sur le PDF 1.6 et un en-tête non-1.6 est désormais signalé pvriEncryptVersionMismatchpour PDF/R-1 (ISO 23504-1) — le chiffrement est autorisé uniquement sur un en-tête%PDF-2.0; un corps 1.x portant/Encryptest désormais signalé (auparavant une instruction sans effet)pvriBadMediaBoxpour PDF/R-1 — chaqueMediaBoxde page doit être[0 0 w h];PdfRHasNonZeroMediaBoxOriginest un analyseur ASCII indépendant de la localisation qui ignore les MediaBox à référence indirectepvaiRoleMapUnresolvedpour PDF/A Level A (ISO 19005-1 §6.8.3.4) — un RoleMap présent mais incomplet qui laisse les types de structure personnalisés/Snon mappés est désormais signalé, comblant la lacune laissée par la vérification existante de présence seulepvaiRoleMapMissing
Corrigé (Fixed)
PdfVersionToName(20)renvoyait"1.0"au lieu de"2.0", corrompant l'entrée/Versiondu catalogue et les messages du validateur pour chaque sauvegarde PDF 2.0 ; le formateur divise désormais explicitement majeur.mineur pour les codes de version>= 20- Le codeur d'entiers négatifs de
FPdfAsn1.pasne parvenait pas à compiler sous Delphi 12 (E2015surInteger(-(V<0))), bloquant l'ensemble du projet de test ; corrigé en utilisantInt64(-Ord(V<0))pour le masque d'extension de signe - La liste des annotations interdites de PDF/A comprend désormais
/RichMediadans toutes les parties (auparavant omise ; la norme ISO 32000-1 §12.5.6.35 l'interdit dans le PDF/A)
Version 2.28.0
Ajouté (Added)
TPdfVersioninclut désormaispv20pour le PDF 2.0 (ISO 32000-2) ;DecodePdfVersion(20)renvoiepv20au lieu depvUnknown, etEncodePdfVersion(pv20)émet 20 de sorte que la version d'un document PDF 2.0 n'est plus perdue lors de la relecture et peut être écrite explicitement
Modifié (Changed)
DecodeDateanalyse désormais les chaînes de date PDF avec des champs de fin facultatifs selon la référence PDF 3.8.3, au lieu de requérir la forme complète de 23 caractèresD:YYYYMMDDHHmmSSOHH'mm'; les dates tronquées conformes telles queD:20260712,D:20260712153000etD:20260712153000Zsont désormais acceptées ; auparavant, elles étaient rejetées par une barrière stricte deLength=23; le décalage horaire du fuseau est désormais validé par rapport à la plage réelle UTC-12..UTC+14 au lieu de> 23FPdfMeasure.MeasureTextencode désormais le nom de la police sous forme d'AnsiStringFPC /UTF8EncodeDelphi, correspondant aux autres sites d'appel FPDF_BYTESTRING de la bibliothèque, au lieu d'un simple transtypageAnsiStringqui déformait les noms de famille non-ASCII à travers la page de code courante
Corrigé (Fixed)
- Le chemin de valeur négative de
TDerWriter.Integerplantait ou produisait un DER malformé : la bouclewhile V <> -1 do V := V shr 8laissaitInnervide pourValue = -1(erreur de plage sur leInner[Length(Inner)-1]suivant) et surproduisait des octets pour d'autres négatifs ; le codeur extrait désormais les octets de complément à deux avec des décalages d'extension de signe et s'arrête correctement lorsque le reste est une pure extension de signe ; les champs INTEGER de CMS/PAdES sont positifs, cela n'affecte donc que les appelants transmettant des valeurs négatives, mais le chemin est désormais correct TPdf.GetCharacterOriginetTPdfView.GetCharacterOriginignoraient la valeur de retour deFPDFText_GetCharOriginet renvoyaient un point non initialisé en cas d'échec ; le résultat is désormais initialisé à zéro et une lecture ayant échoué renvoie l'origine (correspondant au contrat deGetCharacterRectangle)
Version 2.27.0
Modifié (Changed)
- Les démos Delphi, C++Builder et Lazarus
PDFVieweretMultiPageViewerbouclent désormais les recherches, acceptentEnteretF3pour le résultat suivant, réinitialisent le contexte lorsque les options changent et réserventEscà l’annulation d’une recherche ou d’une impression active - L’impression du visualiseur suit maintenant la rotation courante et choisit l’orientation portrait ou paysage afin que la rotation de la barre d’outils se reflète sur les pages imprimées
- Les trois démos
ViewerInteractionLabprennent en chargeCtrl+A,Ctrl+C,Enter,F3etEscsans intercepter la sélection et la copie natives des contrôles d’édition
Corrigé (Fixed)
- L’annulation d’impression du visualiseur C++Builder et Lazarus abandonne maintenant le travail de l’imprimante au lieu de soumettre les pages rendues avant l’annulation, et Lazarus quitte explicitement chaque boucle imbriquée de copie, page et collation
- Le bouton Cancel de la démo Delphi
MultiPageViewerest maintenant relié à son gestionnaire, et les champs de recherche C++Builder/LazarusMultiPageViewerconservent l’édition native des touches fléchées, Home et End
Version 2.26.0
Modifié (Changed)
TPdf.GetObjectBitmap,TPdf.GetBitmap,TPdf.GetThumbnailet leurs équivalentsTPdfViewacquièrent maintenant le verrou de rendu autour des appelsFPDFImageObj_GetBitmapetFPDFPage_GetThumbnailAsBitmap, commeRenderPageetRenderTile, afin d’éviter une course avecUnloadPageouReloadPageTPdf.RenderPageThumbnailrespecte maintenant l’entrée/Rotatede la page et recalcule l’ajustement selon les dimensions tournées pour les pages/Rotate 90ou270afin que le rapport hauteur/largeur de la miniature corresponde à ce que le visualiseur affiche, au lieu d’utiliser les dimensions intrinsèques (non tournées) renvoyées parFPDF_GetPageSizeByIndex
Corrigé (Fixed)
TPdfView.GetCharacterRectangleignorait la valeur de retour deFPDFText_GetCharBoxet transmettait unTPdfRectanglenon initialisé àPageToDevicelorsque PDFium signalait un échec ; le rectangle est désormais initialisé à zéro et unGetCharBoxen échec renvoieRect(0,0,0,0)- La longueur de tampon des chemins URI et fichier de
GetLinkAnnotationsétait décalée d’un : le second appelFPDFAction_GetURIPath/GetFilePathpassaitsize(qui inclut le NUL final) comme longueur de tampon à un tampon alloué commesize-1; l’appel passe désormaissize-1, si bien qu’il ne peut plus écrire au-delà de l’allocation sur un build PDFium qui ne borne pas lui-même les longueurs
Version 2.25.0
Modifié (Changed)
TPdf.AddText,SetText,AddPathetInsertFormObjectFromXObjectinvalident désormais la page de texte en cache et les annotations de lien avant de régénérer le contenu de la page, commeSetTextPositionsetRemoveObject; auparavant, un appelGetText/GetWebLinks/FindFirstaprès l’édition de la page renvoyait des données de texte et de liens périmées capturées avant l’édition, et le handleFPDF_TEXTPAGEconservé était utilisé après la régénération du contenu, avec un comportement indéfiniTPdfView.RenderPage(HDC, ...)acquiert maintenant le verrou de rendu et masque les exceptions FPU/SSE autour de l’appelFPDF_RenderPage, comme tous les autres points d’entrée de rendu ; la surcharge directe vers DC précédente pouvait entrer en concurrence avec unUnloadPage/ReloadPagesimultané sur le même document et laissait les exceptions FPU non masquées sur les compilateurs antérieurs à D12- La démo Delphi
PrintPDFappelle désormaisPrinter.Aborten cas d’annulation au lieu de laisser le blocfinallyatteindrePrinter.EndDoc, ce qui soumettait les pages rendues avant l’annulation ; la démo Lazarus gérait déjà cela correctement
Corrigé (Fixed)
TPdf.GetCharacter,TPdf.GetCharcodeet leurs équivalentsTPdfViewtronquaient les points de code du plan astral (emoji, CJK Extension B) renvoyés parFPDFText_GetUnicodeaux 16 bits bas viaWideChar(), produisant une substitution seule qui corrompait le traitement du texte en aval ; les caractères supérieurs à U+FFFF renvoient désormais U+FFFD (caractère de remplacement) ; utilisezGetTextpour récupérer l’encodage UTF-16 complet des caractères astrauxGetWebLinksappelaitSetLength(Rectangles, FPDFLink_CountRects(...))sans se prémunir contre un retour-1, ce qui levait uneEOutOfMemorysur une page malformée ; un compte négatif est désormais borné à zéroTPdf.Destroyefface désormais la chaînePasswordde la mémoire (viaUniqueString+FillChar) avant la libération du tampon à comptage de références, afin que le mot de passe ne reste pas lisible sur le tas après la destruction du composant
Version 2.24.0
Ajouté (Added)
TPdf.DeletePage,GetAttachment,GetAttachmentName,GetAttachmentType,SetAttachmentetDeleteAttachmentvalident maintenant les index et lèventEPdfErrorlorsqu’ils sont hors limites
Corrigé (Fixed)
- Les fuites de handles d’objets de page en cas d’échec dans
TPdf.AddText,AddBitmapetAddJpegImage: lorsqueFPDFText_SetText,FPDFImageObj_SetBitmap,FPDFImageObj_SetMatrixouFPDFImageObj_LoadJpegFileInlineéchouait après la création de l’objet mais avant queFPDFPage_InsertObjectne le remette à la page, le handle natifFPDF_PAGEOBJECTfuyait ; chaque chemin détruit désormais l’objet lors de l’exception avant de la relancer TPdf.UnloadPageabandonnait un handleFPathen cours (défini parCreatePathmais pas encore consommé parAddPath) en le mettant ànilsans appelerFPDFPageObj_Destroy; le handle est désormais détruit, si bien qu’un chemin créé puis abandonné (ou interrompu par un changement de page) ne fuit plusTPdf.InsertFormObjectFromXObjectomettait l’appelUpdatePage(FPDFPage_GenerateContent) que chaque insertion sœur (AddText/AddPath/AddBitmap/AddJpegImage/SetText/RemoveObject) effectue, si bien qu’un Form XObject inséré de cette manière disparaissait au prochain rechargement ou enregistrement ;UpdatePageest désormais appelé après l’insertion
Version 2.23.0
Corrigé (Fixed)
- La validation du
/BaseStatedu contenu optionnel accepte désormais/OFFen plus de/ON(ISO 32000-1 Table 8.70 autorise les deux) ; la vérification précédente rejetait des configurations légitimes/OCProperties /D /BaseState /OFFavec une erreur de contenu optionnel malformé alors que le fichier était conforme - La validation du
/Intentdu contenu optionnel accepte désormais/Designet les tableaux de noms tels que[/View /Design], et pas seulement le littéral/View; ISO 32000-1 Table 8.70 définit/Intentcomme un nom ou un tableau de noms tirés de/Viewet/Design; la vérification à valeur unique précédente rejetait à tort des sorties d’authoring standard - La détection du dictionnaire Measure géospatial pour la barrière PDF 1.7
/Extensions /ADBEExtensionLevel 3 ne requiert plus/Type /Measure, que ISO 32000-1 Table 254 marque facultatif ; les producteurs GeoPDF qui omettent/Type(PDFBox, QGIS, FME) contournaient auparavant la barrière et produisaient silencieusement des sorties PDF 1.7 non conformes ; le détecteur correspond désormais à/Subtype /GEOseul
Version 2.22.0
Modifié (Changed)
- Les calculs de zoom d’ajustement de
TPdfView(GetPageZoom,GetPageWidthZoom,GetPageHeightZoom) utilisent maintenantClientWidth/ClientHeightau lieu duWidth/Heightde la fenêtre, si bien quepfmFitPage/pfmFitWidth/pfmFitHeightdimensionnent la page sur la zone visible plutôt que sur le cadre externe incluant barres de défilement et bordures, éliminant la barre de défilement redondante qui apparaissait lorsque la page ajustée dépassait légèrement la zone cliente AddSignatureTimestampToCmslève désormais uneExceptionexplicite identifiant le champ CMS SignerInfo illisible (version / sid / digestAlgorithm / signedAttrs / signatureAlgorithm) au lieu de sortir silencieusement parExitet de laisser une analyse partielle se poursuivre comme s’il s’agissait d’un CMS signé complet ; un blocbegin/endmanquant autour de la branche optionnellesignedAttrs [0]qui laissaitR.Positionsans avancement est également corrigé
Corrigé (Fixed)
- Fuite du handle de clé privée CNG dans
ResolveWinSigner: lorsqueCryptAcquireCertificatePrivateKeyréussissait mais que l’extraction émetteur/numéro de série suivante ouTWinCmsSigner.Createéchouait, leNCryptKeyHandlen’était jamais libéré car sa propriété ne transitait au signataire qu’en cas de constructeur réussi ; la configuration post-acquisition est désormais enveloppée afin que le handle soit libéré viaNCryptFreeObjectdès le premier échec EcDsaP1363ToDerrejette maintenant une moitiérousentièrement nulle au lieu d’émettre unINTEGER 0; les signatures ECDSA avecr = 0ous = 0sont invalides (RFC 4754 §6 / FIPS 186-4 §6 exigent1 ≤ r, s ≤ n-1) et seraient sinon acceptées comme authentiques par un vérificateur tolérant
Version 2.21.12
Corrigé (Fixed)
- Les sauvegardes PDF 1.5 à PDF 1.7 explicites rejettent maintenant les structures
/OCPropertiesdu catalogue mal formées, y compris les entrées/OCGsou/Drequises manquantes, les valeurs de configuration par défaut non valides et les entrées d'état non-tableau
Version 2.21.11
Corrigé (Fixed)
- Les sauvegardes de version PDF explicites rejettent maintenant les entrées de page
/Annotsdirectes ou indirectes dont les dictionnaires d'annotation omettent l'entrée/Subtypeou/Rectrequise
Version 2.21.10
Corrigé (Fixed)
- Les sauvegardes PDF 1.7 explicites exigent maintenant que les dictionnaires géospatiaux
/Type /Measure /Subtype /GEOet les annotations Projection déclarent/Extensions /ADBEavec/BaseVersion /1.7et/ExtensionLevel 3ou plus récent
Version 2.21.9
Corrigé (Fixed)
- Les sauvegardes PDF 1.7 explicites exigent maintenant que les annotations RichMedia et les actions
RichMediaExecutedéclarent/Extensions /ADBEavec/BaseVersion /1.7et/ExtensionLevel 3ou plus récent
Version 2.21.8
Corrigé (Fixed)
- Les sauvegardes PDF 1.7 explicites exigent maintenant que les flux PRC 3D déclarent
/Extensions /ADBEavec/BaseVersion /1.7et/ExtensionLevel 1ou plus récent, au lieu de traiter PRC comme une fonctionnalité principale de PDF 1.7
Version 2.21.7
Corrigé (Fixed)
- Les sauvegardes PDF 1.4 et antérieures explicites rejettent maintenant les entrées d'image XObject
/SMaskInData, y compris une valeur explicite de0, car les canaux de masque doux JPEG 2000 incorporés exigent PDF 1.5 ou une version ultérieure
Version 2.21.6
Corrigé (Fixed)
- Les sauvegardes PDF 1.4 et antérieures explicites rejettent maintenant les XObjects d'images 16 bits qui exigent PDF 1.5 ou une version ultérieure, tandis que les cibles PDF 1.5 à PDF 1.7 préservent leurs données d'image
/BitsPerComponent 16
Version 2.21.5
Corrigé (Fixed)
- Les sauvegardes PDF 1.4 et antérieures explicites rejettent maintenant les valeurs
/PageLayout /TwoPageLeftet/TwoPageRightdu catalogue de documents qui exigent PDF 1.5 ou une version ultérieure, tandis que les cibles PDF 1.5 à PDF 1.7 préservent la mise en page à deux pages demandée
Version 2.21.4
Corrigé (Fixed)
- Les sauvegardes PDF 1.3 explicites rejettent maintenant les entrées
/Langdu catalogue de documents qui exigent PDF 1.4 ou une version ultérieure, tandis que les cibles PDF 1.4 à PDF 1.7 préservent l'identifiant de langue
Version 2.21.3
Corrigé (Fixed)
- Les sauvegardes PDF 1.3 explicites rejettent maintenant les arborescences de noms
/EmbeddedFilesdu document qui exigent PDF 1.4 ou une version ultérieure, sans rejeter les flux de fichiers incorporés référencés par des spécifications de fichiers plus anciennes
Version 2.21.2
Corrigé (Fixed)
- Les sauvegardes explicitement ciblées sur PDF 1.3 rejettent désormais les flux de métadonnées actifs, qui nécessitent PDF 1.4 ou une version ultérieure, tout en les conservant pour les cibles PDF 1.4 à PDF 1.7
Version 2.21.1
Corrigé (Fixed)
- La validation des références hybrides applique maintenant les entrées
/XRefStmsupplémentaires avant les espaces réservés xref classiques de la même révision, de sorte que les annotations compressées et les autres objets limités par version ne sont plus omis
Version 2.21.0
Modifié (Changed)
- Tous les exemples de visionneuse Delphi, C++Builder et Lazarus peuvent maintenant ouvrir un PDF transmis comme premier argument de ligne de commande, et les exemples C++Builder et Lazarus
MultiPageViewerfournissent des raccourcis explicites pour tout sélectionner et copier
Corrigé (Fixed)
- Les exemples de visionneuse rejettent désormais les cibles de page invalides des signets et des liens, préservent les erreurs de chargement et valident de façon cohérente le zoom saisi manuellement. Ils impriment la page demandée avec ses champs de formulaire renseignés au lieu de répéter la page visible, et interrompent les travaux d’impression Delphi annulés au lieu de soumettre une sortie partielle
Version 2.20.0
Modifié (Changed)
- Tous les exemples de visionneuse Delphi, C++Builder et Lazarus proposent maintenant des raccourcis cohérents pour l’ouverture, la recherche, la sauvegarde, l’impression, le zoom et la navigation dans les pages, tandis que chaque variante de
ViewerInteractionLabprend également en charge les sauts de page, le zoom manuel validé de 10–600 %, les journaux d’interaction persistants et les vérifications d’aller-retour de coordonnées de clic
Version 2.19.1
Corrigé (Fixed)
- La validation d’une version PDF explicitement demandée suit désormais la chaîne de révisions active, qu’elle utilise des références classiques, hybrides ou des flux xref, y compris les entrées d’objets compressés. Les objets remplacés, libérés ou non référencés ne provoquent donc plus de faux échecs liés à la version requise par une fonctionnalité
Version 2.19.0
Modifié (Changed)
- Les exemples C++Builder et Lazarus de gestion des pièces jointes, d’extraction d’images et de texte, de conversion de pages et de découpage utilisent désormais des dossiers de sortie dédiés ou des fichiers finalisés de manière sûre, des noms stables complétés par des zéros, des mises à jour réactives de la progression et des bilans de fin indiquant le nombre d’erreurs par élément
Corrigé (Fixed)
- Le C++Builder
CJKTextLabmesure désormais le texte via les fonctions d'édition PDFium exportées, etMergePDFévite une surcharge de message VCL ambiguë, rétablissant des compilations RAD Studio 37 propres
Version 2.18.3
Corrigé (Fixed)
- L'horodatage de document PAdES B-LTA est désormais enregistré comme un champ de signature découvrable — un Widget invisible accessible via les
/Annotsde la première page et les/Fieldsdu AcroForm (ETSI EN 319 142-1 §5.4.3) — au lieu d'un objet orphelin inaccessible que les validateurs énumérant les champs de signature ne pouvaient pas trouver ; les annotations et champs existants sont préservés
Version 2.18.2
Corrigé (Fixed)
- La signature PAdES et l'écriture de références croisées classiques génèrent désormais une erreur claire lorsqu'un décalage d'octet dépasse la largeur de champ fixe de 10 chiffres (~9,3 Go) au lieu de laisser silencieusement le signet
/ByteRangenon écrit (produisant une signature invalide) ou de déborder la ligne xref de 20 octets (ISO 32000-1 §7.5.4) ; la sortie de flux de références croisées utilise des champs binaires de 8 octets et n'est pas affectée
Version 2.18.1
Corrigé (Fixed)
- La signature PAdES résout désormais les références indirectes
/Annots,/AcroFormet/Fieldsde la première page par en-tête d'objet complet (ISO 32000-1 §7.5.3) et par le numéro de génération réel de la référence ; une simple recherche de sous-chaîne correspondait précédemment à un numéro d'objet à l'intérieur d'un plus long (résolvant5 0 Rvers15 0 obj) et une génération codée en dur manquait les objets avecgen>0, corrompant les tableaux de champs de signature ou rejetant des documents valides - Lorsque le catalogue, la première page,
/Annots,/AcroFormou/Fieldsse trouve dans un flux d'objets, la signature réessaie sur une copie développée avant d'échouer au lieu de rejeter le document d'emblée
Version 2.18.0
Ajouté (Added)
ReadPdfVersionInfosignale la version d'en-tête, la version de cœur effective, le remplacement du catalogue et le niveau d'extension Adobe à partir d'un flux PDF
Modifié (Changed)
- Les sauvegardes explicitement ciblées sur PDF 1.3-1.7 valident désormais les structures du catalogue, des ressources de page, de XFA, de caviardage et des extensions développeur dans le contexte de l’objet qui les possède. Les sorties chiffrées avec une version explicite et la normalisation incrémentale PDF 1.3 sont rejetées pour préserver l’intégrité du document
- Les sauvegardes par chemin de fichier écrivent maintenant dans un fichier temporaire adjacent et ne remplacent la destination qu'après la réussite de toutes les compressions, normalisations et vérifications de version
Corrigé (Fixed)
- La sortie PDF 1.3 porte désormais la ressource
/ProcSetcomplète requise et supprime les clés de transparence PDF 1.4 lorsqu'elles ne font que répéter les valeurs initiales de l'état graphique PDF 1.3 - Les fichiers hybrides, à flux xref et à flux d'objets ne sont plus réécrits par le compresseur xref classique, évitant la suppression des entrées d'objets compressés
- Les noms ressemblant à des clés de transparence ou de fonctionnalité de catalogue à l'intérieur de chaînes, de commentaires ou de cartes de ressources non liées ne provoquent plus de faux échecs de version cible
Version 2.17.0
Ajouté (Added)
- Les signatures PAdES sont désormais enregistrées comme annotations Widget invisibles dans le tableau
/Annotsde la première page et dans le tableau/Fieldsdu AcroForm, préservant les annotations et champs de formulaire existants
Modifié (Changed)
- Les mises à jour incrémentielles PDF/A, PDF/X, PDF/E, PDF/R, PDF/UA, PDF/VT et PAdES préservent désormais la représentation de références croisées source : les documents à flux xref reçoivent une mise à jour de flux xref comme requis par ISO 32000-1 §7.5.8.1, tandis que les documents classiques continuent de recevoir une table xref
- Les décalages de références croisées,
startxref,/Prev, les valeurs ByteRange PAdES et le traitement de plage SHA-256 utilisent désormais des positions 64 bits avec hachage par blocs, permettant les fichiers de plus de 2 Go dans les versions 64 bits - Les paquets XMP inscriptibles générés réservent désormais 2048 octets de rembourrage avant l'instruction de fermeture du paquet
Version 2.16.10
Corrigé (Fixed)
- L'expansion de flux d'objets ne ressuscite plus les copies périmées d'objets qu'une mise à jour incrémentale a migrés hors du flux d'objets vers une définition simple (ISO 32000-1 §7.5.7) ; les vérifications de conformité et l'injection de marqueurs résolvaient précédemment le catalogue ou le dictionnaire de métadonnées obsolète sur de tels fichiers
Version 2.16.9
Corrigé (Fixed)
- Sur Free Pascal, les chaînes de texte dont l'entrée n'est pas un UTF-8 valide sont élargies octet par octet en Latin-1 et écrites comme chaînes hexadécimales UTF-16BE ; les octets élevés bruts se retrouvaient précédemment dans une chaîne littérale, ce qui n'est pas un encodage de chaîne de texte PDF 1.7 légal
- Le décodage de flux reconnaît désormais les données deflate brutes sans enveloppe zlib RFC 1950 (un défaut courant des rédacteurs défectueux) et les décompresse en mode brut, de sorte que les analyses de conformité ne deviennent plus silencieusement aveugles sur de tels flux
Version 2.16.8
Corrigé (Fixed)
- Les mises à jour incrémentielles écrites par le chemin de post-traitement de sauvegarde rafraîchissent désormais le second élément (changeant)
/IDdu trailer comme requis par ISO 32000-1 §14.4 ; les deux éléments étaient précédemment copiés verbatim, de sorte que les outils de mise en cache et de synchronisation voyaient un identifiant inchangé après chaque mise à jour
Version 2.16.7
Corrigé (Fixed)
- L'effacement du corps de flux utilisé par les analyses de conformité exige désormais que le mot-clé
streamsoit suivi d'un saut de ligne (ISO 32000-1 §7.3.8.1) ; le mot dans une chaîne littérale telle que(downstream)effaçait précédemment toute la structure suivante jusqu'au prochainendstream, cachant de réelles violations aux vérifications au niveau des octets - Les analyses de fonctionnalités interdites PDF/X et PDF/E effacent en outre les chaînes littérales et les commentaires (§7.2.2), de sorte qu'une valeur telle que
/Title (see /JavaScript docs)ou un jeton commenté ne produit plus un résultat faussement positifJavaScript,AcroFormouLZWDecode
Version 2.16.6
Corrigé (Fixed)
- Les entrées DPM PDF/VT sont désormais validées à l'écriture comme documenté : les noms de clés violant la règle NMTOKEN de l'ISO 16612-2 §6.6 ou la règle de préfixe de registrant de l'Annexe E, et les noms dupliqués, sont rejetés au lieu d'être écrits dans le dictionnaire DPart — un nom contenant un espace se divisait précédemment en une paire clé/valeur fictive et corrompait le dictionnaire
Version 2.16.5
Corrigé (Fixed)
- La suppression d'une entrée de dictionnaire dont la valeur est une chaîne hexadécimale (telle que
/Check <...>) supprime désormais l'entrée entière ; les injecteurs laissaient précédemment une valeur hexadécimale orpheline, produisant un dictionnaire syntaxiquement cassé - La suppression d'une entrée dont la référence indirecte utilise des sauts de ligne entre les jetons (ISO 32000-1 §7.3.10 autorise tout espace blanc) ne laisse plus le numéro de génération et le mot-clé
Rderrière
Version 2.16.4
Corrigé (Fixed)
- L'analyse du numéro d'objet maximum n'exige plus que les en-têtes d'objet commencent une ligne (ISO 32000-1 §7.5.3 autorise tout espace blanc ou délimiteur avant eux), de sorte que les injecteurs ne peuvent plus allouer un numéro d'objet qui entre en collision avec un en-tête
N G objen ligne et corrompre silencieusement le fichier ; les numéros d'objet sont bornés par le plafond de l'Annexe C - Les flux dont
/Lengthest une référence indirecte résolvent désormais l'objet entier référencé et utilisent sa valeur lorsqu'elle s'aligne avec leendstreamde fermeture ; de tels flux étaient précédemment délimités par une recherche de motif, qui tronquait les corps contenant légalement la séquence d'octetsendstream— typique pour les pièces jointes PDF intégrées
Version 2.16.3
Corrigé (Fixed)
- Les passes de compression de flux transmettent les documents à flux de références croisées (fichiers PDF 1.5+ sans mot-clé
trailerclassique) inchangés ; le chemin de reconstruction analysait précédemment malstartxrefcomme emplacement de table et synthétisait un trailer deviné, ce qui pouvait produire un fichier non ouvrable - Le compresseur ignore les flux de métadonnées XMP pour qu'un document PDF/A conserve son flux de métadonnées non filtré obligatoire (ISO 19005-1 §6.7.2), et laisse intacts les flux de fichiers externes (
/Favec/FFilter) - La table de références croisées reconstruite analyse une copie du document sans flux, de sorte que le contenu binaire de flux ne peut plus imiter les en-têtes d'objets ou gonfler la table ; le
/Sizedu trailer reconstruit reflète désormais la table réelle et les numéros d'objet sont plafonnés au plafond de l'Annexe C - La localisation de la table de références croisées d'origine accepte les terminaisons de ligne CR uniquement (ISO 32000-1 §7.5.1) et ne peut plus correspondre aux lettres
xrefà l'intérieur destartxref; l'analyse de mots-clés de flux a obtenu la même gardeendstreamutilisée ailleurs et avance maintenant après les corps de flux ignorés
Version 2.16.2
Corrigé (Fixed)
- L'analyse d'entiers dans les lecteurs PDF au niveau des octets accepte désormais le signe explicite
+autorisé par ISO 32000-1 §7.3.3 et rejette les séquences de chiffres qui déborderaient, de sorte que les documents hostiles ou corrompus ne peuvent plus envelopper les longueurs et décalages analysés en valeurs trompeuses
Version 2.16.1
Corrigé (Fixed)
- L'injecteur PDF/UA écrit la valeur
/Langdu catalogue comme une chaîne de texte PDF appropriée ; il exécutait précédemment la valeur via l'échappeur XML, de sorte qu'une balise de langue contenant&ou des parenthèses produisait une entrée corrompue, et l'entrée non-ASCII était écrite en UTF-8 brut - L'entrée Info
/ISO_PDFEVersionde PDF/E utilise l'encodeur de chaîne de texte partagé, gardant les valeurs non-ASCII légales en PDF 1.7 - L'échappement XML pour les paquets XMP supprime les caractères de contrôle illégaux en XML 1.0, de sorte que les métadonnées copiées depuis un document source endommagé ne peuvent plus rendre l'ensemble du flux de métadonnées malformé
- La conversion de date PDF vers XMP valide que les champs de date sont numériques et complète un champ de minutes manquant, empêchant les dates ISO 8601 malformées dans le XMP généré ; sur les plateformes non-Windows, l'horodatage de repli inclut désormais l'heure du jour au lieu de la date seule
Version 2.16.0
Ajouté (Added)
- Le décodage de flux reconstruit désormais les prédicteurs
/DecodeParms(prédicteurs PNG 10–15 et prédicteur TIFF 2, ISO 32000-1 §7.4.4.4) après FlateDecode, en respectant/Colors,/BitsPerComponentet/Columns; les flux d'objets compressés avec un prédicteur — un choix courant des rédacteurs PDF 1.5+ — affichaient précédemment des octets différenciés, de sorte que les objets qu'ils portent étaient silencieusement invisibles pour les analyses de conformité et l'injection de marqueurs
Corrigé (Fixed)
- La détection FlateDecode analyse désormais la valeur
/Filtercomme un nom ou un tableau au lieu d'une correspondance de sous-chaîne, de sorte que les chaînes de filtres en cascade et les occurrences du mot dans des valeurs non liées ne déclenchent plus un inflate fictif ; les chaînes non prises en charge reviennent aux octets bruts comme avant
Version 2.15.1
Corrigé (Fixed)
- L'analyseur de dictionnaire ignore désormais les chaînes littérales, les chaînes hexadécimales et les commentaires lors de l'équilibrage de
<</>>(ISO 32000-1 §7.2.2), de sorte que les dictionnaires contenant des valeurs telles que(A >> B)ou une chaîne hexadécimale adjacente au délimiteur de fermeture ne sont plus tronqués lors de l'analyse du trailer, du catalogue et des analyses de conformité - L'extraction de chaînes littérales décode désormais l'ensemble d'échappement complet §7.3.4.2 Tableau 3 —
\n \r \t \b \f, octal\ddd, continuations de ligne et normalisation EOL non échappée — au lieu de copier la lettre d'échappement verbatim, restaurant les comparaisons correctes de/Producer,/GTS_PDFXVersionet/ISO_PDFEVersionpour les rédacteurs qui utilisent des échappements octaux - Les chaînes littérales écrites par les injecteurs de marqueurs échappent désormais CR, LF et autres caractères de contrôle afin que les valeurs survivent à la normalisation de fin de ligne côté lecture octet pour octet
Version 2.15.0
Corrigé (Fixed)
- Les mises à jour incrémentielles écrites par les injecteurs de marqueurs PDF/A, PDF/X, PDF/E, PDF/R, PDF/UA et PDF/VT et par les chemins de signature PAdES et DSS préservent désormais l'identifiant de fichier permanent du document source : le premier élément
/IDdu trailer est reporté verbatim comme requis par ISO 32000-1 §14.4 et seul le second élément (changeant) est actualisé ; précédemment les deux éléments étaient régénérés, de sorte que les références externes et les flux de travail de validation à long terme voyaient une identité de document différente après chaque sauvegarde - Les signatures PAdES, l'injection DSS et les horodatages de document B-LTA portent désormais la référence
/Infodu trailer source (ISO 32000-1 §7.5.6), de sorte que les propriétés du document ne disparaissent plus des panneaux de lecture après la signature ; le trailer du horodatage de document gagne également le tableau/ID - Le repli
/Infodu trailer pour les documents à flux de références croisées localise désormais correctement le dictionnaire de flux XRef et préserve le numéro de génération de la référence ; il ne correspondait précédemment jamais sur les fichiers PDF 1.5+ conformes, abandonnant silencieusement/Info
Version 2.14.4
Corrigé (Fixed)
- La date
/Mdu dictionnaire de signature écrite parTPdf.SignPadesetSignPadesBytesporte désormais le préfixe obligatoireD:et le marqueur de décalage UTCZrequis par ISO 32000-1 §7.9.4 ; les validateurs stricts rejetaient précédemment l'heure de signature comme une chaîne de date malformée
Version 2.14.3
Corrigé (Fixed)
- Les recherches de clés de dictionnaire dans le lecteur PDF partagé correspondent désormais à des jetons de nom entiers (ISO 32000-1 §7.3.5) ; précédemment un flux dont le dictionnaire listait
/Length1avant/Length(typique pour les flux FontFile) était tronqué au mauvais nombre d'octets, aveuglant silencieusement les analyses de conformité PDF/A, PDF/UA et autres qui lisent les flux de polices, CMap ou de métadonnées - Les recherches de trailer
/Encrypt,/Root,/Sizeet/Infone correspondent plus aux clés plus longues partageant le même préfixe (comme/EncryptMetadata) - L'expansion de flux d'objets ne fait plus confiance à une valeur
/Ncorrompue ou hostile : les valeurs non entières donnent désormais 0 au lieu d'un nombre non initialisé, et une limite supérieure dérivée de/Firstempêche les allocations surdimensionnées lors de l'analyse de documents malformés
Version 2.14.2
Corrigé (Fixed)
- Les injecteurs de marqueurs PDF/X, PDF/VT, PDF/UA, PDF/E et PDF/R copient désormais les documents source chiffrés inchangés au lieu d'ajouter des sections de mise à jour en texte clair ; le comportement précédent produisait des fichiers dont le dernier trailer perdait l'entrée
/Encrypt(ISO 32000-1 §7.5.6), de sorte que les lecteurs conformes lisaient mal le corps chiffré comme texte clair TPdf.SignPades,SignPadesBytesetInjectPadesDssMarkerslèvent désormaisEPadesCryptolorsque le document source est chiffré, au lieu d'émettre silencieusement un fichier corrompu ou invérifiable ; supprimez le chiffrement avant de signer ou d'intégrer du matériel DSS
Version 2.14.1
Corrigé (Fixed)
TPdf.SignPadesetSignPadesBytesremplissent désormais rétroactivement les quatre champs/ByteRangedu dictionnaire de signature ; précédemment les trois derniers champs restaient à leurs valeurs zéro de substitution, de sorte que les signatures produites déclaraient une plage d'octets vide et échouaient à la vérification dans les validateurs conformes- Les dictionnaires d'horodatage de document PAdES B-LTA reçoivent la même correction de remplissage rétroactif
/ByteRange ValidatePadesComplianceaccepte désormais la disposition de signature standard où l'écart de plage d'octets contient la valeur hexadécimale/Contents, et vérifie que le second segment de plage se termine exactement à la fin du fichier ; précédemment seules les plages sans écart passaient la vérification de couverture
Version 2.14.0
Ajouté (Added)
TPdf.ExportXFDFsérialise chaque valeur de champ de formulaire et annotation sur toutes les pages vers un document XFDF (ISO 19444-1), émettant<fields>pour les valeurs de formulaire hiérarchiques et<annots>pour tous les sous-types d'annotations pris en charge (text, highlight, underline, strikeout, squiggly, line, circle, square, caret, polygon, polyline, stamp, ink, freetext, fileattachment, sound, link, redact)TPdf.ImportXFDFrelit un document XFDF dans le PDF chargé, recréant les annotations sur les pages correspondantes et appliquant les valeurs de champs à leurs annotations Widget- L'enregistrement
TPdfAnnotationa gagnéName(NM),Subject,ModificationDate(M),CreationDate,Icon,Opacity(CA), les points d'extrémité de ligne, les sommets de polygone/polyligne et les champs de geste de liste d'encre afin que les allers-retours XFDF préservent l'ensemble des métadonnées d'annotation - Nouvel exemple
XfdfLabdans les ensembles de démos Delphi, C++Builder et Lazarus démontrant l'aller-retour d'export/import
Version 2.13.6
Corrigé (Fixed)
ValidatePdfAtraite désormais les flux/Metadatadu catalogue sans/Type /Metadataou/Subtype /XMLcomme des métadonnées XMP manquantes viapvaiMissingXmpMetadata- Les rapports de contrôle préalable PDF/A classifient désormais
pvaiMissingXmpMetadatasous Métadonnées et recommandent un flux/Metadatadu catalogue avec/Type /Metadata,/Subtype /XML, XMP non filtré et marqueurspdfaid
Version 2.13.5
Corrigé (Fixed)
ValidatePdfAsignale désormais les annotations Widget sans dictionnaire d'apparence et les annotations PDF/A-2 / PDF/A-3 qui nécessitent mais manquent de/APviapvaiAnnotationApDictViolation- Les rapports de contrôle préalable PDF/A catégorisent désormais
pvaiAnnotationApDictViolationcomme un contenu que l'injection de marqueurs ne peut pas réparer
Version 2.13.4
Corrigé (Fixed)
ValidatePdfAsignale désormais les images en ligne PDF/A-2 et PDF/A-3 dont la valeur/Iou/InterpolateesttrueviapvaiImageDictionaryViolation, correspondant à la couverture existante du dictionnaire Image XObject- Les rapports de contrôle préalable PDF/A catégorisent désormais
pvaiImageDictionaryViolationcomme un contenu que l'injection de marqueurs ne peut pas réparer
Version 2.13.3
Corrigé (Fixed)
ValidatePdfAsignale désormais les images en ligne PDF/A-1 utilisant des filtres/LZWDecodeou/LZWabrégé dans les flux de contenu viapvaiInlineImageLzwForbidden, correspondant à la couverture existante des images en ligne PDF/A-2 et PDF/A-3- L'analyseur de filtres d'images en ligne avance désormais au-delà des noms de ressources précédents tels que
/GS1, évitant les blocages lors de l'analyse de flux de contenu PDF/A-1 plus larges
Version 2.13.2
Ajouté (Added)
TPdf.SetFocusedFormFieldTextécrit du texte dans le tampon d'édition du champ de formulaire actuellement focalisé viaFORM_ReplaceSelection, symétrique àFocusedFormFieldText. Pour les champs texte/combo AcroForm la valeur est validée vers/Và la perte de focus et persiste ; pour les champs texte XFA l'écriture atterrit uniquement dans le tampon en mémoire (PDFium n'expose pas d'API publique pour réconcilier les valeurs XFA vers le paquet de données, donc elle ne persiste pas après la sauvegarde)- La plateforme hôte JavaScript est désormais attachée chaque fois que le moteur V8 est disponible, indépendamment du fait que le document soit XFA — ainsi le JavaScript AcroForm intégré (scripts de niveau document, calculs de champs,
app.alert) peut également s'exécuter. Précédemmentm_pJsPlatformn'était câblé que pour les documents XFA, laissant le JS AcroForm silencieusement désactivé
Modifié (Changed)
- L'attachement de la plateforme JavaScript est désormais indépendant de la décision XFA dans
InitializeFormFill— la tablem_pJsPlatformest construite chaque fois queV8FeaturesAvailableest vrai, appliquée après le câblage de version/callback XFA plutôt qu'imbriquée dedans
Version 2.13.1
Ajouté (Added)
- De nouveaux événements hôtes exposent les informations que les callbacks de remplissage de formulaire v2.13.0 avalaient précédemment :
OnXfaUriAction,OnXfaPageCountChanged,OnXfaFocusChange,OnXfaEmail,OnXfaHttpRequest,OnXfaOpenFile,OnJavaScriptBeep,OnJavaScriptPrint,OnJavaScriptMail,OnJavaScriptSubmitForm. Chaque événement est par défaut le comportement no-op existant lorsqu'il n'est pas assigné, donc les hôtes existants ne sont pas affectés - La propriété en lecture seule
TPdf.XfaFormPacketsretourne un instantané unique de tous les paquets XFA (TXfaPacketList), répondant aux typesTXfaPacket/TXfaPacketListprécédemment déclarés mais inutilisés - Les codes d'erreur PDFium spécifiques à XFA
FPDF_ERR_XFALOAD/FPDF_ERR_XFALAYOUTsont désormais liés et exposés viaLastPdfError, remplaçant le générique "Unknown error" pour les échecs de chargement/mise en page XFA
Modifié (Changed)
FFI_DoURIActionWithKeyboardModifierconsulte désormaisOnXfaUriActionavant d'exécuter via shell une URI depuis un champ XFA, donnant à l'hôte un droit de veto (sécurité : un champ XFA malveillant pouvait précédemment lancer des URL arbitraires sans condition). Les gestionnaires non assignés préservent le défautShellExecuteWprécédentDecodeFormFieldTyperoute désormais les types de champs XFA viaIsXfaFormFieldplutôt qu'un case explicite à 8 branches, gardant l'enum aligné avecFPDF_FORMFIELD_XFA_*par décalage ordinal
Corrigé (Fixed)
ValidatePdfAsignale désormais les revendications PDF/A-1 utilisant des flux de références croisées ou des flux d'objets PDF 1.5 avec le nouveau problèmepvaiPdfA1Pdf15Structure, tout en continuant à autoriser les flux d'objets pour PDF/A-2 et PDF/A-3
Version 2.13.0
Ajouté (Added)
- Prise en charge complète du runtime XFA (XML Forms Architecture) :
TPdf.InitializeFormFillcâble désormais les 14 callbacksFPDF_FORMFILLINFOversion 2 (FFI_DisplayCaret,FFI_GotoURL,FFI_PageEvent,FFI_PopupMenu,FFI_OpenFile,FFI_EmailTo,FFI_UploadTo,FFI_GetPlatform,FFI_GetLanguage,FFI_DownloadFromURL,FFI_PostRequestURL,FFI_PutRequestURL,FFI_OnFocusChange,FFI_DoURIActionWithKeyboardModifier) et attache unIPDF_JsPlatformafin qu'unpdfium.dllactivé XFA puisse rendre et scripter des formulaires XFA dynamiques - Nouvelle unité
Lib\FPdfXfa.pasdéclarant les constantes XFA (FXFA_PAGEVIEWEVENT_*,FXFA_MENU_*,FXFA_SAVEAS_*,FPDF_FORMFIELD_XFA_*) et les typesTXfaPacket/TXfaSaveFormatqui n'étaient précédemment référencés que dans les commentaires - Lecteur de paquets XFA statique sur
TPdf:GetXfaPacketCount/GetXfaPacketName/GetXfaPacketContent/GetXfaPacketByNameplusGetXfaTemplate/GetXfaDatasets/GetXfaConfigextraient les paquets XFAtemplate,datasetsetconfigcomme XML brut sans nécessiter un runtime activé XFA — utile pour l'audit de conformité et la migration de données - Sondes de capacité :
XfaFeaturesAvailableglobal, et par documentTPdf.XfaRuntimeAvailable(siFPDF_LoadXFAa réellement réussi) etTPdf.XfaStaticReadable(si les exports du lecteur de paquets se résolvent) TPdfFormFieldTypeétendu avecfiXfa,fiXfaCheckBox,fiXfaComboBox,fiXfaImageField,fiXfaListBox,fiXfaPushButton,fiXfaSignature,fiXfaTextField, avecDecodeFormFieldTypemappant les nouvelles valeursFPDF_FORMFIELD_XFA_*- Événements hôtes JavaScript sur
TPdf:OnJavaScriptAlert,OnJavaScriptResponse,OnXfaGotoUrletOnXfaRuntimeMissingpermettent à l'hôte de personnaliser les dialogues JS et la navigation XFA, ou de réagir lorsqu'un document XFA ne peut pas démarrer le moteur - Nouvel exemple
XfaLabDelphi démontrant la détection XFA, l'extraction de paquets, le sondage des capacités et le chemin de repli en cas de runtime manquant
Modifié (Changed)
TPdf.LoadDocumentpré-analyse désormais l'entrée pour les marqueurs XFA (/XFAdans le dictionnaire AcroForm, ou/NeedsRenderingdu catalogue) et, lorsqu'ils sont trouvés, sélectionne automatiquementpdfium.v8.dllen définissantEnableV8Engine := Trueavant le premier chargement de la bibliothèque singleton ; une fois qu'unpdfium.dllordinaire est chargé le processus ne peut pas basculer, doncOnXfaRuntimeMissingsignale ce casTPdf.GetPageCountreflète désormais le nombre de pages que le moteur XFA signale viaFFI_PageEventaprès la repagination dynamique, plutôt que seulement l'arbre de pages PDF statique- Lorsqu'un document XFA est ouvert mais que le runtime est indisponible,
InitializeFormFillfixe désormaisversion=1etxfa_disabled=1au lieu de demander la version 2 avec des callbacks non assignés, ce qui risquait précédemment un déréférencement de pointeur de callback invalide
Version 2.12.2
Corrigé (Fixed)
ValidatePdfACompliancesignale désormais les espaces de noms XMP personnalisés utilisés sanspdfaExtension:schemastout en continuant à accepter les métadonnéespdfaidstandard sans déclarations d'extension- La validation des fichiers intégrés PDF/A-3 exige désormais les deux entrées
/Fet/UFde premier niveau sur les dictionnaires de spécification de fichier et ignore les clés de flux/EFimbriquées lors de la vérification de ces noms
Version 2.12.1
Corrigé (Fixed)
ValidatePdfACompliancedécode désormais les jetons de nom PDF échappés avant de faire correspondre JavaScript, LZWDecode, Type1 et les noms interdits associés, de sorte que les noms sémantiquement identiques mais obfusqués sont signalés correctement- Les vérifications d'images en ligne PDF/A rejettent désormais les valeurs
/Filteret/Fqui utilisent/LZWDecode,/LZWabrégé, ou/Crypt, y compris les formes de tableau et de nom échappé - La validation PDF/A signale désormais les flux de métadonnées avec des filtres de flux interdits, les profils ICC OutputIntent dont le nombre de composants
/Nest manquant ou incohérent, et les spécifications de fichier intégrés PDF/A-3 avec/AFRelationshipmanquant ou invalide
Version 2.12.0
Ajouté (Added)
- Les requêtes HTTP TSA définissent désormais des délais d'expiration explicites de 30 s pour chaque phase (résolution/connexion/envoi/réception) via
WinHttpSetTimeouts, de sorte qu'une autorité d'horodatage lente ou inaccessible ne peut pas bloquer le thread de signature indéfiniment au lieu de s'appuyer sur les valeurs implicites par défaut de WinHttp - Dérivation de nonce par requête pour les demandes d'horodatage PAdES B-T / B-LTA lorsque l'appelant omet
TPadesSignOptions.Nonce: un repli SHA-256 de compteur monotone + horloge murale +GetTickCount64+ id de processus remplace l'ancien repli fixe$100000000, de sorte que deux requêtes émises dans la même milliseconde ne réutilisent plus le même nonce anti-rejeu PdfInflateplafonne désormais la sortie décompressée à 256 Mo pour empêcher un flux compressé zlib d'épuiser la mémoire sur une entrée hostile ou corrompue (une "bombe zlib") ; le plafond est généreux pour tout flux PDF réel
Modifié (Changed)
- La fusion de superposition
TPdfView(mise en évidence de recherche, sélection de texte, mot de lecture, sélection étendue) n'utilise plusGetPixel/SetPixelVpixel par pixel ; le rectangle est maintenant fusionné via unTBitmaphors écran 32 bpp etScanLineen un seul passage, éliminant des milliers de traversées du noyau GDI par peinture et rendant les grandes sélections réactives FPdfAsn1.TDerReader.ReadIntegerrejette désormais les champs INTEGER de plus de 8 octets (et les négatifs de 8 octets dont le bit de signe nécessiteraitshl >= 64), retournant 0 au lieu de calculer une valeur incorrecte via un comportement de décalage indéfini sur l'entrée CMS/PAdES ASN.1ParseTimeStampRespne répercute plus le nonce de requête commeTPadesTimestamp.Nonce; jusqu'à l'arrivée du walker TSTInfo qui vérifie le nonce retourné, le champ reste à 0 pour signaler "non vérifié" plutôt que de donner aux appelants une fausse confiance que la réponse d'horodatage est fraîche
Corrigé (Fixed)
PointsToPixelsretournait son entrée inchangée pour chaque DPI : le diviseur étaitPointsPerInch(la constante 72) au lieu du littéral 72, réduisant la formule àResult := Points. Tout appelant externe effectuant un dimensionnement points→pixels de dispositif via cet assistant obtient maintenant le correctPoints × PixelsPerInch / 72PdfMaxObjNumsous-comptait sur les documents utilisant des flux d'objets (ObjStm PDF 1.5+) : les objets compressés dans un/ObjStmne portent pas de marqueurN 0 obj, de sorte que l'analyse brute des octets les manquait, et les injecteurs allouantMaxObj+1pour les nouveaux objets entreraient en collision avec les membres ObjStm cachés et corrompre silencieusement le fichier. L'analyse développe désormais d'abord les flux d'objets afin que chaque numéro d'objet soit visibleInjectPdfAMarkersne forge plus une revendication de conformité PDF/A sur un document chiffré : PDF/A (ISO 19005-1 §7.1) interdit le chiffrement, et l'injecteur copiait précédemment la source avec les marqueurs même si la prochaine validation la rejetterait. LorsqueHasEncryptest défini la source est maintenant transmise inchangée. Le chemin normalTPdf.SaveAsPdfAsupprime déjà le chiffrement (saRemoveSecurity) avant l'injection, donc cela n'affecte que les appelants directsPdfReadStreamBytesrefuse désormais un/Lengthplus grand que l'ensemble du fichier avant d'allouer le tampon de résultat, fermant un chemin d'allocation précoce sur une longueur indirecte corrompue ou hostile
Version 2.11.0
Ajouté (Added)
- L'enregistrement PDFium
FPDF_FILEHANDLERdéclare désormais ses six callbacks (Release,GetSize,ReadBlock,WriteBlock,Flush,Truncate) comme de vrais champs au lieu de commentaires, correspondant à la disposition de l'en-tête C. Les callbacks de transfert de fichier FFI XFA (FFI_OpenFile/FFI_EmailTo/FFI_UploadTo/FFI_DownloadFromURL) qui retournent ou consommentPFPDF_FILEHANDLERrestent non implémentés dans la couche de remplissage de formulaire Pascal, mais le type est désormais structurellement correct pour tout futur chemin de soumission/upload XFA - Le chargement et le déchargement de la bibliothèque PDFium (
LoadLibrary/UnloadLibrary) sont désormais sérialisés par une section critique globale de processus, de sorte que deux threads workersTPdfFuture<T>(ou un worker en course avec le thread principal) ne peuvent pas tous deux observerPDFiumLibrary=0et effectuer une double liaison, ou libérer la DLL pendant qu'un autre thread est en cours de liaison - Une section
initialization/finalizationappelle désormaisUnloadLibraryau déchargement de l'unité, garantissant l'exécution deFPDF_DestroyLibrary(jonction de thread worker, suppression d'isolat V8, démontage de police/cache) au lieu de s'appuyer sur l'OS pour récupérer la DLL
Modifié (Changed)
TPdf.SetActiveavale désormais toute exception pendant le chargement (précédemment seulementEPdfError), de sorte qu'une erreur de flux ou une violation d'accès pendant la configuration de formulaire/page laisseActive=Falseau lieu d'un composant partiellement chargé avec un état indéterminé- Encodage de caractères cohérent pour les arguments de clé de métadonnées PDFium :
TPdf.GetMetaTextutilise désormais la même division FPCAnsiString/ DelphiUTF8EncodequeGetViewerPreferenceet les chemins de chargement, au lieu d'un cast brutAnsiString(Tag) - Dédoublonnage des assistants
BytesToAnsi,AnsiToBytes,WriteBytesetWriteStr:FPdfCompressles importe désormais depuisFPdfPdfCommon(ses aliasWriteBytesToStream/WriteAnsiToStreamsont retirés) et la surcharge redondante à trois argumentsBytesToAnsidansFPdfPdfaest supprimée.FPdfAsn1conserve sa copie locale par conception pour garder la couche de cryptographie libre de l'unité de couche de conformité
Corrigé (Fixed)
- Fuite de ressource dans
TPdf.LoadDocument(fichier, mémoire,TBytes,TMemoryStream, flux personnalisé) etTPdf.CreateDocument: siInitializeFormFillouReloadPagelevait après la réussite deFPDF_LoadDocument/FPDF_CreateNewDocument, le handle natifFPDF_DOCUMENTétait perdu parce queFActiveétait encore False à ce moment. Chaque chemin enveloppe désormais la configuration post-chargement danstry/exceptet ferme le document en cas d'échec, laissant le composant proprement inactif - Diagnostics plus conviviaux pour le chargement de DLL PDFium :
CheckLoadLibrarydétecteERROR_BAD_EXE_FORMAT(193) et signale une incompatibilité d'architecture 32/64 bits pointant vers la versionDLLs/Win32ouDLLs/Win64correspondante, au lieu de ne relayer que l'erreur OS générique.CheckGetProcAddressindique désormais que lepdfium.dlldéployé est plus ancien que la liaison lorsqu'un export requis est manquant, plutôt que le texte OS brut "procedure not found"
Version 2.10.1
Corrigé (Fixed)
- Standardisation du sid du SignerInfo PAdES : l'identifiant du signataire utilise désormais la forme
issuerAndSerialNumberdu RFC 5652 §5.3 (issuer Name + serialNumber, tous deux extraits tels quels du DER du certificat du signataire), remplaçant la précédente forme non standardsubjectKeyIdentifier+ placeholder SHA-256 du certificat complet qu'Adobe Acrobat et les autres validateurs conformes rejetaient. Un nouveau parcourreur DER TbsCertificate (ExtractIssuerAndSerial) lit la SEQUENCE issuer et l'INTEGER serial comme des octets TLV bruts — les numéros de série dépassent couramment la plageInt64, le TLV brut est donc obligatoire. La formesubjectKeyIdentifierreste uniquement comme solution de repli lorsque l'analyse du DER du certificat échoue
Modifié (Changed)
TCmsSignerId.SerialNumber: Int64a été remplacé parSerialDer: TBytes(le TLV serialNumber brut). Le constructeur CMS intègre le TLV découpé tel quel dansIssuerAndSerialNumber, évitant un débordementInt64sur les numéros de série de CA de 20 octets (borne supérieure du RFC 5280 §4.1.2.2)
Version 2.10.0
Ajouté (Added)
- Validation à long terme PAdES B-LT : lorsque
TPadesSignOptions.Level >= plB_LT,SignPadesBytesajoute une mise à jour incrémentale portant un dictionnaire/DSSavec le certificat du signataire et la chaîne intermédiaire complète (la racine auto-signée est exclue conformément au RFC 5652 §10.2.3), plus le marqueur/Extensions /ESICde niveau 1 (EN 319 142-1 §5.4.2) - Horodatage d'archivage PAdES B-LTA : lorsque
Level >= plB_LTAet queTsaUrlest défini, un dictionnaire de signature Document Time-stamp (/SubFilter /ETSI.RFC3161) est ajouté, dont le/ByteRangecouvre l'intégralité du fichier ; le marqueur ESIC est promu au niveau 2. Cela complète les quatre niveaux de référence PAdES (B-B, B-T, B-LT, B-LTA) - Collecte de la chaîne de certificats :
ResolveWinSignerappelle désormaisCertGetCertificateChainet renseigneTPadesResolvedSigner.ChainCertDeravec les certificats de CA intermédiaires, de sorte que/DSS /Certsdu B-LT transporte chaque certificat nécessaire pour valider la signature sans recherche externe.CertFreeCertificateContextest désormais lié, comblant la fuite d'un contexte par signature notée dans la v2.8.0 - Workflow d'intégration PDF/A :
TPdf.SignPadesWithPdfAconvertit d'abord le document en PDF/A (niveau le plus élevé que la bibliothèque émet aujourd'hui) puis applique la signature PAdES demandée — le modèle de conteneur d'archivage à long terme recommandé par l'EN 319 142-1 Annexe A.7
Version 2.9.0
Ajouté (Added)
- Horodatage de confiance PAdES B-T :
TPadesSignOptionsgagne les champsLevel,TsaUrletNonce. LorsqueLevel >= plB_Tet queTsaUrlest défini,SignPadesBytesextrait la valeur de signature du CMS construit, demande un horodatage RFC 3161 sur celle-ci et intègre le TimeStampToken renvoyé comme attribut non signésignature-time-stampdu SignerInfo — l'étape B-T à temps de confiance (EN 319 142-1 §6.3 exigence o) FPdfTsa: client RFC 3161 multiplateforme —BuildTimeStampReq(version 1, messageImprint SHA-256 sur la valeur de signature, nonce, certReq=true),ParseTimeStampResp(accepte PKIStatus 0/1, rejette 2+, extrait le TimeStampToken ContentInfo tel quel) etRequestTimestamp(construction+POST+analyse en une fois).PadesTsaAvailabledéclenche la fonctionnalité sur les plateformes sans backend HTTPFPdfTsaWin: backend Windows WinHttp, lié dynamiquement depuis winhttp.dll (zéro nouvelle dépendance à la compilation ; HTTPS négocié par le magasin de certificats Windows). Il reflète le modèle de liaison dynamique deFPdfCryptoWinFPdfCms:ExtractSignatureValueparcourt un CMS construit pour récupérer les octets de signature bruts (l'entrée de hachage TSA), etAddSignatureTimestampToCmsreconstruit le ContentInfo avec un nouveauunsignedAttrs [1](0xA1) portant l'attribut d'horodatage. Le validateur de phase 1 reconnaît le résultat comme une signature B-T
Version 2.8.0
Ajouté (Added)
- Pile de signature PAdES B-B : quatre nouveaux blocs de construction purs Pascal/multiplateformes (
FPdfSha256,FPdfAsn1,FPdfCms,FPdfCrypto) plus un backend Windows CNG (FPdfCryptoWin) permettent àTPdf.SignPades/SignPadesToStreamde produire une signature PAdES B-B de bout en bout. Le certificat du signataire est résolu par empreinte SHA-1 depuis le magasin “MY” de l'utilisateur courant ; RSA-PSS (recommandé), RSA PKCS#1 v1.5 et ECDSA sont tous pris en charge viaNCryptSignHash FPdfSha256: SHA-256 FIPS 180-4 autonome (Init/Update/Final + assistants en une fois). FPC 3.2.2 ne fournit aucune unité SHA-2, la bibliothèque en possède donc une pour maintenir chaque chemin de code CMS sur un seul typeTSHA256Digestsans branchement RTLFPdfAsn1: encodeur DER (TDerWriter) et lecteur (TDerReader) couvrant SEQUENCE/SET/OID/INTEGER/OCTET STRING/UTCTime/GeneralizedTime/étiquettes contextuelles, avec l'encodage à longueur définie et le traitement des étiquettes IMPLICIT que le CMS exigeFPdfCms: constructeur CAdES SignedData (BuildSignedData) émettant les attributs signés content-type, message-digest et signing-certificate-v2 que la référence PAdES impose, avec signing-time et commitment-type-indication optionnels. L'empreinte signedAttrs est calculée sur la forme étiquetée SET (0x31) et réémise avec l'étiquette IMPLICIT [0] (0xA0) conformément au RFC 5652 §5.4FPdfCrypto+FPdfCryptoWin: abstraction du backend cryptographique avecPadesCryptoAvailable/ResolvePadesSigner, et l'implémentation Windows liant crypt32.dll / ncrypt.dll dynamiquement (aucune nouvelle dépendance de DLL à la compilation). Les signatures ECDSA sont ré-encodées depuis la forme IEEE P1363 r¦s de Windows vers la forme DERECDSA-Sig-Valueque le CMS exigeSignPadesBytes: injection de signature au niveau des octets — réserve un emplacement hex/Contentsà largeur fixe, calcule le/ByteRangecouvrant, condense le document, construit et intègre le CMS et ajoute la mise à jour incrémentale. Le validateur (v2.7.0) reconnaît la sortie comme une signature PAdES B-B
Version 2.7.0
Ajouté (Added)
- Validateur structurel PAdES (ETSI EN 319 142-1 V1.2.1) : la nouvelle unité
FPdfPadeset la méthodeTPdf.ValidatePadesinspectent les dictionnaires de valeur de signature accessibles depuis le/ByteRange, parcourent leSignedDataCMS à l'intérieur de/Contentsassez loin pour confirmer la forme détachée CAdES, et détectent les quatre niveaux de référence (B-B, B-T, B-LT, B-LTA) ainsi que les dictionnaires Document Time-stamp (/SubFilter /ETSI.RFC3161) - Ensemble de problèmes au niveau des clauses PAdES : 26 énumérations
ppei*couvrent l'acceptabilité du/SubFilter(adbe.pkcs7.sha1etadbe.x509.rsa_sha1signalés comme interdits), la couverture de fichier du/ByteRange, la prohibition du/Cert, la forme duSignedDataCMS (signataire unique, eContent détaché, plage de versions), les attributs signés requis (content-type,message-digest,signing-certificate/v2), les condensés interdits (MD5, SHA-1), l'exclusion mutuelle/Reasonvscommitment-type-indication(exigence d), l'exigence de temps de confiance B-T, le/DSS+/Certs+ marqueur ESIC de niveau 1 du B-LT, et le Document Time-stamp + marqueur ESIC de niveau 2 du B-LTA - Injecteur DSS :
TPdf.SaveAsPadesDss/SaveAsPadesDssToStreamajoutent à une copie du document une mise à jour incrémentale portant un dictionnaire/DSS(avec des tableaux de flux/Certs,/OCSPs,/CRLs) et le marqueur/Extensions /ESIC(niveau 1 ou 2), en préservant les octets d'origine — l'étape d'intégration du matériel de validation B-LT/B-LTA (clause 5.4.2) - Phase multiplateforme, sans dépendance : le validateur et l'injecteur sont en Pascal pur et fonctionnent sur chaque IDE pris en charge (Delphi, Lazarus, FPC, C++Builder) ; aucun backend cryptographique n'est requis pour cette version, et aucune nouvelle dépendance DLL n'est introduite
Version 2.6.0
Modifié (Changed)
- Dédoublonnage inter-standards : sept autres fonctions auxiliaires dupliquées (PdfEnclosingObjNum, PdfDictRefNum, PdfExpandObjectStreams, PdfTextStr, ExtractLiteralString, ExtractXmpAttr) ont été retirées des unités de normes individuelles et consolidées dans
FPdfPdfCommon, réduisant d'environ 300 lignes la charge de maintenance par copier-coller - Qualité du PreflightReport : les problèmes de content-class PDF/X et PDF/E qui tombaient auparavant dans la catégorie générique “marqueur manquant” portent désormais des catégories Content/Metadata/Security précises et des recommandations spécifiques aux clauses (~15 énumérations sur les deux normes)
- Couverture de tests PDF/E et PDF/R : six énumérations supplémentaires à couverture nulle ont obtenu des tests positifs (
pveiLzwForbidden,pveiJavaScriptForbidden,pveiFormFieldsForbidden,pveiEmbeddedFilesForbidden,pvriBadHeader,pvriProhibitedInfoEntry) - Correction de build Lazarus :
Tests.PdfVT(une unité DUnitX réservée à Delphi ajoutée dans v2.5.x) est désormais exclue du projet Lazarus pour restaurer la compilation
Version 2.5.3
Ajouté (Added)
- Complétude de l'OutputIntent (PDF/X-4 §6.2.4) :
pvviOutputIntentSchemesignale un OutputIntent dont le/Sn'est pas/GTS_PDFX;pvviOutputIntentMissingIdentifiersignale un/OutputConditionIdentifiermanquant - Exemption Reference XObject PDF/VT-2 (§6.2.2) :
pvviReferenceXObjectForbiddenne se déclenche plus pour un fichierPDF/VT-2, qui peut légalement utiliser des Reference XObjects sur une base X-5g/5pg - Validation des caractères de la boundary MIME (RFC 2046 §5.1.1) :
vtmviBoundaryInvalidCharsignale une boundary dont les caractères sortent de l'ensemble bchars ou dont la longueur dépasse 70
Corrigé (Fixed)
InjectPdfVTMarkersécrit désormais Info/CreationDateet/ModDatedepuis les options d'enregistrement, de sorte que le fichier produit passeValidatePdfVTCompliancesans un fauxpvviInfoModDateMismatch(l'injecteur réécrivait auparavant les dates XMP mais laissait les dates du dictionnaire Info périmées)
Version 2.5.2
Ajouté (Added)
- Cohérence de l'Info
/ModDate(§6.3 NOTE 2, base PDF/X-4) :pvviInfoModDateMismatchsignale un/ModDatedu dictionnaire Info qui, après normalisation de date PDF vers date XMP, n'est pas égal àxmp:ModifyDate - Conformité des blocs intégrés PDF/VT-2s (Annexe A.2) : le validateur MIME exécute désormais
ValidatePdfVTCompliancesur chaque partieapplication/pdfintégrée et signale un corps non-PDF/VT viavtmviInlinePdfNotPdfVT
Version 2.5.1
Ajouté (Added)
- Validation du découpage DParts (ISO 16612-2 §6.5 Tableau 4) :
pvviDPartsBadChunkingsignale un tableau/DPartsdont les sous-tableaux non finaux n'ont pas exactement 8192 entrées ou dont le dernier sous-tableau sort de 1..8192 - Cohérence du RecordLevel entre flux (Annexe A.2) : le validateur MIME PDF/VT-2s extrait désormais le
/RecordLevelde chaque PDF intégré et signale les désaccords viavtmviRecordLevelMismatch, complétant la vérification NodeNameList existante - Indications sur les objets graphiques récurrents (§6.7) :
pvviGtsScopeInvalidValuesignale un/GTS_Scopehors de {SingleUse, Record, File, Stream, Global, Unknown} ;pvviGtsScopeRecordWithoutRecordLevelsignale/Recordsans/RecordLevel;pvviGtsXidNotUuidsignale un/GTS_XIDqui n'est pas une URI uuid: RFC 4122 ;pvviGtsEnvMissingsignale un/GTS_Envmanquant lorsque/GTS_Scopeest Stream ou Global (§6.7.4) - Détection des références en avant MIME (Annexe A.2) :
vtmviForwardReferencesignale un PDF intégré qui cite un nom de fichier (via/EF /F) non introduit par une partie de pièce jointe antérieure dans le flux
Corrigé (Fixed)
ExtractNodeNameListFromPdfetExtractRecordLevelFromPdfdansFPdfPdfvtMimeont résolu un décalage d'une unité récurrent où le décalage en base 1 renvoyé parAnsiFindKeyétait traité comme un décalage d'octet absolu dans le PDF expansé
Version 2.5.0
Ajouté (Added)
- Métadonnées Document Part (DPM) PDF/VT (ISO 16612-2 §6.6) :
TPdfVTSaveOptionsa gagnéDpmEntriesetDpmTargetafin qu'un writer puisse attacher un dictionnaire/DPMau nœud DPart synthétisé, avec validation des noms de clés par rapport à la règle de préfixe de seconde classe de l'Annexe E et aux règles NMTOKEN / unicité / formeGTS_Manageddu §6.6 côté validateur - Échange par flux PDF/VT-2s (Annexe A) : la nouvelle unité
FPdfPdfvtMimefournitBuildPdfVT2sStreametValidatePdfVT2sStreampour l'enveloppe MIMEmultipart/mixedtransportant des blocs PDF/VT intégrés plus des profils ICC en pièces jointes, avec la règle d'ordonnancement d'en-têteX-PDFVT-Stream-version: 1et la vérification de cohérenceNodeNameListentre flux TPdf.ValidatePdfVTeffectue désormais un comptage faisant autorité des actions JavaScript viaFPDFDoc_GetJavaScriptActionCount, complétant le balayage de nom/JavaScriptau niveau des octets
Corrigé (Fixed)
- Correction du
TrappedPDF/VT sur la base PDF/X-4 : la valeur d'énumérationptvUnknownest supprimée (PDF/X-4 interdit/Unknown),ptvUnspecifiedest normalisé en/Falseà l'écriture (un/Trappedmanquant est également interdit), et un nouveau problèmepvviTrappedInvalidsignale une valeur absente ouUnknown ValidatePdfVTComplianceexpansion désormais les flux d'objets (PdfExpandObjectStreams) avant le balayage, de sorte qu'un dictionnaire catalog, OutputIntent ou Metadata stocké dans un ObjStm compressé (PDF 1.5+, typique des producteurs PDF/X-4) est accessible aux recherches au niveau des octets
Modifié (Changed)
- PDF/VT-1 hérite désormais des interdictions de contenu PDF/X-4 complètes :
pvviAcroFormForbidden(/AcroFormou/XFA),pvviAdditionalActionsForbidden(catalog/AA),pvviMissingTrimBoxetpvviReferenceXObjectForbidden(Reference XObject, X-5g/5pg uniquement) - Dédoublonnage inter-standards :
BuildDictObj,IccComponentCount, le profil ICC sRGB intégré (GetSrgbIccProfile),PdfTextStr,PdfEnclosingObjNum,PdfDictRefNumetPdfExpandObjectStreamsont été promus de copies locales tripliquées dansFPdfPdfa/FPdfPdfx/FPdfPdfvtvers un foyer canonique unique dansFPdfPdfCommon; le littéral ICC de 3144 octets n'existe plus désormais qu'une seule fois dans la base de code
Version 2.4.0
Corrigé (Fixed)
InjectPdfUaMarkersne perd plus la référence/Infodu trailer sur une base cross-reference-stream: la fonction localeSourceTrailerInfoRef(qui manquait de fallback pour xref-stream) a été remplacée par la version partagéePdfSourceTrailerInfoRef(promue à partir de la copie PDF/A qui disposait de ce fallback depuis la v2.0.0)- La fonction partagée
PdfReadStreamBytesgère désormais les références indirectes/Length N G R(portées depuis la copie locale PDF/A), ainsi les validateurs PDF/VT, PDF/R et PDF/E ne lisent plus de manière incorrecte ou n'ignorent plus les flux de métadonnées XMP produits par des outils utilisant une Length indirecte (Acrobat, Ghostscript)
Modifié (Changed)
- Dédoublonnage inter-standards: les copies locales de
PdfReadTrailerdansFPdfPdfaetFPdfPdfx, les copies locales deSourceTrailerInfoRefdansFPdfPdfaetFPdfPdfua, et la copie locale dePdfReadStreamBytesdansFPdfPdfaont toutes été supprimées — les versions partagées deFPdfPdfCommons'appliquent désormais partout; cela supprime environ 330 lignes de code dupliqué et élimine la charge de maintenance liée à la synchronisation des copies - Résolution de la dette de test pour PDF/X: sept énumérations de content-class qui présentaient auparavant une couverture nulle ont bénéficié de tests positifs (
pvxiLzwForbidden,pvxiJavaScriptForbidden,pvxiFormFieldsForbidden,pvxiAdditionalActions,pvxiEmbeddedFilesForbidden,pvxiMissingTrimBox,pvxiTrappedNotSet)
Version 2.3.0
Modifié (Changed)
- La résolution de la dette de test pour PDF/A se poursuit: trois autres énumérations à couverture nulle ont bénéficié de tests positifs;
pvaiForbiddenRenderingIntent(§6.2.9) signale un nom de rendering-intent non standard dans un content stream;pvaiJpeg2000Violation(§6.2.2) signale une image JPXDecode avec un/NumComponentsen dehors de {1,3,4} dans le Part 2;pvaiInlineImageLzwForbidden(§6.1.10) signale une image intégrée utilisant le filtre LZW dans le Part 2
Version 2.2.0
Modifié (Changed)
- Tests de régression de flux de références croisées (xref-stream) : le test existant
Validate_XrefStreamTrailer_DetectsConformancevérifie désormais également que la référence/Metadatadu catalogue est résolue et que la partie XMPpdfaid:partest lue sur une base de flux xref-stream (et pas seulement/Root+/ID) ; un nouveau testInjectPdfA_XrefStreamBase_RoundTripsprotège le chemin de flux xref-stream de l'injecteur ajouté dans la v2.0.0 ; deux tests inter-normes (PdfE_XrefStreamBase_NotRejectedAsUnparsable,PdfR_XrefStreamBase_NotRejectedAsUnparsable) vérifient que les validateurs PDF/E et PDF/R ne rejettent plus les fichiers PDF à flux xref-stream comme impossibles à analyser - Résolution de la dette de test PDF/A :
Validate_MinimalPdf_FlagsRequiredMarkersvérifie qu'un PDF minimal brut déclenchepvaiMissingPdfAIdentifier,pvaiMissingOutputIntent,pvaiMissingIccProfile,pvaiMissingXmpMetadataetpvaiMissingXmpDates— comblant l'écart de symétrie avec les validateurs PDF/E et PDF/X qui disposaient déjà de tests équivalents ; deux autres énumérations à couverture nulle ont obtenu des tests positifs :pvaiUnembeddedFontetpvaiSubsetMissingCidSet
Version 2.1.0
Corrigé (Fixed)
- L'intégration de PDF/E a été omise par inadvertance dans la correction de flux de références croisées (xref-stream) de la v2.0.0 :
InjectPdfEMarkersetValidatePdfEComplianceappelaient toujoursPdfReadTrailersansAcceptXrefStream, de sorte qu'un injecteur PDF/E échouait silencieusement sur les sorties PDF 1.5+ (le comportement par défaut deSaveAsCopyde pdfium) ; les deux points d'appel transmettent désormaisTrue - La solution de secours de flux de références croisées (xref-stream) partagée de
PdfReadTrailerintègre désormais la garde/Type /XRefque les copies locales PDF/A et PDF/X possédaient déjà, de sorte qu'un décalagestartxrefcorrompu pointant vers un dictionnaire non lié échoue proprement au lieu d'être analysé à tort comme le trailer - Le résolveur de
/Langde référence indirecte dansValidatePdfUaCompliance(v2.0.0) était inaccessible :PdfFindObjDictne trouve que les dictionnaires<<, mais un objet chaîne/Langest(...)ou<...>sans dictionnaire ; remplacé par un balayage direct du corps de l'objet qui localise le jeton de chaîne
Modifié (Changed)
- Sept doublons d'assistants redondants (PdfStructureBytes, PdfHasName, PdfCountName, BuildStreamObj) qui étaient des copies identiques au niveau des octets des versions partagées de
FPdfPdfCommonont été supprimés deFPdfPdfaetFPdfPdfua— les versions partagées s'appliquent désormais partout viauses
Version 2.0.0
Corrigé (Fixed)
- Échec silencieux inter-normes : l'assistant partagé
PdfReadTrailer(utilisé par les injecteurs et validateurs de marqueurs PDF/UA, PDF/X, PDF/VT et PDF/R) accepte désormais un paramètreAcceptXrefStreamet se rabat sur le dictionnaire d'objets de flux de références croisées lorsqu'aucun mot-clétrailern'est présent (PDF 1.5+) ; auparavant, la sortieSaveAsCopyde pdfium (qui utilise un flux de références croisées) provoquait l'échec silencieux de chaque injecteur de marqueurs — les octets source étaient copiés sans modification et l'appel retournait toujours un succès ; le validateur PDF/R-1.0 (dont la base PDF 2.0 est toujours un flux de références croisées) était en pratique sans effet ; l'implémentation éprouvée du validateur PDF/A a été portée vers l'assistant partagé afin que toutes les normes en bénéficient - Le balayage du dictionnaire trailer dans
InjectPdfUaMarkersetInjectPdfAMarkersutilise désormaisPdfDictEnd(qui prend en compte la profondeur) au lieu d'une simple recherche de>>, de sorte qu'un trailer contenant un dictionnaire imbriqué (par exemple/Encrypt << ... >>) n'est plus interrompu avant une entrée/Infofinale
Modifié (Changed)
TPdf.ValidatePdfUasupprime désormais l'alerte grossière au niveau des octetspvuaiFontNotEmbeddedlorsque le problème précis du modèle d'objet PdfiumpvuaiPdfiumFontNotEmbeddeds'est déjà déclenché, de sorte que le rapport d'analyse préalable ne contient plus deux lignes presque identiques "incorporez vos polices" pour le même défautpvuaiLangInvalidFormat(§7.2) résout désormais une référence indirecte de/Lang(N 0 R) vers son objet chaîne et valide son contenu, de sorte qu'une étiquette de langue référencée indirectement ne constitue plus un point aveugle
Version 1.99.0
Corrigé (Fixed)
pvuaiLangInvalidFormat(§7.2) ne laisse plus passer les chaînes/Langencodées en hexadécimal : les paires UTF-16BE (avec un BOMFE FF) et les chaînes hexadécimales ASCII simples sont désormais décodées et soumises à la même vérification grammaticale BCP 47 que les chaînes littérales(...), de sorte qu'un/Langhexadécimal mal formé est détecté tandis qu'un conforme (par exemple un UTF-16BEen-US) ne risque plus d'être signalé
Modifié (Changed)
pvuaiFontMissingToUnicode(§7.21.7) exempte désormais/MacExpertEncodingaux côtés de/WinAnsiEncodingand/MacRomanEncoding, correspondant aux quatre conditions d'exemption énumérées par la clause
Version 1.98.0
Ajouté (Added)
pvuaiNeedAppearancesTrue(§7.18.4) signale un AcroForm dont le drapeau/NeedAppearancesest vrai, de sorte que les apparences de widget ne sont pas verrouillées de manière fiable et que les technologies d'assistance ne peuvent pas les associer à l'arbre de structure ; porté depuis le validateur PDF/A et restreint à la présence de/AcroFormpour réduire la surface de balayage
Modifié (Changed)
- Régression du corpus veraPDF : intégration de la paire succès+échec de §7.20 Reference-XObject et des paires succès+échec du sous-ensemble CharSet/CIDSet de §7.21.4.2 dans
Live_Corpus_ValidatePdfUaMatchesConformance; les échantillons de réussite pour ToUnicode-forbidden-value (§7.21.7) et media-clip (§7.18.6.2) ont également été intégrés comme gardes contre les faux positifs (leurs échantillons d'échec utilisent des dispositions de dictionnaire que le scan au niveau des octets ne détecte pas, seule la partie réussite est donc intégrée) - La liste d'assertions de chemin de réussite du corpus a obtenu 15 nouveaux gardes sans faux positif, de sorte que chaque vérification active de structure et au niveau des octets de type
pvuai*est désormais testée par rapport à des échantillons conformes (auparavant, seuls environ 30 des 60 active issues étaient surveillés) ; le garde pourpvuaiLangInvalidFormata été délibérément omis car le vérificateur au niveau des octets signale de manière prudente les chaînes/Langencodées en hexadécimal qu'il ne peut pas décoder
Version 1.97.0
Corrigé (Fixed)
- Renforcement de
ValidatePdfUaStructureElements: le parcours de la chaîne parentEnclosingTablecomporte désormais un compteur de sauts (limité par le nombre d'éléments), de sorte qu'un cycle deParentIndexmal formé sur un tableau synthétique d'éléments de structure ne peut plus bloquer l'appelant ; l'allocation du tableau de marked-content-ID dansValidatePdfUaPageContentTaggingest désormais plafonnée à un million d'entrées, empêchant une allocation de plusieurs Go sur unMarkedContentIDmal formé ou malveillant
Modifié (Changed)
- Le commentaire de documentation de l'énumération
pvuaiOrderedListMissingListNumberingdécrit désormais avec précision ce que fait la vérification : elle signale un élémentLdont la valeurListNumberingest en dehors de l'ensemble du Tableau 347 de l'ISO 32000-1 (un attribut absent n'est pas signalé) ; le commentaire précédent laissait entendre qu'elle détectait également les listes ordonnées dépourvues de cet attribut, ce que l'implémentation ne fait pas - Les deux échantillons d'échec de divergence WMode
7.21.3.3-t02du corpus sont désormais intégrés dansLive_Corpus_ValidatePdfUaMatchesConformance— depuis la version 1.95.0, le flux CMap est décompressé avec FlateDecode, la comparaison entre dictionnaire et contenu s'exécute donc désormais sur une partie lisible ; le commentaire obsolète “non intégré” a été supprimé
Version 1.96.0
Ajouté (Added)
- Cohérence entre les normes :
TPdf.ValidatePdfUabénéficie de deux vérifications portées depuis le validateur PDF/A ;pvuaiAnnotationFlagsViolation(§7.18.1) signale une annotation non exempte portant le drapeau Hidden / Invisible / NoView, ce qui perturbe le flux de lecture des technologies d'assistance ;pvuaiActionTargetMissing(§7.18.5) signale une action GoToR / URI / SubmitForm à laquelle il manque sa clé cible requise (/F+/D, /URI, /F), rendant le lien inutilisable par les technologies d'assistance
Corrigé (Fixed)
- Fusion de l'arbre de structure entre les pages : la boucle d'accumulation
AllElemsdansTPdf.ValidatePdfUarebase désormais leParentIndexde chaque élément du tableau local de la page vers le tableau fusionné ; sans cela, les éléments enfants de la page 2 conservaient un index local qui pointait vers la tranche de la page 1, corrompant silencieusement chaque vérification dépendante de ParentIndex (structure de table/liste, nombre d'enfants H de §7.4.4, EnclosingTable) - Analyse de RoleMap :
PdfReadRoleMapPairsn'interrompt plus l'ensemble du balayage clé/valeur lorsqu'une valeur est une référence indirecte (N 0 R) ou un tableau ([...]) — deux formes valides de RoleMap selon l'ISO 32000-1 14.8.5.1 ; il ignore désormais simplement cette entrée (Continue) au lieu d'utiliser unBreak, éliminant les faux positifspvuaiRoleMapUnresolvedsur les types mappés après une entrée de référence indirecte ou de tableau
Modifié (Changed)
FPdfPreflightReport: 18 valeurs actives deTPdfUaValidationIssuequi tombaient auparavant dans la catégorie générique de recommandation “marqueur manquant” portent désormais des catégories précises (Structure / Content / Metadata / Security) et des recommandations spécifiques aux clauses ; correction également de la faute de frappepuaNone / pua1→pucNone / puc1dansPDFSpecComplianceMatrix.md
Version 1.95.0
Modifié (Changed)
- Passe de rappel et de robustesse de
TPdf.ValidatePdfUa: la vérification §7.21.3.3pvuaiCMapWModeMismatchet la vérification §7.21.7pvuaiToUnicodeForbiddenValuedécompressent désormais les flux CMap / ToUnicode compressés avecFlateDecodeavant de les analyser (auparavant, seuls les flux non compressés étaient évalués, un faux négatif connu) ; les fonctions d'assistance partagéesPdfInflate/PdfReadAndDecodeStreamont été promues deFPdfPdfa/FPdfPdfxversFPdfPdfCommonafin que chaque unité de conformité partage une seule copie
Ajouté (Added)
pvuaiSubsetCharSetEmpty(§7.21.4.2) signale unFontDescriptorde sous-ensemble Type 1 qui contient une clé/CharSetdont la valeur de chaîne est vide — lepvuaiSubsetMissingCharSetexistant ne détectait qu'une clé manquante ; un/CIDSetvide n'est pas signalé, car un police sans CID peut légitimement comporter un bitmap vide
Version 1.94.0
Ajouté (Added)
- L'audit de seconde passe de
TPdf.ValidatePdfUaa comblé six lacunes de l'ISO 14289-1 identifiées par une revue clause par clause et un nouveau balayage des API natives Pdfium déjà encapsulées mais inutilisées par le chemin PDF/UA ;pvuaiHeadingFormatInvalid(§7.4.3) signale les balises de titre définies par l'utilisateur commençant par H mais contenant des séparateurs, des espaces ou des chiffres romains au lieu de chiffres arabes purs ;pvuaiMissingDocumentOutline(§7.17, should) signale un document multipage qui ne comporte pas de plan de signets (les documents d'une seule page sont exemptés) ;pvuaiStructElementLangInvalid(§7.2) signale une valeur/Langd'élément de structure qui n'est pas une balise BCP 47 valide ;pvuaiWidgetMissingPrintField(§7.14 / §7.18.4) signale un élément de structure Widget auquel il manque le propriétaire de l'attribut PrintField ;pvuaiLinkNotInStructureTree(§7.18.5) signale un document dont les annotations/Subtype /Linkne sont pas présentées comme des éléments de structure Link ;pvuaiPdfiumAnnotationMissingContentsetpvuaiPdfiumLinkMissingContents(§7.18.1 / §7.18.5) ajoutent un balayage précis des annotations du modèle d'objet Pdfium qui exempte les annotations masquées, hors de la boîte de rognage (crop-box), Popup et Widget — éliminant ainsi les faux positifs de l'heuristique au niveau des octets, qui ne peut pas lire les drapeaux/Fou le/Rect
Version 1.93.0
Ajouté (Added)
TPdf.ValidatePdfUasuperpose désormais une passe de modèle d'objet Pdfium au-dessus de l'inspecteur au niveau des octets, reflétant l'architecture round-7 du validateur PDF/A : il parcourt les objets texte de chaque page viaFPDFTextObj_GetFont→FPDFFont_GetIsEmbedded(pvuaiPdfiumFontNotEmbedded, §7.21.4) et analyse chaque caractère viaFPDFText_HasUnicodeMapError(pvuaiPdfiumUnicodeMapError, §7.21.7) etFPDFText_GetUnicode(pvuaiPdfiumNotDefGlyph, §7.21.8) — ce qui est plus précis que les heuristiques au niveau des octets qui ne s'activent que lorsque aucun programme de police n'est présent ou qu'aucun d'entre eux ne possède de dictionnaire/ToUnicode; le parcours court-circuite à trois niveaux : la boucle de page se termine lorsque les trois problèmes du calque Pdfium sont déjà définis, la boucle par objet se termine au premier caractère de police non incorporé, et le balayage de caractères ignore la passe.notdeflorsqueUnicodeMapErrora déjà été atteint ; PDF/UA était le dernier validateur de norme PDF sans couche de modèle d'objet Pdfium
Version 1.92.0
Ajouté (Added)
- Création de
Tests.PdfR— le premier fichier de test pour le validateur PDF/R-1 (FPdfPdfr), couvrant la validation d'en-tête, l'interdiction de ObjStm, la détection des marqueurs raster et un garde contre les faux positifs sur fichier propre ; les six suites de tests des normes PDF ont désormais des fichiers de test dédiés : PdfA(80), PdfUa(101), PdfX(7), PdfE(5), PdfVT(15), PdfR(4) = 212 tests au total
Version 1.91.0
Ajouté (Added)
ValidatePdfEetValidatePdfVTont bénéficié de vérifications au niveau du contenu auparavant uniquement disponibles dans les validateurs PDF/A, PDF/UA et PDF/X :pveiLzwForbidden,pveiJavaScriptForbidden,pveiFormFieldsForbidden(PDF/E uniquement),pveiEmbeddedFilesForbidden(PDF/E uniquement),pveiOpiForbidden,pvviLzwForbidden,pvviJavaScriptForbidden,pvviEmbeddedFilesForbidden,pvviOpiForbidden;TPdf.ValidatePdfEetTPdf.ValidatePdfVTgagnent également une couche de modèle d'objet Pdfium (pveiPdfiumFontNotEmbedded/pvviPdfiumFontNotEmbedded) qui parcourt les objets texte de la page viaFPDFFont_GetIsEmbedded, court-circuitant au premier caractère de police non incorporé
Version 1.90.0
Ajouté (Added)
TPdf.ValidatePdfXsuperpose désormais une passe de modèle d'objet Pdfium au-dessus de l'inspecteur au niveau des octets : il parcourt les objets texte de chaque page viaFPDFTextObj_GetFont→FPDFFont_GetIsEmbeddedet signale une police non incorporée commepvxiPdfiumFontNotEmbedded— plus précis que l'heuristique au niveau des octets qui ne s'active que lorsqu'aucun programme de police n'est présent ; le parcours court-circuite sur la première police non incorporée trouvée
Modifié (Changed)
- Parcours de l'arbre de structure de
TPdf.ValidatePdfUa: l'appel àValidatePdfUaPageContentTaggingpar page (qui construit une table d'association d'appartenance de marked-content-ID et vérifie de manière croisée chaque objet texte/image) est désormais ignoré sur les pages suivantes une fois quepvuaiUntaggedContentest déjà trouvé — les éléments de structure sont toujours collectés pour les vérifications inter-pages (identifiant de note unique, séquence de titres), mais la passe coûteuse de balisage de contenu par page s'arrête plus tôt
Version 1.89.0
Modifié (Changed)
- Performances de la couche de modèle d'objet Pdfium de
TPdf.ValidatePdfA: le parcours des pages/objets court-circuite désormais à trois niveaux — la boucle des pages s'arrête lorsque tous les problèmes applicables de la couche Pdfium sont déjà trouvés, la boucle par objet s'arrête lorsque les deux problèmes par objet (incorporation de police + transparence) sont définis, et le balayage des caractères de la page de texte ignore la passe.notdefquandUnicodeMapErrora déjà été atteint ; les vérifications de disponibilité d'APIAssigned()et les drapeaux de conformité sont mis en cache dans des booléens locaux une fois avant la boucle au lieu d'être réévalués pour chaque page, objet et caractère ; sur un grand document non conforme, le parcours peut désormais s'arrêter après la première page au lieu de balayer toutes les pages ; sur un document conforme, la surcharge par page est plus faible (pas d'appels répétés àAssigned)
Version 1.88.0
Ajouté (Added)
ValidatePdfXa obtenu huit nouvelles valeurs deTPdfXValidationIssueau niveau du contenu couvrant les restrictions d'échange d'impression que PDF/X impose au-delà des marqueurs de format de fichier :pvxiLzwForbidden(/LZWDecode),pvxiJavaScriptForbidden(/JavaScript),pvxiFormFieldsForbidden(/AcroForm//XFA),pvxiAdditionalActions(/AA),pvxiEmbeddedFilesForbidden(/EmbeddedFiles//FileAttachment),pvxiOpiForbidden(/OPI//Alternates),pvxiMissingTrimBox(aucun/TrimBoxsur aucune page) etpvxiTrappedNotSet(/Trappedabsent ou/Unknown) ; le validateur PDF/X ne vérifiait auparavant que les marqueurs XMP/OutputIntent, il s'agit de sa première passe au niveau du contenu ; les assistants partagésPdfStructureBytes/PdfHasName/PdfCountNameont été ajoutés àFPdfPdfCommonafin que toutes les unités de conformité puissent les utiliser
Version 1.87.0
Ajouté (Added)
- La validation PDF/UA couvre désormais les règles de polices composites ISO 14289-1 §7.21.3 :
pvuaiCidSystemInfoMismatchsignale les polices Type0 dont la CMap embarquée et la CIDFont descendante divergent surRegistry/Orderingou dont leSupplementde la CIDFont dépasse celui de la CMap,pvuaiCMapNotEmbeddedsignale les CMaps référencées par nom (en tant qu'EncodingouUseCMap) qui ne sont pas des CMaps prédéfinies du tableau 118 de l'ISO 32000-1, etpvuaiCMapWModeMismatchsignale les CMaps embarquées dont leWModedu dictionnaire diffère du WMode dans leur contenu de flux
Corrigé (Fixed)
- La vérification §7.21.3.2
pvuaiCidFontMissingCidToGidMapmanquait les dictionnaires CIDFontType2 dont la paire clé/valeurSubtypeest séparée par un saut de ligne, et signale désormais également une valeur de nomCIDToGIDMapautre queIdentity
Version 1.86.0
Ajouté (Added)
- La validation PDF/UA couvre désormais les règles d'encodage TrueType ISO 14289-1 §7.21.6 :
pvuaiTrueTypeEncodingInvalidsignale les polices TrueType non symboliques dont l'Encodingest absent ou n'est niMacRomanEncodingniWinAnsiEncoding(directement ou viaBaseEncoding), etpvuaiSymbolicTrueTypeEncodingsignale les polices TrueType symboliques portant un nom d'Encodingnon standard
Version 1.85.1
Modifié (Changed)
- La vérification d'ordre des tabulations ISO 14289-1 §7.18.3
pvuaiMissingTabsOrders'exécute désormais page par page : chaque page portant des annotations doit déclarer/Tabs /Sdans son propre dictionnaire de page, de sorte qu'une page conforme ne masque plus une page qui ne l'est pas
Version 1.85.0
Ajouté (Added)
- La validation PDF/UA distingue désormais les formulaires XFA dynamiques des formulaires XFA statiques conformément à l'ISO 14289-1 §7.15 :
pvuaiXfaDynamicsignale les formulaires dont la configuration XFA définitdynamicRenderàrequired
Modifié (Changed)
- L'ancien indicateur candidat any-XFA
pvuaiXfaPresentest retiré et n'est plus levé (le XFA statique est conforme à §7.15) ; la valeur d'énumération est conservée pour la compatibilité de l'API
Version 1.84.0
Ajouté (Added)
- La validation PDF/UA détecte désormais le contenu réel non balisé requis par l'ISO 14289-1 §7.1 :
pvuaiUntaggedContentsignale les objets texte et image rendus qui ne sont ni revendiqués par l'arbre de structure de la page (via leurs identifiants de contenu marqué) ni marqués comme Artifact - Nouveaux assistants de niveau page
GetPageContentMarkInfosetValidatePdfUaPageContentTaggingavec l'enregistrementTPdfPageContentMarkInfopour une utilisation directe
Version 1.83.0
Ajouté (Added)
- La validation PDF/UA applique désormais le modèle de titres ISO 14289-1 §7.4.4 :
pvuaiHeadingModelMixedsignale les documents qui mélangent la balise génériqueHavec des titres numérotésH1..Hn, etpvuaiHeadingMultipleInNodesignale les nœuds de structure portant plus d'un titre enfantH
Version 1.82.0
Ajouté (Added)
- La validation PDF/UA résout désormais la RoleMap requise par l'ISO 14289-1 §7.1 :
pvuaiRoleMapRemapsStandardsignale les entrées RoleMap qui redéfinissent un type de structure standard, etpvuaiRoleMapUnresolvedsignale les types de structure non standard utilisés dont la chaîne RoleMap est manquante, pendante ou cyclique — les chaînes indirectes qui atteignent un type standard sont acceptées, et les entrées RoleMap inutilisées ne sont jamais jugées - Nouveaux assistants
PdfUaIsStandardStructType,PdfReadRoleMapPairs(avec décodage d'échappement de nom PDF#hh) etValidatePdfUaRoleMapUsagepour une utilisation directe
Version 1.81.0
Ajouté (Added)
- La validation PDF/UA couvre désormais le balisage de liste ISO 32000-1 requis par l'ISO 14289-1 §7.6 :
pvuaiListStructureInvalidsignale les éléments LI situés hors d'un conteneur L et les parties Lbl/LBody situées hors d'un élément LI, tout en acceptant les listes imbriquées et l'usage légitime de Lbl à l'intérieur des éléments Note et BibEntry
Version 1.80.0
Ajouté (Added)
- La validation PDF/UA couvre désormais le balisage de tableau ISO 32000-1 requis par l'ISO 14289-1 §7.5 :
pvuaiTableStructureInvalidsignale les cellules TH/TD situées hors d'une ligne TR et les lignes ou groupes de lignes situés hors de leur conteneur Table,pvuaiTableHeaderMissingScopesignale les cellules d'en-tête dont la relation ne peut être déterminée ni via un attribut Scope ni via une association Headers/ID, etpvuaiTableHeadersUndefinedIdsignale les références Headers dans des documents qui ne définissent aucun identifiant d'élément de structure TPdfStructureElementexpose les attributs de tableauScope,HasHeaders,HeadersIds,ColSpanetRowSpan, résolus lors du parcours de l'arbre de structure
Modifié (Changed)
- Le parcours de l'arbre de structure lit désormais tous les attributs de mise en page et de tableau en un seul passage sur les dictionnaires d'attributs de chaque élément, au lieu d'un balayage par attribut
Version 1.79.1
Ajouté (Added)
- Portage de l'exemple
AnnotationsLabvers Lazarus et C++Builder, rejoignant l'exemple console Delphi existant
Corrigé (Fixed)
TPdf.CreateAnnotationpouvait déclencher “Cannot set attachment points” pour les annotations de marquage qui utilisent des points quad (Highlight, Underline, StrikeOut, Squiggly) car la nouvelle annotation n'avait pas encore d'emplacement quad à remplacer ; il ajoute désormais le premier quad à la place
Version 1.79.0
Ajouté (Added)
- Nouvel exemple console Delphi
AnnotationsLab: crée des annotations Texte, Surlignage, Carré et Cercle, les écrit dans un PDF, puis recharge le fichier et énumère la liste d'annotations de la page
Version 1.78.0
Ajouté (Added)
- Nouveaux
TPdf.MeasureTextetTPdf.MeasureTextWidth: mesurent la largeur et la hauteur de rendu d'une chaîne pour une police et une taille données (unités utilisateur PDF, 1 unité = 1/72 de pouce) sans ajouter de contenu à une page, ce qui rend possible la logique de disposition et de retour à la ligne automatique par-dessusAddText; fournis par l'unité autonomeFPdfMeasureen tant qu'assistant de classe (class helper) - Nouveau
TPdf.WrapText: retour à la ligne automatique (greedy word wrap) basé surMeasureTextWidthqui divise le texte sur les espaces et regroupe les mots en lignes ne dépassant pas une largeur donnée (unités utilisateur PDF) ; un seul mot trop long obtient sa propre ligne (pas de coupure intra-mot), renvoyant les lignes coupées sous forme de tableau
Version 1.77.0
Ajouté (Added)
ValidatePdfAs'enrichit de trois nouvelles valeursTPdfAValidationIssuecouvrant les clauses précédemment classées “NON” ou “comportement du lecteur” par le précédent audit d'écart (ordinaux ajoutés, valeurs existantes inchangées) :pvaiPdfiumNotDefGlyph(PDF/A-2 6.2.11.8 — un caractère qui se résout en Unicode 0 sans erreur de mappage, le symptôme d'exécution d'une référence de glyphe.notdef; détecté via la couche de modèle objet de Pdfium),pvaiWordBreakMissing(Niveau A 6.8.3.2 — une chaîne show de flux de contenu de plus de 20 caractères sans espace, une violation probable de mots fusionnés ; heuristique approximative qui évite les faux positifs CJK) etpvaiLinkActionMissingTarget(6.6.3 — une action GoToR/URI/SubmitForm à laquelle il manque sa clé de cible d'affichage de sorte qu'un lecteur ne peut pas la présenter)
Version 1.76.0
Ajouté (Added)
ValidatePdfAa gagné trois nouvelles valeursTPdfAValidationIssue(ordinaux ajoutés, valeurs existantes inchangées) :pvaiNameNotValidUtf8(PDF/A-2/3 6.1.8 — un jeton/BaseFontou/FontNamecontenant des octets ≥ 0x80 qui ne forment pas un UTF-8 valide),pvaiInlineImageLzwForbidden(PDF/A-2/3 6.1.10 — une image en ligne dans un flux de contenu de page utilise le filtre LZW ou Crypt), etpvaiTrueTypeDifferencesForbidden(6.3.7 Cor.2 — une police TrueType non symbolique dont le dictionnaire Encoding porte/Differences)
Version 1.75.0
Ajouté (Added)
ValidatePdfAa acquis trois nouvelles valeursTPdfAValidationIssue(ajoutées à la fin, valeurs existantes inchangées) :pvaiIntegerImplementationLimit(PDF/A-2/3 6.1.13 — un jeton numérique dépassant la limite des entiers signés de 32 bits de 2 147 483 647),pvaiBlendModeNotWhitelisted(PDF/A-2/3 6.2.10 — une valeur/BMen dehors de l'ensemble des modes de fusion standard de l'ISO 32000-1 §11.3.5 ; complètepvaiTransparentColorSpacede PDF/A-1 qui n'autorise que Normal/Compatible), etpvaiHexStringOddDigits(6.1.6 — une chaîne hexadécimale<...>avec un nombre impair de chiffres hexadécimaux)
Version 1.74.0
Ajouté (Added)
ValidatePdfAa acquis trois nouvelles valeursTPdfAValidationIssue(ajoutées à la fin, valeurs existantes inchangées) :pvaiPermissionsViolation(6.1.12 — un dictionnaire/Permsportant/DigestLocation,/DigestMethodou/DigestValueaux côtés de/DocMDP),pvaiTransActionForbidden(PDF/A-2 6.5.1 — une action de transition Trans, détectée via le motif/S /Transdu dictionnaire d'action pour éviter de correspondre à tort à/Transparency), etpvaiPdfiumObjectTransparency(PDF/A-1 6.4 — un objet de page porte une véritable transparence selonFPDFPageObj_HasTransparency, prolongeant la couche du modèle objet Pdfium introduite dans la v1.73.0 pour capturer les effets de mode de fusion / masque progressif que l'analyse des noms au niveau des octets peut manquer)
Version 1.73.0
Ajouté (Added)
TPdf.ValidatePdfAsuperpose désormais une passe de modèle objet Pdfium sur l'inspecteur au niveau des octets : il parcourt les objets texte de chaque page viaFPDFPage_GetObject→FPDFTextObj_GetFont→FPDFFont_GetIsEmbeddedet signale une police rendue non incorporée commepvaiPdfiumFontNotEmbedded(ISO 19005 6.3.4), et charge chaque page de texte pour analyserFPDFText_HasUnicodeMapErroret signale un mappage Unicode défectueux commepvaiPdfiumUnicodeMapError(6.3.8). Ce sont des vérifications que l'inspecteur au niveau des octets ne peut pas faire — il ne voit que des jetons de nom, pas de poignées de police résolues ou l'état de mappage par caractère — et qui sont fusionnées dans le résultat au niveau des octets. La fonction autonome au niveau des octetsValidatePdfACompliancereste inchangée
Version 1.72.0
Ajouté (Added)
ValidatePdfAa acquis cinq nouvelles valeursTPdfAValidationIssue(ajoutées à la fin, valeurs existantes inchangées) :pvaiNeedsRenderingPresent(PDF/A-2 6.4.2 — le catalogue ne doit pas porter/NeedsRendering),pvaiDestOutputProfileRef(PDF/A-3 6.2.3 — un OutputIntent ne doit pas porter/DestOutputProfileRef),pvaiEmbeddedFileMissingUF(PDF/A-3 6.8 — une spécification de fichier avec/EFdoit également porter/UF),pvaiXmpPacketBytesAttr(6.7.5 — l'en-tête du paquet XMP ne doit pas porter l'attribut obsolètebytes=ouencoding=), etpvaiAnnotationToggleNoView(PDF/A-2 6.3.2 — le bit/FToggleNoView d'annotation, valeur 512, est interdit)
Version 1.71.0
Modifié (Changed)
ValidatePdfUalève désormaispvuaiOrderedListMissingListNumbering(ISO 14289-1 7.6) : le parcours de l'arborescence de structure résout l'attribut de mise en pageListNumberingsur chaque élémentLvia l'API d'attribut de Pdfium et signale toute valeur en dehors de l'ensemble de la Table 347 de l'ISO 32000-1 (Decimal,UpperRoman,LowerRoman,UpperAlpha,LowerAlpha,None,Circle,Disc,Square). Un attribut absent n'est pas signalé, car la liste peut ne pas être ordonnée ; cela comble la dernière lacune résiduelle ISO 14289-1 enregistrée à la fin de la 5ème itération
Version 1.70.0
Ajouté (Added)
ValidatePdfUaa acquis quatre nouvelles valeursTPdfUaValidationIssue(ajoutées à la fin, valeurs existantes inchangées) :pvuaiSubsetMissingCidSet(ISO 14289-1 7.21.4.2 — unFontDescriptorde sous-ensemble CID doit déclarer/CIDSet),pvuaiToUnicodeForbiddenValue(7.21.7 — un CMap ToUnicode ne doit mapper aucun code surU+FEFFouU+FFFE; les flux non compressés sont analysés pour les formes de sortie<FEFF>/<FFFE>),pvuaiLangInvalidFormat(7.2 —/Langdoit être une balise RFC 1766 / BCP 47 valide ; une grammaire permissive accepteen,en-US,zh-Hans,es-419et signale les valeurs manifestement non conformes), etpvuaiOrderedListMissingListNumbering(7.6 — conservée pour l'exhaustivité de l'API ; pas encore levée par le validateur car la distinction fiable entre les listes ordonnées et non ordonnées nécessite la valeur de l'attributListNumbering, que le parcours de l'arborescence de structure n'expose pas)
Version 1.69.0
Ajouté (Added)
ValidatePdfUaa acquis deux nouvelles valeursTPdfUaValidationIssue(ajoutées à la fin, valeurs existantes inchangées) :pvuaiWidgetOutsideForm(ISO 14289-1 7.18.4 — un élément de structure Widget doit être imbriqué dans un élémentForm; le parcours de l'arborescence de structure vérifie désormais le type parent direct de chaque Widget) etpvuaiSubsetMissingCharSet(7.21.4.2 — unFontDescriptorde sous-ensemble Type 1 doit déclarer/CharSet, identifié par le préfixe de nom de sous-ensemble de six lettres+sur/FontName)
Version 1.68.0
Ajouté (Added)
ValidatePdfUaa acquis deux nouvelles valeursTPdfUaValidationIssue(ajoutées à la fin, valeurs existantes inchangées) :pvuaiUriActionIsMap(ISO 14289-1 7.18.5 — un dictionnaire d'action URI ne doit pas porter/IsMapavec la valeurtrue, car cela désactive la cible de lien accessible) etpvuaiHeadingSequenceViolation(7.4.2 — les en-têtes numérotés doivent commencer àH1et une séquence descendante ne doit pas sauter un niveau intermédiaire, par ex.H1→H3est une violation). La vérification des en-têtes est la première règle PDF/UA au niveau de l'arborescence de structure dans le validateur :ValidatePdfUaStructureElementsparcourt désormais la liste des éléments typés et vérifie la séquenceH1…H6(etH7+selon 7.4.3) dans l'ordre du document
Version 1.67.0
Ajouté (Added)
ValidatePdfUaa acquis cinq nouvelles valeursTPdfUaValidationIssue(ajoutées à la fin, valeurs existantes inchangées) :pvuaiLinkMissingContents(ISO 14289-1 7.18.5 — une annotation Link doit porter une description alternative via/Contents),pvuaiAnnotationMissingContents(7.18.1 — toute annotation non exemptée sans/Contentsdoit avoir une description alternative ; Popup et Widget sont exemptés),pvuaiEmbeddedFileMissingName(7.11 — un dictionnaire de spécification de fichier doit contenir/Fet/UF),pvuaiMediaClipMissingAlt(7.18.6.2 — un dictionnaire de données de clip média doit contenir/CTet/Alt), etpvuaiCidFontMissingCidToGidMap(7.21.3.2 — un CIDFont de Type 2 incorporé doit contenir/CIDToGIDMap)
Version 1.66.0
Ajouté (Added)
ValidatePdfUaa acquis cinq nouvelles valeursTPdfUaValidationIssue(ajoutées à la fin, valeurs existantes inchangées) :pvuaiRoleMapMissing(ISO 14289-1 7.1 — un document balisé avec des types de structure non standard doit porter un/RoleMap),pvuaiOptionalContentAsKey(7.10 — un dictionnaire de configuration de contenu facultatif ne doit pas porter la clé d'état automatique/AS),pvuaiXfaPresent(7.15 — une présence AcroForm/XFAest signalée car le XFA dynamique est interdit),pvuaiTrapNetAnnotation(7.18.2 — les annotations/TrapNetsont interdites), etpvuaiReferenceXObject(7.20 — les XObjects de référence, basés sur le marqueur/Ref, sont interdits)
Corrigé (Fixed)
ValidatePdfUane signale plus de faux positifspvuaiEncryptionPresentsur chaque fichier chiffré : le PDF/UA autorise le chiffrement tant que la clé/Pdu dictionnaire de chiffrement a la position de bit 10 (valeur 1024) définie, ce qui accorde l'accès aux technologies d'assistance (7.16). La violation précise est désormais signalée via la nouvelle valeurpvuaiEncryptionPBitMissing;pvuaiEncryptionPresentest conservée dans l'énumération pour la compatibilité de l'API mais n'est plus levée par le validateur au niveau des octets
Version 1.65.0
Ajouté (Added)
ValidatePdfAa acquis cinq nouvelles valeursTPdfAValidationIssue(ajoutées à la fin, valeurs existantes inchangées) :pvaiCidFontMissingCidToGidMap(ISO 19005-1 6.3.3.2 Cor.2 — un CIDFont de Type 2 incorporé doit porter/CIDToGIDMap),pvaiSubsetMissingCharSet(6.3.5 — unFontDescriptorde sous-ensemble Type 1 doit porter/CharSet),pvaiSubsetMissingCidSet(6.3.5 — unFontDescriptorde sous-ensemble CID doit porter/CIDSet),pvaiWidgetActionForbidden(6.6.1 — une annotation Widget ne doit pas porter/Aou/AA), etpvaiOptionalContentAsKey(ISO 19005-2 6.9 — un dictionnaire de configuration de contenu facultatif ne doit pas porter la clé d'état automatique/AS, nouvellement pertinente car le PDF/A-2 autorise le contenu facultatif)
Version 1.64.0
Ajouté (Added)
ValidatePdfAa acquis huit nouvelles valeursTPdfAValidationIssue(ajoutées à la fin, valeurs existantes inchangées) :pvaiHeaderBinaryMarkerMissing(ISO 19005-1 6.1.2 — l'en-tête%PDF-x.ydoit être suivi d'un commentaire%avec au moins quatre octets supérieurs à 127),pvaiExternalStreamRef(6.1.7 — un dictionnaire de flux ne doit pas porter/F,/FFilterou/FDecodeParms),pvaiOutputIntentScheme(6.2.2 — l'OutputIntent/Sdoit être/GTS_PDFA1),pvaiInfoXmpDateMismatch(6.7.3 — InfoCreationDate/ModDatedoivent également apparaître commexmp:CreateDate/xmp:ModifyDate),pvaiMarkInfoMissing(6.8.2.2 — le niveau A requiert/MarkInfoavec/Marked true),pvaiAnnotationApDictViolation(6.5.3 Cor.2 — le dictionnaire/APd'annotation doit contenir uniquement/N),pvaiEmbeddedFileMissingAFRelationship(ISO 19005-3 Annexe E.2 — chaque spécification de fichier associée doit porter/AFRelationship), etpvaiJpeg2000Violation(ISO 19005-2 6.2.8.3 — une image JPEG2000 doit déclarer 1, 3 ou 4 composants)
Corrigé (Fixed)
ValidatePdfAne signale plus de faux positifspvaiAnnotationFlagsViolationsur les documents qui utilisent un nom de ressource de police à une seule lettre tel que/Font << /F 5 0 R >>; l'analyse de l'indicateur/Fest désormais conditionnée par un contexte d'annotation (/Subtyped'un type d'annotation), ce qui correspond au comportement documenté (6.5.3)ValidatePdfAsignale désormais l'exigence de fichier associé PDF/A-3 par fichier : un document est signalé uniquement lorsqu'un/Type /Filespecincorporé qui référence un flux incorporé via/EFne possède pas de/AFRelationship, au lieu de la vérification globale pour tout le document (aucun ou tout) précédente (ISO 19005-3 Annexe E.2)- Ajout de l'action obsolète
/SetStateà l'ensemble des actions interdites aux côtés de/SetOCGState, de sorte que le nom de l'action de la référence PDF est directement intercepté (6.6.1)
Version 1.63.0
Ajouté (Added)
- Ajout de
TPdf.MeasureTextetTPdf.MeasureTextWidth: mesure la largeur et la hauteur de rendu d'un texte dans une police et une taille données sans ajouter de contenu à la page (en unités utilisateur PDF, 1 unité = 1/72 pouce), permettant des calculs de mise en page et le retour à la ligne automatique au-dessus d'AddText; fourni par l'unité autonomeFPdfMeasuresous forme de class helper
Modifié (Changed)
Demo\Delphi\MergePDF,Demo\CBuilder\MergePDFetDemo\Lazarus\MergePDFaméliorés pour les trois IDE : sélection de plage de pages par fichier, chemin de sortie optionnel, déduplication, journal d'exécution, bouton d'annulation et récapitulatif de fusion ; les signets et métadonnées de la première source sont importés- Les démos
CreatePDFpour les trois IDE incluent désormais une option « Texte européen » pour saisir du texte accentué en tchèque, français, allemand, espagnol, portugais, polonais et turc, afin de vérifier la sélection des polices et la gestion Unicode (l'ancien exempleEuropeanTexta été intégré) - Suppression des exemples
ExtractTextPagesetEuropeanText: la fonctionnalité d'extraction de texte page par page deExtractTextPagesest couverte par les options de plage de pages et de séparateur de pages d'ExtractText; le rendu multilangue deEuropeanTexta été intégré dansCreatePDF
Version 1.62.2
Corrigé (Fixed)
- Les en-têtes C++Builder (
.hpp) ont été régénérés pour toutes les versions et plateformes de RAD Studio (Win32/Win64/Win64x) ; ils s'étaient écartés des sources Pascal, laissant des signatures de fonctions obsolètes et des unités manquantes qui arrivaient jusqu'aux utilisateurs C++Builder via la distribution des sources
Version 1.62.1
Corrigé (Fixed)
- La compilation des sources a été rétablie sur RAD Studio 12 Athens et versions antérieures : une affectation de
TArray<Byte>dans le chemin de validation PDF/UA utilisait une conversion implicite de tableaux propre à Delphi 13, qui ne compilait pas sur les IDE plus anciens
Version 1.62.0
Ajouté (Added)
TPdf.RenderPageThumbnailrend n'importe quelle page par index en bitmap ajusté au format sans modifier la page courante du document, la page chargée ni déclencherOnPageChange
Corrigé (Fixed)
TPdfThumbnailViewne pilote plus lePageNumberdu document hôte pendant le rendu ; auparavant chaque repeint rechargeait les pages, déclenchaitOnPageChangeet jetait la page de texte, ce qui pouvait perturber unTPdfViewlié et provoquer des boucles de repeint. Les miniatures sont désormais rendues viaRenderPageThumbnailsans ces effets de bord- La validation de conformité PDF/X inspecte désormais les documents à flux de références croisées (PDF 1.6, typiques de PDF/X-4) et les objets stockés dans des flux d'objets compressés, au lieu de considérer ces fichiers dans leur ensemble comme non conformes ; le marqueur
GTS_PDFXVersionest lu à la fois depuis la forme élément et la forme attribut RDF de XMP - La validation PDF/R signale désormais
pvriInfoXmpMismatchlorsque le dictionnaire Info et XMP divergent sur Producer ou Creator ; le problème était auparavant déclaré mais jamais remonté - Les temporisateurs de remplissage de formulaires sont désormais suivis par requête, de sorte qu'un document qui en lance plusieurs à la fois (par exemple un intervalle JavaScript en même temps que le clignotement du curseur de champ) les conserve tous au lieu de perdre tous sauf le plus récent
- Le rendu de
TPdfViewet ses méthodes publiquesRenderPage/RenderTileconservent désormais le verrou de rendu du document, ce qui les sérialise face au rendu en thread de travail du mêmeTPdf(PDFium n'est pas thread-safe) - Le texte non ASCII écrit dans les métadonnées PDF/X, PDF/R et PDF/VT (noms de condition OutputIntent, Creator, Producer) est désormais encodé en chaîne UTF-16BE conformément à ISO 32000-1 §7.9.2.2 au lieu d'un UTF-8 brut, que des lecteurs conformes interpréteraient mal
- Les aides de conformité lisent désormais correctement les flux de métadonnées intégrés dont
/Lengthest une référence indirecte, chargent les octets source avecReadBuffer(de sorte qu'une lecture courte échoue proprement) et rejettent un décalagestartxrefnégatif au lieu de risquer une lecture hors limites
Version 1.61.0
Modifié (Changed)
- Corrections des déclarations FFI/ABI qui peuvent nécessiter de recompiler le code ayant implémenté les callbacks concernés : le callback de remplissage de formulaires
FFI_OpenFileporte désormaiscdecl(convention d'appel Win32), et le paramètrevaluedeFPDFAnnot_SetStringValueetFPDFAttachment_SetStringValueest désormaisFPDF_WIDESTRING(UTF-16LE) pour correspondre aux en-têtes PDFium - Les callbacks de chargement progressif
FX_FILEAVAIL.IsDataAvailetFX_DOWNLOADHINTS.AddSegmentprennent désormais des décalagessize_t, etsize_ta la largeur d'un pointeur dans Free Pascal / Lazarus Win64 (auparavant tronqué sur 32 bits), ce qui corrige la disponibilité des données et les appels APIoutsize_tsur FPC Win64
Corrigé (Fixed)
- Sécurité mémoire : use-after-free du temporisateur de remplissage de formulaires lors de la destruction d'un
TPdfavec un curseur AcroForm actif ; doubleFPDF_CloseDocumentsur le chemin d'erreur deImportNPagesToOne; exceptions Pascal s'échappant des callbacksFPDF_FILEWRITE/FPDF_FILEACCESSà travers la frontière C pendant la sauvegarde et l'insertion JPEG ; et débordement entier dans l'extraction de texte lors de la lecture depuis un index de départ jusqu'à la fin de la page TPdfFuture<T>livre désormais de façon fiable son callback de résultat ; la réponse était auparavant presque toujours perdue et pouvait toucher un thread libéré parce que le worker se libérait lui-même avant l'exécution de la réponse mise en file- La sortie PDF/A, PDF/X, PDF/E, PDF/R, PDF/VT et PDF/UA écrit désormais des entrées de table de références croisées exactement longues de 20 octets, comme l'exige ISO 32000-1 §7.5.4
- L'injection des marqueurs de conformité ne détruit plus un dictionnaire lorsque la clé supprimée (par exemple
/Trapped) était la dernière entrée, ce qui auparavant avalait la fermeture>>et produisait un objet mal formé - Les flux de profil ICC de OutputIntent déclarent désormais le nombre de composants
/Nrequis pour PDF/X et PDF/VT (déjà présent pour PDF/A) ; les documents sources chiffrés sont déchiffrés avant l'injection des marqueurs PDF/X, PDF/E, PDF/R, PDF/VT et PDF/UA, de sorte que la sortie est valide au lieu d'être silencieusement corrompue - Le BOM xpacket UTF-8 dans le XMP généré est émis sous forme d'octets exacts, ce qui corrige la corruption sur les installations Delphi dont la page de codes ANSI n'est pas Latin-1 ; les trailers de mise à jour incrémentale conservent désormais la référence
/Infodu document SaveAsavec compression ne tronque plus les flux dont/Lengthest une référence indirecte, et les tables de références croisées reconstruites utilisent désormais des entrées de 20 octets, de vrais numéros de génération, et abandonnent le pointeur/Prevobsolète- La validation de conformité lit correctement les marqueurs de version XMP en forme d'attribut pour PDF/E et PDF/X, de sorte que les fichiers PDF/X-4 sérialisés en attributs sont reconnus ; elle exige l'identifiant exact
PDF/E-1, lit correctement les flux de métadonnées à/Lengthindirect et ne confond plus par faux positif la clé/IDou/StructTreeRootd'un élément de structure lors de la vérification du trailer PDF/UA ; un décalagestartxrefmal formé ne déclenche plus d'erreur de plage TPdfThumbnailView: la dernière page est désormais atteignable avec la barre de défilement, la page courante du document hôte est restaurée après le rendu des miniatures, et la gestion standard de la sortie de la souris est de nouveau émise- Les bitmaps de pages et d'images en niveaux de gris ne sont plus rendus avec une mauvaise palette ;
TPdfViewne reste plus avec une référence pendante lorsque sonTPdfest libéré en premier - Rapports de preflight : le HTML est enregistré en UTF-8 pour correspondre à son charset déclaré, et l'échappement des chaînes JSON produit les séquences
\ucorrectes pour les caractères non ASCII sous Free Pascal - Compilations d'essai : la boîte de dialogue de rappel d'essai s'affiche désormais au lieu d'être supprimée avant de pouvoir apparaître
TPdfStreamAdapterrejette désormais les flux supérieurs à 4 GiB avec une erreur claire au lieu de tronquer silencieusement la longueur transmise à PDFium
Version 1.60.1
Modifié (Changed)
- Les démos AccessibilityReader pour Delphi, Lazarus et C++Builder exécutent désormais la lecture à voix haute via
TPdfReadingSession: chaque page est assemblée en un seul fragment parlé avecBuildSpokenTextFromWords, les positions de mots SAPI alimententFeedSpokenPosition, et la session avance dans les pages et pilote le curseur de mots de la vue, remplaçant l'orchestration écrite à la main que chaque démo portait auparavant - Le suivi karaoké au niveau du mot dans les démos fonctionne désormais aussi quand NVDA est le moteur de parole :
EstimatePacingcadence le curseur de lecture selon le temps de parole écoulé, alors qu'auparavant NVDA lisait à voix haute sans aucun suivi de mots - Pause et Resume dans les démos fonctionnent désormais aussi avec NVDA :
ResumeRestartsChunkrelit la page courante depuis son début au moment du Resume, tandis que SAPI conserve sa pause et sa reprise natives sur place
Version 1.60.0
Ajouté (Added)
- Rendu basse vision en direct dans
TPdfView: les nouvelles options de rendureInvertetreNightDuotonerecolorent chaque tuile de page rendue (inversion totale des couleurs, ou palette nuit bichromatique) avant que les surcouches de recherche, de sélection, de lecture et de curseur de mot soient dessinées, apportant les transformations de couleur de bitmap existantes dans la visionneuse interactive pour les dispositions à page unique et à pages en vis-à-vis ; le basculement des options provoque un repeint immédiat NightDuotoneInketNightDuotonePaperconfigurent la palette de nuit, avec par défaut un texte ambré sur une page noire ;reInvertl'emporte lorsque les deux options sont activées
Version 1.59.0
Ajouté (Added)
TPdfReadingSession: un composant d'orchestration de lecture à voix haute agnostique du moteur vocal. Il conserve le curseur de fragment, le curseur de mot et l'état de lecture (Play/PlayFrom/Pause/Resume/Stop), avance dans les fragmentsTPdfSpokenTextchargés au fur et à mesure que l'hôte signale l'inactivité du moteur viaTick, ramène les décalages de texte parlé aux caractères de la page, et pilote automatiquement le curseur de mots d'unTPdfViewattaché ; l'hôte relie n'importe quel moteur vocal viaOnSpeaket les événements de demande d'annulation, de pause et de reprise, de sorte que la bibliothèque n'embarque aucune API vocale elle-mêmeFeedSpokenPositionconsomme les positions de mots du moteur (commeStatus.InputWordPositionde SAPI) ;EstimatePacingavecEstimatedWordsPerMinutecadence les moteurs sans signal de position ;ResumeRestartsChunkrelit le fragment courant pour les moteurs sans pause nativeOnChunkChange,OnWordChangeetOnFinishedne se déclenchent que sur de vrais changements, et une vue attachée libérée se détache automatiquement, de sorte que le code hôte reste sans scintillement et à l'abri des plantages
Version 1.58.0
Ajouté (Added)
EstimateSpokenWordIndexestime quel mot un moteur vocal est en train d'énoncer à partir du temps écoulé et d'un rythme en mots par minute, en donnant proportionnellement plus de temps aux mots longs, de sorte que les moteurs qui ne renvoient aucune position de mot (comme le client contrôleur NVDA) puissent quand même piloter le curseur de lecture au niveau du mot ; l'appelant fournit le temps écoulé, donc la routine reste sans dépendance à l'horloge et testable unitairement
Version 1.57.0
Ajouté (Added)
- Assemblage de texte parlé avec mappage sur deux domaines pour le suivi de lecture à voix haute :
BuildSpokenTextFromWordsetSpokenTextAppendconstruisent la chaîne remise à un moteur de synthèse vocale à partir des boîtes de mots de la page tout en enregistrant une table de segments, etSpokenToPageChartraduit un décalage parlé signalé par le moteur (commeStatus.InputWordPositionde SAPI) vers l'index de caractère de la page, de sorte que le suivi des surlignages au niveau du mot reste correct lorsque le texte parlé ne correspond pas à tout le texte de la page (régions sautées, lecture par unité, substitutions de prononciation) - Les types
TPdfSpokenTextetTPdfSpokenSpanportent la chaîne parlée ainsi que les plages de pages source dont elle a été construite ; les décalages sur les séparateurs insérés se résolvent vers le mot mappé suivant et les décalages au-delà des segments mappés ne signalent aucune correspondance
Version 1.56.9
Ajouté (Added)
Demo\Delphi\PreflightReportajoute un aperçu du plan d’action qui regroupe les standards non conformes, les priorités, les actions suivantes, les codes de problème et les recommandations dans une liste d’actions correctivesDemo\Delphi\PreflightReportCliaccepteplan/actionplancomme format de sortie pour les exécutions d’un seul fichier et par lot, en écrivant la même liste d’actions correctives dans un fichier texte
Modifié (Changed)
- Les deux démos Delphi PreflightReport affichent désormais les compteurs d’état pass / action / review en plus du nombre total de standards et d’anomalies
Version 1.56.8
Modifié (Changed)
ViewerInteractionLabintègre désormais des contrôles de saut de page, des contrôles de zoom manuel, un journal des coordonnéesDeviceToPage/PageToDeviceà partir des clics, et un journal d’interaction plus clair pour les vérifications de sélection, recherche, rotation et navigation- Les pages readme de
ViewerInteractionLabdocumentent maintenant le flux d’interaction ajouté pour l’ensemble des readmes de démos localisées
Version 1.56.7
Ajouté (Added)
AccessibilityWorkbenchClirelie chaque anomalie détectée au Success Criteria WCAG 2.1 et à la clause ISO 14289-1 (PDF/UA-1), puis affiche une section de couverture des standards dans les rapportsAccessibilityWorkbenchClicalcule un score d’accessibilité documenté de 0 à 100 avec une grille de pénalité publiée et une bande excellente / good / needs work / poor, présenté par fichier et en moyenne de lotAccessibilityWorkbenchCliacceptefailscore=Npour faire échouer l’exécution (code de sortie 2) si un fichier obtient un score inférieur à NAccessibilityWorkbenchCliécrit un journal SARIF 2.1.0 quand le nom du récapitulatif de lot se termine par.sarif, avec une règle par type d’anomalie et les tags WCAG 2.1 et PDF/UA pour l’ingestion CI et code scanningAccessibilityWorkbenchCliajoute une commandeversionqui affiche la version liée de PDFium Delphi Component
Version 1.56.6
Ajouté (Added)
IntakeWorkbenchClicalcule un hash forensique SHA-256 pour chaque fichier d’entrée (avec retourunavailablesur les compilateurs sansSystem.Hash) et le signale dans tous les formatsIntakeWorkbenchCliacceptepasswords=file.txtpour débloquer à blanc des documents nécessitant un mot de passe depuis une liste de candidats, en enregistrant l’indice du candidat correspondant sans jamais consigner le mot de passe lui-mêmeIntakeWorkbenchCliacceptecopyto=dirpour router chaque fichier audité dans un sous-dossier par niveau de risque, transformant l’auditeur en triage d’entréeIntakeWorkbenchCliécrit un journal SARIF 2.1.0 quand le nom du récapitulatif de lot se termine par.sarif, avec une règle par indicateur de risque et un résultat par fichier signalé pour l’ingestion CI et code scanningIntakeWorkbenchCliajoute une commandeversionqui affiche la version liée de PDFium Delphi Component
Version 1.56.5
Ajouté (Added)
IntakeWorkbenchClidéduit désormais les actions post-intake recommandées comme accept, request-password, manual-review, quarantine et deduplicate, et expose les comptes d’actions dans les récapitulatifs de lotAccessibilityWorkbenchClidéduit désormais des actions correctives recommandées comme pass-through, remediate-tags, run-ocr, remediate-semantics et manual-review, avec des compteurs d’action de lot correspondants
Modifié (Changed)
- Les deux démos CLI orientées outils affichent l’action recommandée dans la console, le texte, HTML, JSON et CSV afin que les opérateurs de lot puissent router les fichiers sans logique de post-traitement du risque ou des champs d’état
Version 1.56.4
Corrigé (Fixed)
- La lecture en boucle des annotations, signets ou annotations de lien ne fuit plus les chaînes de texte de l’élément précédent : les enregistrements résultat de
TPdfAnnotation,TBookmarketTLinkAnnotationsont désormais réinitialisés avec une initialisation adaptée aux types gérés plutôt que par remise à zéro brute, de sorte que les documents comportant un très grand nombre d’annotations textuelles n’augmentent plus indéfiniment la mémoire processus - La destruction d’un
TPdfayant enregistré un gestionnaireOnUnsupportedFeaturele détache désormais du callback PDFium global au processus, de sorte qu’un chargement ultérieur depuis une autre instanceTPdfsans gestionnaire propre ne peut plus être dispatché vers le composant libéré (use-after-free)
Version 1.56.3
Corrigé (Fixed)
AccessibilityWorkbenchCline compte plus les pages blanches comme des pages heuristiques de lecture ordonnée, ce qui permet aux documents balisés avec des pages de séparation vides de conserver leur statut d’accessibilité correct; les pages sans contenu lisible sont désormais signalées séparément- La détection des en-têtes de tableau de
AccessibilityWorkbenchClin’attribue plus à un tableau englobant des cellulesTHqui appartiennent à un tableau imbriqué, et les noms de champs de formulaire et de police sont comparés en respectant la casse afin que des champs distincts ne soient pas fusionnés - Les inventaires d’hôtes URL d’
IntakeWorkbenchClisuppriment désormais les informations d’utilisateur, la requête et le fragment, si bien qu’un lien forgé tel que[email protected]est attribué au vrai hôte et que les ciblesmailto:apportent leur domaine au lieu d’être invisibles - Les rapports Markdown d’
IntakeWorkbenchCliéchappent les backticks dans les chemins contrôlés par un attaquant, les hôtes et les noms de pièces jointes afin que le formatage du rapport ne puisse pas être corrompu depuis un document
Modifié (Changed)
AccessibilityWorkbenchClisignale les échecs d’analyse de polices et de champs de formulaire dans des compteurs séparés, marque les polices non embarquées qui possèdent aussi des instances embarquées, et limite les longues listes de polices avec un marqueur de troncature explicite- Les récapitulatifs de lot d’
IntakeWorkbenchCliajoutent une colonne de nombre d’annotations de pièce jointe, et le recensement des annotations par page est plafonné à 20000 par page avec la limite indiquée dans chaque format
Version 1.56.2
Ajouté (Added)
AccessibilityWorkbenchCliaudite désormais l'incorporation des polices, les tooltip des champs de formulaire, la source de l'ordre de lecture, les plans de document, la structure des tableaux et listes, les textes alternatifs suspects et des détails de revue par page plus riches afin que les rapports accessibility par lots identifient davantage de cibles de correctionIntakeWorkbenchClisignale désormais les limites d'analyse de pages, les actions launch et remote-go-to, les inventaires de host URI, les nombres d'annotations, les fonctions PDFium non prises en charge, les identifiants de document dupliqués et des indicateurs de risque étendus pour la revue intake automatisée
Modifié (Changed)
IntakeWorkbenchCliacceptemaxpages=Nen modes fichier unique et lot pour limiter l'analyse de pages par document tout en terminant les rapports metadata, attachment, script, XFA, signature et risk
Version 1.56.1
Corrigé (Fixed)
- Le chargement d’un ancien
pdfium.dllauquel il manque une exportation plus récente échoue désormais proprement : le chemin d’échec réinitialise chaque point d’entrée API lié, si bien que les contrôlesAssigned()(par exemple surFPDF_GetLastErrorouFPDF_GetSecurityHandlerRevision) indiquent que la bibliothèque n’est pas chargée au lieu d’appeler le module déjà déchargé et de planter avec une violation d’accès UnloadLibraryefface désormais toutes les liaisons API PDFium, et non plus seulement les assistants V8 optionnels, afin qu’aucun pointeur de fonction obsolète ne subsiste après la libération de la DLL
Version 1.56.0
Ajouté (Added)
- Curseur de lecture karaoke mot à mot sur
TPdfView:TrackReadingWordAtassocie le décalage de caractère du mot courant d un moteur de synthèse vocale, comme SAPIStatus.InputWordPosition, aux boîtes de mots de la page, met en évidence le mot qui le contient sous forme de superposition distincte au-dessus du bloc de lecture, le fait défiler dans la vue et renvoie l index du mot afin que le mot prononcé s éclaire avec l avancement de la voix SetReadingWordetClearReadingWorddéfinissent ou effacent directement le mot mis en évidence à partir d unTPdfWordBox; redéfinir le même mot ne fait rien, donc le suivi mot à mot ne fait jamais scintiller la vueReadingWordColoretReadingWordFollowcontrôlent la couleur du curseur de mot et si la vue fait défiler automatiquement le mot prononcé dans la vue
Version 1.55.2
Corrigé (Fixed)
- ViewerInteractionLab donne désormais plus d espace vertical aux rangées de la barre d outils afin que Open PDF, Create Sample, les commandes de navigation, de recherche et de sélection ne se chevauchent plus avec les polices mises à l échelle
Version 1.55.1
Corrigé (Fixed)
- ViewerInteractionLab place désormais Prev, Next et Rotate sur la deuxième rangée de la barre d outils, évitant le chevauchement au démarrage avec Open PDF et Create Sample
Version 1.55.0
Ajouté (Added)
- Passerelle mot-sélection pour la lecture avec sélection:
TPdfView.SelectWordBoxetSelectWordSpansélectionnent une boîte de mot ou une suite sur la même page depuisPageWordBoxesgrâce à leurs plages de caractères, afin que le mot ou la ligne en cours de lecture puisse aussi être sélectionné et copié WordBoxIndexAtCharIndexassocie un indice de caractère à la boîte de mot qui le contient et pilote le surlignage mot à mot pendant l’avancée du curseur TTS
Version 1.54.0
Ajouté (Added)
- Des accesseurs de remplissage vocal de formulaires lisent le champ focalisé directement depuis le curseur logique :
FocusedFormFieldValue,FocusedFormFieldNameetFocusedFormFieldDetailssurTPdfetTPdfViewrenvoient la valeur du champ courant, son nom lisible par un humain (/TUcomme info-bulle, avec repli sur/T) et leTPdfFormFieldInfocomplet (type, drapeaux, options), soit tout ce qu’une interface vocale doit annoncer pendant qu’elle parcourt un formulaire
Corrigé (Fixed)
FocusedFormFieldValuelit le champ viaFocusedFormFieldIndexplutôt que via le focus interactif de pdfium, de sorte qu’un remplisseur de formulaires piloté par la voix obtient la bonne valeur même sans curseur visible à l’écran, tandis que leFocusedFormFieldTextexistant continue de refléter le focus pdfium et reste inchangé
Version 1.53.0
Ajouté (Added)
- Prise en charge du surlignage mot par mot :
TPdf.PageWordBoxesetTPdfView.PageWordBoxesdécoupent une page en enregistrementsTPdfWordBox, chacun portant le texte du mot, sa plage de caractères et un rectangle englobant en coordonnées de page, afin qu’un lecteur d’accessibilité puisse surligner chaque mot prononcé à son tour en passant ce rectangle àSetReadingHighlight BuildWordBoxesexpose séparément l’étape de segmentation, en transformant le texte de page en boîtes de mots avec plages de caractères
Version 1.52.0
Ajouté (Added)
- Les helpers de rendu pour basse vision
InvertPdfBitmap,GrayscalePdfBitmapetDuotonePdfBitmapappliquent en place des transformations de couleur à un bitmap 32 bits déjà rendu, afin qu’un lecteur d’accessibilité puisse présenter les pages en mode inversé ou sombre, en niveaux de gris ou dans un schéma bicolore personnalisé, par exemple un fond sombre avec du texte clair, pour les utilisateurs malvoyants - Ces transformations s’exécutent pixel par pixel et se comportent de manière identique sur VCL et Lazarus/LCL, sans modifier les dimensions du bitmap
Version 1.51.0
Ajouté (Added)
- Des unités de lecture au niveau de la phrase pour l’écoute assistée :
TPdf.ReadingUnits,TPdf.DocumentReadingUnitsetTPdfView.ReadingUnitslinéarisent le flux de contenu lisible en enregistrementsTPdfReadingUnitordonnés et de taille phrase, chacun portant le texte à prononcer ainsi que son type sémantique, sa page, ses rectangles de surlignage et son tag de langue, afin qu’une application de lecteur d’écran puisse avancer dans une page ou dans tout le document une unité parlée à la fois - Navigation sémantique avec
NextReadingUnitOfKind, qui permet à une interface vocale de sauter vers le titre, la figure, l’élément de liste ou la cellule de tableau suivant ou précédent sans parcourir le flux à la main BuildReadingUnitsconvertit directement n’importe quelsTPdfContentFragmentsen unités de lecture : les titres et descriptions de figure ou de texte alternatif restent entiers, tandis que les paragraphes se découpent sur les limites de phrase, les points décimaux sont préservés et le curseur de lecture reste un simple index possédé par l’appelant
Version 1.50.0
Ajouté (Added)
ValidatePdfApeut désormais inspecter les documents PDF 1.5+ qui stockent le catalogue, l'OutputIntent ou d'autres dictionnaires à l'intérieur de flux d'objets compressés (/Type /ObjStm). Les object stream sont décompressés et les objets qu'ils contiennent sont résolus, de sorte que de tels documents sont validés sur leurs mérites au lieu d'être signalés comme dépourvus de leurs marqueurs PDF/A
Version 1.49.5
Corrigé (Fixed)
ValidatePdfAne signale plus comme un problème une descriptionpdfaExtension:schemasmanquante. Le schéma de l'identifiant PDF/A (pdfaid) est bien connu, de sorte que ni veraPDF ni PDF/A-2/-3 n'exigent de description de schéma d'extension pour celui-ci, et signaler son absence faisait remonter à tort une erreur sur chaque PDF/A tiers conforme. Les documents que la bibliothèque produit elle-même incluent toujours la description
Version 1.49.4
Corrigé (Fixed)
ValidatePdfAdétecte désormais le niveau de conformité lorsque l'identifiant PDF/A est écrit sous forme d'attributs XML (pdfaid:part="2") plutôt que d'éléments enfants, de sorte que les documents sous forme d'attributs ne sont plus signalés avec un niveau inconnu. Cela corrige aussi une cascade dans laquelle un niveau non détecté faisait retomber les vérifications spécifiques à la partie sur les règles strictes de PDF/A-1 et signalait à tort des fichiers incorporés et de la transparence que PDF/A-2 et PDF/A-3 autorisent
Version 1.49.3
Corrigé (Fixed)
ValidatePdfAinspecte désormais les documents PDF 1.5+ dont les données de cross-reference forment un cross-reference stream (des fichiers qui n'ont pas de mot-clétrailer). Le niveau de conformité, le/IDdu trailer et les autres marqueurs sont lus à partir du dictionnaire du cross-reference stream, de sorte que de tels documents sont validés sur leurs mérites au lieu d'être signalés comme entièrement non conformes
Version 1.49.2
Corrigé (Fixed)
ValidatePdfAne signale plus un faux problème de police non incorporée sur des documents qui incorporent toutes leurs polices. L'heuristique précédente comparait le nombre de jetons/FontDescriptoraux programmes de police incorporés, mais chaque police incorporée contribue deux jetons/FontDescriptor(la référence du dictionnaire de police plus l'objet descripteur), de sorte que chaque fichier à polices incorporées était signalé à tort. La vérification ne signale désormais qu'un document qui référence des polices sans incorporer le moindre programme de police, conformément à la correction correspondante deValidatePdfUa
Version 1.49.1
Corrigé (Fixed)
- La sortie PDF/A se valide désormais comme PDF/A-1b et PDF/A-1a conformes avec veraPDF : le flux du profil ICC de l'OutputIntent sRGB incorporé (référencé par
/DestOutputProfile) déclare désormais le nombre de composantes/Nrequis (3 pour le profil RGB intégré), comme l'impose ISO 19005-1 6.2.3.2. Les documents produits parSaveAsPdfAéchouaient auparavant à la validation stricte PDF/A-1 parce que le flux du profil de destination omettait/N; la valeur est dérivée de l'en-tête du profil ICC, de sorte qu'un profil CMYK ou Gray fourni par l'appelant reçoit lui aussi le nombre correct
Version 1.49.0
Corrigé (Fixed)
ValidatePdfUane signale plus à tort une identification XMP manquante sur des PDF balisés conformes — l'identifiant PDF/UA (pdfuaid:part),dc:title, les dates XMP et le/IDdu trailer sont désormais lus à partir des octets du document original plutôt que de la copie ré-enregistrée, laquelle omet le flux XMP/Metadataet, pour les fichiers à cross-reference-stream, le/IDdu trailer- La vérification d'incorporation des polices de
ValidatePdfUaest corrigée afin qu'un document incorporant toutes ses polices ne soit plus signalé comme ayant des polices non incorporées ; il ne signale désormais qu'un document qui référence des polices sans incorporer le moindre programme de police ValidatePdfUaaccepte désormais un élément de structureFormuladont le texte alternatif est fourni viaActualTextplutôt que par une entréeAlt(ISO 14289-1 §7.7), de manière cohérente avec la règle existante pourFigure
Version 1.48.0
Ajouté (Added)
- Sélection de texte par programmation sur
TPdfView:SelectTextRange(par page et plage de caractères) etSetSelection(par plages explicites pour chaque page) sélectionnent le texte depuis le code — par exemple pour lire et surligner un passage ; les deux redessinent la vue et déclenchentOnSelectionChangelorsque la sélection change.SelectionRangeslit la sélection actuelle sous forme de plages de caractères par page, etSelectionRectanglesrenvoie ses rectangles en coordonnées de page pour un surlignage personnalisé ou un défilement jusqu'à la sélection
Version 1.47.0
Ajouté (Added)
- Navigation entre les champs de formulaire pour le remplissage vocal, à la fois sur
TPdfetTPdfView:FormFieldTabOrder,FocusedFormFieldIndex,FocusFormField,FocusNextFormField,FocusPreviousFormField,ClearFormFieldFocusetFocusedFormFieldText. Ces fonctions déplacent un curseur logique de champ sur les champs widget de la page dans l'ordre de tabulation (avec bouclage aux extrémités), de sorte qu'un lecteur d'assistance peut parcourir le formulaire, annoncer chaque champ viaFormFieldInfo[Index].AlternateName(l'info-bulle /TU) et le remplir viaFormField[Index] - Événement
TPdfView.OnFormFieldFocusChange, déclenché lorsque le curseur de champ se déplace (transportant l'index du nouveau champ, ou -1 lorsqu'il est effacé)
Version 1.46.0
Ajouté (Added)
- Flux de contenu de lecture audio pour l'accessibilité :
TPdf.ReadableContent,TPdf.ReadablePageContent,TPdf.DocumentReadableContentetTPdfView.ReadableContentrenvoient une liste ordonnée d'éléments sémantiquesTPdfContentFragment, chacun portant le texte à énoncer (les glyphes réels, ouActualText/Alt pour les figures), un type de fragment (titre avec niveau, paragraphe, figure, élément de liste, cellule de tableau, lien, texte simple), la langue, la page (indexée à partir de 1), ainsi que les rectangles de surlignage du bloc et de chaque ligne. Les PDF balisés sont linéarisés dans l'ordre de lecture logique à partir de l'arbre de structure ; les pages non balisées reviennent à l'ordre de rendu, de sorte que n'importe quel document peut être lu à voix haute - Surlignage de lecture synchronisé sur
TPdfView:SetReadingHighlight,ClearReadingHighlightet la propriété publiéeReadingHighlightColormettent en évidence le bloc en cours de lecture, au-dessus des superpositions de recherche et de sélection - Nouveaux types publics
TPdfContentFragment,TPdfContentFragments,TPdfReadableContent,TPdfContentFragmentKindetTPdfReadingOrderSource, ainsi que le nouveau helperClassifyStructType
Version 1.45.0
Ajouté (Added)
ValidatePdfUaparcourt désormais également l'arbre de structure balisée actif et signale trois violations de contenu à haute confiance que l'analyse au niveau des octets ne peut pas détecter : un élémentFiguresans entrée Alt ni ActualText (ISO 14289-1, 7.3), un élémentFormulasans attribut Alt (7.7) et un élémentNotesans identifiant unique (7.9). Trois nouvelles valeursTPdfUaValidationIssueexposent ces violations :pvuaiFigureMissingAlt,pvuaiFormulaMissingAltetpvuaiNoteMissingId. Le parcours de l'arbre est ignoré pour les documents non balisés- Nouveau helper public
ValidatePdfUaStructureElementsqui applique ces règles d'arbre de structure à une liste d'éléments à plat (telle que retournée parTPdf.StructureElements), permettant d'exécuter ou de tester unitairement ces vérifications sans charger un document complet
Version 1.44.5
Corrigé (Fixed)
- La vérification d’incorporation des polices de
ValidatePdfA(pvaiFontNotEmbedded, ISO 19005-1, 6.3.4) détecte désormais aussi les polices simples non incorporées qui ne portent pas de/FontDescriptor, en particulier les 14 polices Type 1 standard (Helvetica, Times, Courier, etc.) que PDF/A exige d’incorporer sans aucune exemption. Auparavant, une telle police passait inaperçue ; la vérification comptabilise désormais aussi les dictionnaires de polices simples (/Type1,/TrueType,/MMType1) parmi les programmes de polices incorporés, en miroir du correctif PDF/UA de la version 1.44.3
Version 1.44.4
Corrigé (Fixed)
ValidatePdfVTrejette désormais les arbres DPart ISO 16612-2 §6.5 mal formés lorsque/DPartsest un tableau plat de références au lieu du array of arrays requis, ou lorsqu'un leaf DPart répète sa page/Startcomme/Endalors que la plage ne contient qu'une seule pageValidatePdfVTvalide désormais les noms/NodeNameListcomme des valeurs XML NMTOKEN après expansion des escapes#xxde PDF name ; les noms de niveau hiérarchique non valides sont donc signalés viapvviMissingDPartRootau lieu d'être acceptés comme une structure DPart utilisable
Version 1.44.3
Corrigé (Fixed)
- La vérification d'incorporation de polices de
ValidatePdfUa(pvuaiFontNotEmbedded, ISO 14289-1, 7.21.4) détecte désormais également les polices simples non incorporées qui ne portent pas de/FontDescriptor, notamment les 14 polices Type 1 standard (Helvetica, Times, Courier, etc.) pour lesquelles PDF/UA n'accorde aucune exemption d'incorporation. Auparavant, une telle police passait inaperçue et un document l'utilisant pouvait être signalé comme conforme ; la vérification comptabilise désormais aussi les dictionnaires de polices simples (/Type1,/TrueType,/MMType1) parmi les programmes de polices à incorporer
Version 1.44.2
Corrigé (Fixed)
ValidatePdfVTlaisse désormais un marqueurpdfvtid:GTS_PDFVTVersionprésent mais non reconnu à l’étatpvcUnknownau lieu de le rétrograder enpvcNone. Cela permet de distinguer les chaînes invalides au niveau fichier telles quePDF/VT-2sdes documents qui ne portent aucun marqueur PDF/VT ; PDF/VT-2s est identifié par l’en-tête de flux MIME dans l’Annexe A d’ISO 16612-2, et non par le marqueur XMP d’un fichier PDF- La vérification de
/DPartRootvalide désormais plus strictement la sémantique d’arbre d’ISO 16612-2 §6.5 :/DPartRootNodeet/NodeNameListdoivent décrire la profondeur DPart réelle, les liens parents des DPart doivent former un arbre,/Startet/DPartssont mutuellement exclusifs, et le/DPartde chaque page doit pointer vers le DPart feuille qui la couvre, dans le même ordre depth-first que l’arbre des pages
Version 1.44.1
Corrigé (Fixed)
SaveAsPdfVTécrit désormais une Document Part Hierarchy minimale conforme à ISO 16612-2 §6.5 lorsque le PDF source ne contient pas de/DPartRootexploitable. L'arbre généré relie chaque page via/DPart, conserve toute hiérarchie valide existante et laisse les métadonnées destinataire/DPM plus riches au flux appelantValidatePdfVTvalide désormais la structure DPart exploitable, lit les valeurs XMP PDF/VT depuis les attributs RDF comme depuis le texte des éléments, et impose l'association exacte entre PDF/VT et la base PDF/X : PDF/VT-1 requiert PDF/X-4, tandis que PDF/VT-2 requiert PDF/X-4p, PDF/X-5g ou PDF/X-5pgTPdfVTSaveOptions.Conformance = pvc2n'écrit plus de marqueurs PDF/VT-2 mono-fichier invalides. Le writer mono-fichier normalise la sortie en PDF/VT-1, car PDF/VT-2 requiert une sémantique de jeu de fichiers
Version 1.44.0
Ajouté (Added)
ValidatePdfUasignale désormais également les violations PDF/UA de niveau contenu vérifiables par octet, en plus des marqueurs de format de fichier : un programme de police non incorporé (ISO 14289-1, 7.21.4), une police dépourvue de CMap/ToUnicodeen l'absence d'un encodage de police simple exempté (7.21.7), et un document comportant des annotations mais ne déclarant aucun ordre de tabulation/Tabs /Ssur la page (7.18.3)- Trois nouvelles valeurs
TPdfUaValidationIssue—pvuaiFontNotEmbedded,pvuaiFontMissingToUnicodeetpvuaiMissingTabsOrder— sont exposées parValidatePdfUaet dans le rapport de contrôle en amont. Ce sont des heuristiques grossières destinées à servir d'indices de contrôle en amont plutôt qu'une vérification complète selon ISO 14289-1
Version 1.43.1
Corrigé (Fixed)
SaveAsPdfUaapplique désormais les entrées de catalogue ISO 14289-1, 7.1 obligatoires/ViewerPreferences/DisplayDocTitle trueet/MarkInfo/Marked true/Suspects falsemême lorsque le document source fournit déjà ces dictionnaires avec des valeurs manquantes ou contradictoires. Auparavant, les marqueurs n'étaient injectés que lorsque les dictionnaires étaient entièrement absents, de sorte qu'un document source contenant, par exemple, un/ViewerPreferencessansDisplayDocTitleou un/MarkInfoavec/Marked falseproduisait un fichier non conforme- Les clés existantes d'un dictionnaire
/ViewerPreferencesou/MarkInfopréexistant sont préservées, et un dictionnaire fourni en tant que référence indirecte est résolu avant l'application des clés obligatoires
Version 1.43.0
Ajouté (Added)
ValidatePdfAapplique désormais les règles PDF/A-2 / PDF/A-3 pour les fichiers incorporés et associés ainsi que pour le texte de niveau U. Les fichiers incorporés restent rejetés pour PDF/A-1 ; pour PDF/A-3, un fichier incorporé dépourvu de la clé/AFRelationshiprequise (ISO 19005-3 Annexe E) est signalé, tandis que les pièces jointes PDF/A-2 sont autorisées (leur propre conformité n'est pas vérifiée de manière récursive). Un nouveau problèmepvaiUnicodeMappingMissingsignale un document PDF/A-2u ou PDF/A-3u dont les polices ne comportent aucune table de correspondance/ToUnicode(ISO 19005-2 6.2.11.7). La transparence et le contenu optionnel ne restent signalés que pour PDF/A-1
Version 1.42.0
Ajouté (Added)
- PDF/A-2 (ISO 19005-2) et PDF/A-3 (ISO 19005-3) sont désormais pris en charge aux trois niveaux de conformité — a, b et u — par
SaveAsPdfA,ValidatePdfAet la propriétéPdfAConformance. L'énumérationTPdfAConformancegagnepac2a,pac2u,pac3aetpac3u(PDF/A-1 n'a pas de niveau u). L'enregistrement écrit les valeurspdfaid:part(2 ou 3) etpdfaid:conformance(A, B ou U) correspondantes, en conservant le sous-type d'OutputIntentGTS_PDFA1qu'ISO 19005-2 maintient à des fins de compatibilité. Une demande de niveau A est toujours rétrogradée vers le niveau B correspondant (pour toute partie) lorsque le document ne possède pas la structure balisée exigée par ce niveau
Version 1.41.0
Ajouté (Added)
ValidatePdfAdétecte désormais les violations PDF/A au niveau du contenu que l'injection de marqueurs ne peut pas corriger, en plus des marqueurs structurels qu'il signalait déjà : JavaScript et autres actions interdites, actions additionnelles (/AA), fichiers incorporés,LZWDecode, transparence (soft masks et transparency groups), contenu optionnel (/OCProperties), sous-types d'annotation interdits (FileAttachment, Sound, Movie, 3D, Screen),/NeedAppearances trueet/XFAd'AcroForm, polices dont les descripteurs ne comportent pas de programme de police incorporé, et une déclaration de niveau A faite sans la structure balisée exigée par ISO 19005-1 6.8. Les vérifications de transparence, de contenu optionnel et de fichiers incorporés ne s'appliquent qu'à PDF/A-1 (ces fonctionnalités sont autorisées dans PDF/A-2 et PDF/A-3). De nouvelles valeursTPdfAValidationIssueexposent chaque cas ; les valeurs existantes restent inchangées
Version 1.40.3
Corrigé (Fixed)
SaveAsPdfAsupprime désormais tout chiffrement du document source avant de produire la sortie PDF/A. ISO 19005-1 6.1.3 interdit la clé/Encryptdu trailer, mais le chemin d'enregistrement conservait auparavant le gestionnaire de sécurité de la source, de sorte qu'enregistrer un document chiffré au format PDF/A produisait un fichier chiffré et non conforme. L'enregistrement PDF/A déchiffre maintenant d'abord le document. Les documents non chiffrés ne sont pas affectés
Version 1.40.2
Corrigé (Fixed)
- Empêchement de
SaveAsPdfAd'émettre une fausse déclaration de conformité PDF/A niveau A. Lorsque le niveau A (pac1a) est demandé mais que le document source ne possède pas les marqueurs de structure balisée exigés par ISO 19005-1 6.8 — un/StructTreeRootdans le catalogue et un dictionnaire/MarkInfoavec/Marked true— le fichier enregistré est désormais identifié comme le niveau B correspondant (pdfaid:conformance=B) au lieu d'affirmer le niveau A. La sortie PDF/A-1b purement visuelle n'est pas affectée
Version 1.40.1
Corrigé (Fixed)
- Renforcement de la validation de conformité de version PDF afin que l'action
SetOCGState(set-optional-content-group-state) soit reconnue comme une fonctionnalité PDF 1.5. L'enregistrement vers une cible PDF 1.2, 1.3 ou 1.4 contenant une actionSetOCGStateest désormais rejeté, conformément à ISO 32000-1 (Table 198) ; auparavant, une telle action pouvait passer dans une sortie de version inférieure. L'actionSetStatedistincte et obsolète de PDF 1.2 reste acceptée à partir de PDF 1.2
Version 1.40.0
Ajouté (Added)
- Liaison de l'API
FPDFPageObj_AddExistingMark()de PDFium, qui attache une marque de contenu existante à un objet de page. Lorsque des objets de page consécutifs partagent la même marque, le PDF enregistré les fusionne en une seule marque qui les couvre tous ; les objets non consécutifs reçoivent des copies distinctes - Liaison de l'API
FPDFTextObj_SetFontSize()de PDFium permettant de modifier la taille en points d'un objet texte existant, en complément de la liaison déjà disponibleFPDFTextObj_GetFontSize()
Modifié (Changed)
- Mise à jour des DLL d'exécution PDFium fournies (Win32 et Win64, builds standard et V8) vers l'instantané PDFium du 2026-06-02
Version 1.39.53
Modifié (Changed)
- Les exemples Delphi
PDFViewer,SplitViewetMultiPageViewerouvrent désormais les documents en modeZoom to Pagepar défaut - Le rendu initial ajuste maintenant la page entière à la zone du visualiseur avant que l'utilisateur choisisse un niveau de zoom manuel
TPdf.AboutInfo, les métadonnées du paquet Lazarus et les métadonnées de version du programme d'installation ont été mis à jour pour indiquer 1.39.53
Version 1.39.52
Modifié (Changed)
Demo\Lazarus\CreatePDFa été enrichi afin que l’exemple d’introduction génère maintenant un PDF de deux pages avec vector paths, table content, embedded image, text annotation, rotated text et un document-building walkthrough plus clair- Des pages
README.htmlsoignées ont été ajoutées pour chaque dossier de démo Delphi, C++Builder et Lazarus, en remplaçant le dernier README de démo en texte seul par un guide lisible dans le navigateur - Mise à jour de
TPdf.AboutInfo, des métadonnées du package Lazarus et des métadonnées de version de l’installeur vers 1.39.52
Version 1.39.51
- Les synthèses batch de
Demo\Delphi\PreflightReportCliajoutent des totaux de statut standard pour les résultats Pass, Action required et Review sur les standards sélectionnés - Les lignes par fichier incluent désormais des compteurs action-required et review dans les synthèses TXT / HTML / JSON / CSV, ce qui facilite l'inspection des artefacts CI sans ouvrir chaque rapport généré
- Mise à jour de
TPdf.AboutInfo, des métadonnées du package Lazarus et des métadonnées de version de l'installeur vers 1.39.51
Version 1.39.50
- Le mode batch par dossier de
Demo\Delphi\PreflightReportCliest amélioré :batchdir=foldercollecte les chemins PDF découverts, les trie, puis génère les rapports dans un ordre stable - Les analyses récursives de dossiers produisent désormais un ordre de rapports et des lignes de synthèse reproductibles, tandis que le traitement explicite
batch=list.txtconserve l'ordre du fichier de liste - Mise à jour de
TPdf.AboutInfo, des métadonnées du package Lazarus et des métadonnées de version de l'installeur vers 1.39.50
Version 1.39.49
- Les synthèses batch de
Demo\Delphi\PreflightReportClienregistrent maintenant les run settings : type de source, chemin source, état récursif, dossier de sortie, format de rapport, standards sélectionnés et modefailon= - Les synthèses JSON incluent désormais un objet
run, les synthèses TXT et HTML affichent une section run settings, et les lignes CSV répètent les mêmes colonnes d'audit pour les tableurs et CI pipelines - Mise à jour de
TPdf.AboutInfo, des métadonnées du package Lazarus et des métadonnées de version de l'installeur vers 1.39.49
Version 1.39.48
- Le batch output naming de
Demo\Delphi\PreflightReportClia ete ameliore afin que des duplicate input file names partageant un memeoutdir=n'ecrasent plus leurs generated reports - Batch runs ajoutent maintenant les suffixes
-2,-3et suivants lorsqu'un generated report path est deja attribue dans la meme execution, et summaries enregistrent le collision-safe report path final TPdf.AboutInfo, Lazarus package metadata et installer version metadata ont ete mis a jour pour indiquer 1.39.48
Version 1.39.47
- Les batch summaries de
Demo\Delphi\PreflightReportCliont ete ameliores afin que les sorties TXT et JSON incluent desormais des aggregate totals pour total files, processed files, failed files, issues et correspondancesfailon= - CSV summaries restent une row table pure pour les consumers existants, tandis que HTML summaries continuent d'afficher les memes aggregate metrics dans le dashboard header
TPdf.AboutInfo, Lazarus package metadata et installer version metadata ont ete mis a jour pour indiquer 1.39.47
Version 1.39.46
Demo\Delphi\PreflightReportClia ete ameliore avecsummary=batch.html/.htmafin que les batch runs puissent produire un browser-readable dashboard en plus des TXT / CSV / JSON manifests- HTML summaries affichent les metrics total, processed, failed, issue et correspondance
failon=, puis listent chaque input avec report links, status, counts et error text TPdf.AboutInfo, Lazarus package metadata et installer version metadata ont ete mis a jour pour indiquer 1.39.46
Version 1.39.45
Demo\Delphi\PreflightReportClia ete ameliore avecbatchdir=folderetrecursiveafin que les scripts puissent analyser directement des PDF folders sans d'abord ecrire un list file- Directory batch mode reutilise le comportement
outdir=,summary=,standards=etfailon=de list-based batch mode ; non-recursive analyse uniquement la folder choisie, etrecursiveinclut les subfolders TPdf.AboutInfo, Lazarus package metadata et installer version metadata ont ete mis a jour pour indiquer 1.39.45
Version 1.39.44
- Amélioration de
Demo\Delphi\PreflightReportCliavecsummary=batch.csv|json|txtafin que les batch runs puissent produire un machine-readable manifest à côté des per-file reports - Batch summaries contient chaque input path, report path, status, standard count, passed count, issue count, état de correspondance
failon=et error text pour CI jobs et scripts externes - Mise à jour de
TPdf.AboutInfo, Lazarus package metadata et installer version metadata pour indiquer 1.39.44
Version 1.39.43
- Amélioration de
Demo\Delphi\PreflightReportCliavecbatch=list.txtetoutdir=reportsafin que les scripts génèrent des preflight reports pour une liste de fichiers PDF en une seule exécution - Batch mode ignore les lignes vides et les lignes de commentaire
#, dérive chaque report name.preflight.<ext>du PDF d’entrée, continue après les erreurs par fichier et récapitule processed et failed files avant de retourner - Mise à jour de
TPdf.AboutInfo, Lazarus package metadata et installer version metadata pour indiquer 1.39.43
Version 1.39.42
- Amélioration de
Demo\Delphi\PreflightReportCliavecfailon=none|issues|action|review, afin que les CI jobs puissent convertir les preflight results générés en exit codes déterministes - La CLI renvoie désormais exit code 2 lorsqu'une
failon=rule sélectionnée correspond après la génération du report file et du optional attached-report PDF, tandis que les runtime errors renvoient toujours exit code 1 - Mise à jour de
TPdf.AboutInfo, Lazarus package metadata et installer version metadata pour indiquer 1.39.42
Version 1.39.41
- Amélioration de
Demo\Delphi\PreflightReportCliavecattach=output.pdf, afin qu'un preflight report généré puisse être intégré comme document-level attachment dans une nouvelle PDF copy - La CLI conserve sur disque le TXT / HTML / Markdown / JSON / CSV report file généré et refuse de l'attacher au input PDF path d'origine, ce qui réduit le risque d'écrasement accidentel
- Mise à jour de
TPdf.AboutInfo, Lazarus package metadata et installer version metadata pour indiquer 1.39.41
Version 1.39.40
- Ajout de
Demo\Delphi\PreflightReportCli, un Delphi console companion pour générerFPdfPreflightReportde façon scriptable sans ouvrir de viewer - La CLI prend en charge la création de sample sans argument, les input / output arguments, optional password, les formats de sortie
text/html/md/json/csv, ainsi que lestandards=filtering pour PDF/A, PDF/UA, PDF/E, PDF/X, PDF/R et PDF/VT - Mise à jour de
TPdf.AboutInfo, Lazarus package metadata et installer version metadata pour indiquer 1.39.40
Version 1.39.39
FPdfPreflightReportajouteTPdfPreflightReport.ToMarkdownetSaveMarkdownToFileafin que les preflight reports puissent etre exportes en Markdown adapte aux issue tracker- Les exemples
PreflightReportpour Delphi, C++Builder et Lazarus ajoutent Markdown preview switching et des actions Save MD en plus du workflow TXT / HTML / JSON / CSV existant TPdf.AboutInfo, Lazarus package metadata et installer version metadata ont ete mis a jour pour indiquer 1.39.39
Version 1.39.38
- Les exemples
SecurityAuditpour Delphi, C++Builder et Lazarus ajoutent maintenant JSON audit report export en plus du workflow TXT save / copy existant - Le JSON report contient
format,generatedAt,summary,findingCountet des lignesfindingsstructurées avec les champs severity, area et detail TPdf.AboutInfo, Lazarus package metadata et installer version metadata ont été mis à jour pour indiquer 1.39.38
Version 1.39.37
FPdfPreflightReporta été amélioré avecTPdfPreflightReport.ToCsvetSaveCsvToFileafin que les preflight reports puissent être exportés en spreadsheet-friendly CSV- Les samples Delphi, C++Builder et Lazarus
PreflightReportont été mis à jour avec CSV preview switching et Save CSV actions aux côtés du workflow TXT / HTML / JSON existant TPdf.AboutInfo, Lazarus package metadata et installer version metadata ont été mis à jour pour indiquer 1.39.37
Version 1.39.36
FPdfPreflightReporta été enrichi avecTPdfPreflightReport.IssueCategoryCountsainsi que les types réutilisablesTPdfPreflightIssueCategoryCountetTPdfPreflightIssueCategoryCountspour agréger les marker-level issues par categoryTPdfPreflightReport.ToText,ToHtmletToJsonont été mis à jour afin que la sortie PreflightReport générée inclue des issue-category count summaries avec les per-standard rows et detailed issue recommendations- Mise à jour de
TPdf.AboutInfo, Lazarus package metadata et installer version metadata pour indiquer 1.39.36
Version 1.39.35
- Le sample
PrintDialogétendu a été renommé enPrintPreferencespour Delphi, C++Builder et Lazarus, afin que le demo name corresponde désormais à son workflow PDF author print preferences, N-up printing, odd / even filtering, grayscale, cell border et duplex mapping - Mise à jour de
TPdf.AboutInfo, Lazarus package metadata et installer version metadata pour indiquer 1.39.35
Version 1.39.34
Demo\Delphi\PrintPDFaccepte désormais le chargement de PDF par glisser-déposer, et le workflow existantDemo\CBuilder\PrintPDFest documenté avec les exemples PrintPDF Delphi et LazarusTPdf.AboutInfo, Lazarus package metadata et installer version metadata ont été mis à jour pour indiquer 1.39.34
Version 1.39.33
- Ajout de
Demo\CBuilder\SplitView, ce qui complète SplitView sample matrix pour Delphi, C++Builder et Lazarus - Mise à jour de
TPdf.AboutInfo, Lazarus package metadata et installer version metadata pour indiquer 1.39.33
Version 1.39.32
- Ajout de
Demo\Lazarus\SplitView, qui apporte side-by-side PDF comparison à Lazarus avec two- or three-pane layouts, active-view navigation, synchronized commands, zoom presets et rotation - Mise à jour de
TPdf.AboutInfo, Lazarus package metadata et installer version metadata pour indiquer 1.39.32
Version 1.39.31
- Ajout de
Demo\Lazarus\PrintPDF, qui apporte le standard PDF print workflow à Lazarus avec preview navigation, page ranges, copies, collate mode, progress et cancellation - Mise à jour de
TPdf.AboutInfo, Lazarus package metadata et installer version metadata pour indiquer 1.39.31
Version 1.39.30
- Ajout de
Demo\Lazarus\FontProperties, ce qui complète la matrice d'exemples FontProperties pour Delphi, C++Builder et Lazarus - Mise à jour de
TPdf.AboutInfo, Lazarus package metadata et installer version metadata afin d'indiquer 1.39.30
Version 1.39.29
- Ajout de
Demo\CBuilder\FontProperties, qui apporte l'inspection indexée des métadonnées de caractères et de polices à C++Builder en plus de l'exemple Delphi - Mise à jour de
TPdf.AboutInfo, Lazarus package metadata et installer version metadata afin d'indiquer 1.39.29
Version 1.39.28
- Ajout de
Demo\Delphi\ExtractTextPages, ce qui complète la matrice d'exemples d'extraction de texte page par page pour Delphi, C++Builder et Lazarus - Mise à jour de
TPdf.AboutInfo, Lazarus package metadata et installer version metadata afin d'indiquer 1.39.28
Version 1.39.27
- Ajout de
Demo\Lazarus\PrintDialog, ce qui complète le PrintDialog sample matrix pour Delphi, C++Builder et Lazarus - Mise à jour de
TPdf.AboutInfo, Lazarus package metadata et installer version metadata pour indiquer 1.39.27
Version 1.39.26
- Ajout de
Demo\CBuilder\PrintDialog, ce qui porte le N-up printing et PDF author print preferences workflow sur C++Builder aux côtés du sample Delphi - Mise à jour de
TPdf.AboutInfo, Lazarus package metadata et installer version metadata pour indiquer 1.39.26
Version 1.39.25
- Ajout de
Demo\CBuilder\ViewerInteractionLab, ce qui complète le ViewerInteractionLab sample matrix pour Delphi, C++Builder et Lazarus - Mise à jour du library build workflow et des Win64 C++Builder package outputs afin que les
TPdfViewviewer interaction methods se lient correctement dans les Win64 demos - Mise à jour de
TPdf.AboutInfo, Lazarus package metadata et installer version metadata pour indiquer 1.39.25
Version 1.39.24
- Ajout de
Demo\Lazarus\ViewerInteractionLab, ce qui porte le focused viewer interaction workflow sur Lazarus aux côtés du sample Delphi - Mise à jour de
TPdf.AboutInfo, Lazarus package metadata et installer version metadata pour indiquer 1.39.24
Version 1.39.23
- Ajout de
Demo\Lazarus\SearchAndSelect, ce qui complète la SearchAndSelect sample matrix pour Delphi, C++Builder et Lazarus - Mise à jour de
TPdf.AboutInfo, Lazarus package metadata et installer version metadata pour indiquer 1.39.23
Version 1.39.22
- Ajout de
Demo\CBuilder\ContentExtractionLabetDemo\Lazarus\ContentExtractionLab, ce qui porte le multi-category content extraction workflow sur tous les demo IDE pris en charge - Mise à jour de
TPdf.AboutInfo, Lazarus package metadata et installer version metadata pour indiquer 1.39.22
Version 1.39.21
- Amélioration de
Demo\Delphi\PreflightReport,Demo\Lazarus\PreflightReportetDemo\CBuilder\PreflightReportavec un preview format selector permettant de vérifier le text ou JSON output avant l'enregistrement des rapports - Mise à jour de
TPdf.AboutInfo, Lazarus package metadata et installer version metadata pour indiquer 1.39.21
Version 1.39.20
- Ajout de l'export JSON à
FPdfPreflightReportviaTPdfPreflightReport.ToJsonetSaveJsonToFile, avec summary lisible par machine, per-standard status / priority, next action et issue detail - Mise à jour de
Demo\Delphi\PreflightReport,Demo\Lazarus\PreflightReportetDemo\CBuilder\PreflightReportavec des actions Save JSON en plus de l'export TXT / HTML - Mise à jour de
TPdf.AboutInfo, Lazarus package metadata et installer version metadata pour indiquer 1.39.20
Version 1.39.19
FPdfPreflightReportajoute désormaisTPdfPreflightStatus, issue categories, per-standard priority et next-action guidance dans les rapports TXT / HTMLDemo\Delphi\PreflightReport,Demo\Lazarus\PreflightReportetDemo\CBuilder\PreflightReportaffichent maintenant status, priority, issue count et next action dans la summary gridTPdf.AboutInfo, Lazarus package metadata et installer version metadata indiquent maintenant 1.39.19
Version 1.39.18
- Ajout de
Demo\Lazarus\SecurityAudit, qui complète la matrice d'exemples Delphi, C++Builder et Lazarus pour le workflow d'audit PDF risk-surface en lecture seule - L'exemple Lazarus énumère permissions, attachments, JavaScript actions, URI / Launch link annotations, web links, signatures, XFA state, V8 / XFA helper availability et unsupported-feature callbacks, puis enregistre ou copie la finding list sous forme de TXT report
TPdf.AboutInfo, Lazarus package metadata et installer version metadata indiquent maintenant 1.39.18
Version 1.39.17
- Ajout de
Demo\CBuilder\SecurityAudit, qui apporte le workflow d'audit PDF risk-surface en lecture seule à C++Builder aux côtés de l'exemple Delphi existant - L'exemple C++Builder énumère permissions, attachments, JavaScript actions, URI / Launch link annotations, web links, signatures, XFA state, V8 / XFA helper availability et unsupported-feature callbacks, puis enregistre ou copie la finding list sous forme de TXT report
TPdf.AboutInfo, Lazarus package metadata et installer version metadata indiquent maintenant 1.39.17
Version 1.39.16
- Ajout de
Demo\CBuilder\SearchAndSelect, qui apporte le workflow viewer SearchAndSelect autonome à C++Builder aux côtés de l'exemple Delphi existant - L'exemple C++Builder crée ou ouvre des PDFs, liste les matches sur toutes les pages avec page / character-index previews, prend en charge Previous / Next et double-click navigation, puis met en évidence les matches de la page courante avec
HighlightSearchText - Il expose aussi
AllowUserTextSelection,SelectedText,SelectAll,CopySelectionToClipboard,ClearSelection,OnSelectionChangeet les options spreadDisplayMode; les métadonnées de version indiquent maintenant 1.39.16
Version 1.39.15
- Ajout de
Demo\CBuilder\WatermarkStamp, qui complète la demo matrix Delphi, Lazarus et C++Builder pour les workflows réutilisables de Form XObject watermark et stamp - L’exemple C++Builder crée des PDF target et stamp, réutilise la stamp page via
CreateXObjectFromPage, applique des transforms avecTPdfMatrix, puis enregistre centered watermarks, corner stamps et page number labels - Mise à jour de
TPdf.AboutInfo, Lazarus package metadata et installer version metadata pour indiquer 1.39.15
Version 1.39.14
- Ajout de
Demo\Lazarus\WatermarkStamp, qui apporte à Lazarus le workflow réutilisable de Form XObject watermark et stamp - L’exemple Lazarus crée des PDF target et stamp, réutilise la stamp page via
CreateXObjectFromPage, applique des transforms avecTPdfMatrix, puis enregistre centered watermarks, corner stamps et page number labels - Mise à jour de
TPdf.AboutInfo, Lazarus package metadata et installer version metadata pour indiquer 1.39.14
Version 1.39.13
- Ajout de
Demo\CBuilder\PreflightReport, ce qui complète la matrice de demos Delphi, Lazarus et C++Builder pour le workflow réutilisableFPdfPreflightReport - L’exemple C++Builder utilise
FPdfPreflightReport.hpppour générer des standard summaries, TXT report previews, TXT / HTML report files et le comportement Open Last Report TPdf.AboutInfo, Lazarus package metadata et installer version metadata ont été mis à jour pour indiquer 1.39.13
Version 1.39.12
- Ajout de
Demo\Lazarus\PreflightReport, qui apporte à Lazarus le workflow de preflight report pour PDF/A, PDF/UA, PDF/E, PDF/X, PDF/R et PDF/VT - L’exemple Lazarus peut ouvrir ou créer un PDF, sélectionner des target standards, prévisualiser les summary rows et le TXT report output, enregistrer des TXT / HTML reports et ouvrir le report enregistré le plus récent
TPdf.AboutInfo, Lazarus package metadata et installer version metadata ont été mis à jour pour indiquer 1.39.12
Version 1.39.11
Demo\Delphi\SearchAndSelecta été enrichi avec une liste de résultats de recherche sur toutes les pages qui enregistre page number, character index et preview text- Ajout de Previous / Next match navigation et de double-click result jumping, tout en conservant le comportement de
HighlightSearchTextsur la page courante TPdf.AboutInfo, Lazarus package metadata et installer version metadata ont été mis à jour pour indiquer 1.39.11
Version 1.39.10
Demo\Delphi\SecurityAuditajoute les actions Save Report et Copy Report qui exportent le summary courant et les finding rows sous forme de TXT audit report- Le demo efface maintenant le report export state lorsque le audit panel est réinitialisé, afin que les reports copiés ou enregistrés restent alignés avec les findings visibles
TPdf.AboutInfo, Lazarus package metadata et installer version metadata ont été mis à jour pour indiquer 1.39.10
Version 1.39.9
Demo\Delphi\ContentExtractionLabajoute source-PDF save, report copy-to-clipboard et des actions all / none category selection- Le demo invalide maintenant le report courant quand category selection change, afin que les TXT / JSON exports reflètent le extraction scope visible
TPdf.AboutInfo, Lazarus package metadata et installer version metadata ont été mis à jour pour indiquer 1.39.9
Version 1.39.8
- Ajout de
Demo\Delphi\ContentExtractionLab, un workflow sample unifié de content extraction pour document metadata, page text, page objects, images, attachments, links, annotations, bookmarks et font / character metrics - L'exemple peut ouvrir un PDF existant ou créer un synthetic PDF avec du contenu text, image, attachment et annotation, puis générer des summary rows et des rapports TXT / JSON détaillés
- Mise à jour de
TPdf.AboutInfo, Lazarus package metadata et installer version metadata pour indiquer 1.39.8
Version 1.39.7
- Ajout de
Lib\FPdfPreflightReport.pas, un helper de rapport réutilisable qui regroupeValidatePdfA,ValidatePdfUa,ValidatePdfE,ValidatePdfX,ValidatePdfRetValidatePdfVTdans un objetTPdfPreflightReport - Ajout de
Demo\Delphi\PreflightReport, un exemple de workflow qui ouvre ou crée un PDF, sélectionne les standards cibles, affiche des summary rows et issue recommendations, puis enregistre des rapports TXT ou HTML - Les rapports générés décrivent explicitement la limite de la marker-level validation intégrée afin que les applications puissent l'associer à des content-level preflight tools dédiés si nécessaire
- Mise à jour de
TPdf.AboutInfo, Lazarus package metadata, package project lists et installer version metadata pour indiquer 1.39.7
Version 1.39.6
Demo\Delphi\SearchAndSelecta été ajouté comme exemple viewer workflow ciblé pour search highlighting, text selection, selected-text preview, copy, clear et spread display modes- L'exemple démontre
HighlightSearchText, les options de recherche match-case / whole-word,AllowUserTextSelection,SelectedText,SelectAll,CopySelectionToClipboardetClearSelectionsans ajouter de nouvelle API de bibliothèque - Mise à jour de
TPdf.AboutInfo, Lazarus package metadata et installer version metadata pour indiquer 1.39.6
Version 1.39.5
Demo\Delphi\ViewerInteractionLaba été étendu en exemple viewer UX de style SearchAndSelect avecHighlightSearchText, options match-case / whole-word, aperçu du texte sélectionné et contrôles existants de sélection / presse-papiersDemo\Delphi\PrintDialoga été étendu pour inspecter PDF author print preferences :PrintCopies,PrintPageRanges,PrintScaling,PrintPaperHandlinget duplex mapping visible viaSetPdfPrintPaperHandlingDevModeDemo\Delphi\SecurityAudita été ajouté comme exemple risk-surface en lecture seule listant permissions, attachments, document JavaScript, URI / Launch links, web links, signatures, XFA state et V8 / XFA helper availability- Mise à jour de
TPdf.AboutInfo, Lazarus package metadata et installer version metadata pour indiquer 1.39.5
Version 1.39.4
- Ajout de
Demo\CBuilder\ImageToPDFetDemo\Lazarus\ImageToPDF, ce qui complète la matrice d'exemples ImageToPDF pour Delphi, C++Builder et Lazarus - Les nouveaux exemples démontrent la sélection multi-images, l'aperçu de l'image sélectionnée, une page PDF par image, le dimensionnement A4 portrait / landscape, le centrage et la mise à l'échelle de l'image, la progression par image et l'ouverture du PDF généré après l'enregistrement
- Mise à jour de
TPdf.AboutInfo, Lazarus package metadata et installer version metadata pour indiquer 1.39.4
Version 1.39.3
- Ajout de
Demo\CBuilder\BatchExport, qui apporte le flux d'export multi-fichiers PDF vers JPG à C++Builder aux côtés des exemples Delphi et Lazarus existants - L'exemple démontre
LoadCustomDocument,IPdfCancellationTokenSource, l'entréeTFileStreamen streaming, la progression par fichier et par page, la gestion de l'annulation, les entrées DPI / quality / password et l'ouverture du dossier de sortie à la fin - Mise à jour de
TPdf.AboutInfo, Lazarus package metadata et installer version metadata pour indiquer 1.39.3
Version 1.39.2
- Ajout de
Demo\Delphi\WatermarkStamp, un exemple exécutable de flux Form XObject qui crée un PDF cible et un stamp PDF réutilisable, puis applique des filigranes centrés, des tampons en haut à droite et des libellés de numéro de page sur chaque page - L'exemple démontre
CreateXObjectFromPage,InsertFormObjectFromXObject,TPdfMatrixetFPDFPageObj_SetMatrixsans ajouter de nouvelle API de bibliothèque - Mise à jour de
Docs\en-us\Examples.htmlpour utiliser le modèle actuelTPdfMatrix.Handlelors du passage de matrices àFPDFPageObj_SetMatrix - Mise à jour de
TPdf.AboutInfo, Lazarus package metadata et installer version metadata pour indiquer 1.39.2
Version 1.39.1
- Ajout de
Demo\Delphi\ViewerInteractionLab, un exemple ciblé deTPdfViewpour les modes d’affichage, les modes d’ajustement, les couleurs de page, la rotation, la sélection de texte par l’utilisateur, les actions du presse-papiers et le retour de coordonnéesDeviceToPage - Ajout de
Demo\CBuilder\StandardsLab/Demo\Lazarus\StandardsLabafin que les utilisateurs Lazarus puissent exécuter le flux de validation et de sortie des marqueurs PDF/A, PDF/UA, PDF/E, PDF/X, PDF/R et PDF/VT - Les unités de standards ont été listées dans
Lib\37.0\PDFiumPas.dprojetLib\FPC\PDFiumLaz.lpk, et la compilation du démo DelphiSplitViewa été réparée en supprimant un import dupliqué deWinapi.ShellAPI - Correction des blocages de build par lot des démos Delphi dans
BatchExport,PDFViewer,MultiPageVieweretSplitView, sans modifier leur comportement à l’exécution - Correction de la compatibilité du build par lot des démos C++Builder dans
PDFVieweretMultiPageVieweren remplaçantnullptrparNULLpour le mode de projet actuel - Mise à jour de
TPdf.AboutInfo, des métadonnées du paquet Lazarus et des métadonnées de version de l’installateur pour annoncer la version 1.39.1
Version 1.39.0
- Ajout de
Demo\Delphi\StandardsLab, un exemple exécutable de flux de travail standards qui charge ou crée un PDF, exécuteValidatePdfA,ValidatePdfUa,ValidatePdfE,ValidatePdfX,ValidatePdfRetValidatePdfVT, puis affiche la conformance détectée, l'état de réussite et le nombre d'issue dans une grille unique - Les boutons d'enregistrement de StandardsLab appellent
SaveAsPdfA,SaveAsPdfUa,SaveAsPdfE,SaveAsPdfX,SaveAsPdfRetSaveAsPdfVT, ce qui rend visible la sortie marker des standards PDF sans écrire de harnais personnalisé - Mise à jour de
TPdf.AboutInfo, des métadonnées du paquet Lazarus et des métadonnées de version de l'installateur pour indiquer 1.39.0
Version 1.38.0
- Les surimpressions de recherche et de sélection de texte de
TPdfViewutilisent maintenant un vrai alpha blending au lieu d’un dessin par mask logique, ce qui préserve le contenu de la page sous les surbrillances - Ajout de
SetPdfPrintPaperHandlingDevModepour mapperTPrintPaperHandlingvers les valeurs WindowsDEVMODE.dmDuplex:DMDUP_SIMPLEX,DMDUP_HORIZONTALetDMDUP_VERTICAL TPdfView.SmoothScrollanime désormais les commandes line/page de scrollbar en timer-driven segments ; le thumb tracking reste immédiatTPdf.AboutInfoet les métadonnées de version des installateurs passent à 1.38.0
Version 1.37.0
TPdfpossède désormais un verrou de rendu par instance qui sérialiseRenderPage,RenderTile,RenderPageProgressive, le rechargement de page et le déchargement de document. Le rendu worker via un composant partagé devient praticable, l’application restant responsable des mutations et du cycle de vie- Correction de l’enveloppe bitmap zero-copy pour refuser les DIB
TBitmapbottom-up et revenir à un tampon PDFium avec copie finale, supprimant les échecs stride corruption / access violation des tests de rendu VCL - Comportement de sélection
TPdfViewresserré :AllowUserTextSelectionne bloque que les entrées utilisateur, les APIs de sélection par code continuent de peindre, etSelectAllsuit le spread réellement visible afin que la page de couverture ne sélectionne plus la page 2. Tests Delphi, Lazarus et C++Builder étendus TPdf.AboutInfoet les métadonnées de version des installateurs passent à 1.37.0
Version 1.36.0
- Activation de la sélection de texte côté utilisateur final dans
TPdfView: la propriétéAllowUserTextSelection, réservée en v1.17.0, pilote désormais une chaîne complète de sélection par glisser. Un clic gauche sur un caractère de texte entre en mode sélection, avec hit-test automatique ; un clic gauche sur une zone vide continue à faire défiler comme auparavant. Le widget de remplissage de formulaire garde la priorité, de sorte qu’un clic sur un champ de formulaire continue à focaliser ce champ au lieu de démarrer une sélection - Le double-clic sélectionne le mot, le triple-clic sélectionne la ligne,
Ctrl+Asélectionne la page courante, ou les deux pages dans les modes d’affichage en double page, etCtrl+Ccopie la sélection vers le presse-papiers Windows sous forme deCF_UNICODETEXT Shift+Left/Shift+Rightétendent la sélection caractère par caractère, avec débordement vers la page adjacente en mode étalé ;Shift+Home/Shift+Endétendent jusqu’au bord visuel de la ligne en utilisant la hauteur de boîte du caractère d’origine comme tolérance de regroupement de ligne, afin que les lignes mêlant plusieurs tailles de police restent correctement regroupées- Le survol du texte remplace le curseur par
crIBeam; en dehors du texte, le curseur par défaut est restauré. Pendant un glisser de sélection de texte, faire glisser dans une zone morte de 20 pixels sur n’importe quel bord du visualiseur déclenche un défilement automatique de la page, avec tick de 50 ms et 16 px par tick, borné par les mêmes limites que le chemin de panoramique, afin que la sélection puisse dépasser le viewport courant sans devoir relâcher la souris - La sélection inter-pages fonctionne dans les modes d’affichage étalés
dmTwoPageContinuousetdmTwoPageContinuousWithCover: un glisser commencé sur la page de gauche et terminé sur la page de droite sélectionne la plage contiguë couvrant les deux.SelectedTextassemble les segments par page avec CR/LF afin que le texte reconstruit se lise comme un contenu multiligne normal - Nouvelle propriété publiée
SelectionColor, par défautclHighlight, la couleur de sélection système de Windows, indépendante deHighlightColorqui colore les résultats de recherche en jaune. Les surlignages de recherche et une sélection active par glisser peuvent ainsi être affichés simultanément à l’écran sans conflit de couleur - Le nouvel événement publié
OnSelectionChangese déclenche chaque fois que les plages matérialisées de la sélection mutent réellement, jamais lors d’une réapplication identique, ce qui permet aux applications hôtes de le raccorder directement au texte d’une barre d’état ou à l’état activé d’un bouton sans logique de debounce - Nouvelle API publique sur
TPdfView:HasSelection,SelectionCharCount,SelectedText,ClearSelection,SelectAll,CopySelectionToClipboard. Ce sont des points d’entrée au niveau du code et ils fonctionnent toujours quelle que soit la valeur deAllowUserTextSelection; le drapeau ne bloque que l’entrée utilisateur, souris, Ctrl+C, Ctrl+A et Shift+arrows, de sorte que des hôtes en mode kiosque peuvent désactiver la sélection pilotée par l’utilisateur tout en construisant des boutons de barre d’outils « Tout sélectionner / Copier » qui appellent la même API - Un menu contextuel par défaut au clic droit,
Copy/复制, est attaché automatiquement lorsque l’hôte n’a pas assigné son proprePopupMenu; le flux standard « sélectionner du texte, clic droit, copier » fonctionne immédiatement. Le libellé est choisi entre l’anglais et le chinois viaSysLocale.PriLangID; les hôtes qui ont besoin d’une localisation complète, ou d’un menu plus riche, n’ont qu’à affecter leur proprePopupMenuet le menu par défaut est alors supprimé - La sélection est automatiquement effacée lors des transitions
SetPdf,SetPageNumber,SetActive(False)etDisplayMode, avec un déclenchement unique deOnSelectionChangelorsque la sélection précédente n’était pas vide. Le sous-système de remplissage de formulaire garde la priorité : pendant l’édition d’un champ de formulaire, tous les raccourcis clavier de sélection se reportent, afin que le champ reçoiveCtrl+C,Ctrl+AetShift+arrowspour sa propre sélection - Extension des suites de régression Delphi et Lazarus à 202 cas chacune, et de la suite C++Builder à 159 cas, couvrant les valeurs par défaut, les allers-retours, le comportement de l’API publique, les effacements lors des changements d’état, le glisser de souris, hit-text et hit-blank, le clic par rapport au glisser, le basculement du curseur IBeam, le double-clic mot, le triple-clic ligne, les raccourcis clavier, l’attache, le report et le libellé du menu contextuel par défaut, ainsi que la sélection inter-pages en mode étalé, y compris une vérification d’aller-retour CR/LF du presse-papiers
Version 1.35.0
- Ajout de la prise en charge de l’injection de marqueurs PDF/VT (ISO 16612-2:2010) : TPdf.SaveAsPdfVT promeut le document courant en fichier conforme PDF/VT-1 ou PDF/VT-2, le sous-ensemble PDF pour l’impression variable et transactionnelle. PDF/VT repose sur PDF/X-4, et ISO 16612-2 §6.2.1 exige que tout fichier PDF/VT-1 soit aussi conforme à PDF/X-4, de sorte que l’injecteur écrit l’ensemble complet des marqueurs PDF/X-4, XMP
pdfxid:GTS_PDFXVersion = "PDF/X-4", Info/GTS_PDFXVersion (PDF/X-4)et/Trapped, ainsi que le catalogue/OutputIntentsréférençant un dictionnaire OutputIntent avec profil ICC embarqué, en plus des propriétés spécifiques à PDF/VT - L’injection spécifique à PDF/VT couvre XMP
pdfvtid:GTS_PDFVTVersion, égal à "PDF/VT-1" ou "PDF/VT-2" selon §6.3 Table 2, etpdfvtid:GTS_PDFVTModDate, maintenu synchronisé avecxmp:ModifyDateselon §6.3 NOTE 1, ainsi qu’une description pdfaExtension:schemas qui déclare à la fois les espaces de noms pdfxid et pdfvtid, avec les URI NPEShttp://www.npes.org/pdfx/ns/id/ethttp://www.npes.org/pdfvt/ns/id/. Le trailer porte un tableau/ID - Ajout de TPdf.SaveAsPdfVTToStream pour la sortie PDF/VT en mémoire, ainsi que d’un raccourci d’options par défaut
TPdf.SaveAsPdfVT(FileName)qui produit un PDF/VT-1 avec l’OutputIntent sRGB IEC61966-2.1 embarqué, 3144 octets, le même profil que SaveAsPdfA / SaveAsPdfX, et/Trapped /False - Ajout de TPdf.ValidatePdfVT : vérifie, sur un PDF ouvert, les marqueurs de conformité PDF/VT, XMP
pdfvtid:GTS_PDFVTVersionetGTS_PDFVTModDate, l’égalité entrepdfvtid:GTS_PDFVTModDateetxmp:ModifyDate, la présence de l’identifiant sous-jacentpdfxid:GTS_PDFXVersion, la présence du catalogue/DPartRootselon §6.5, les/OutputIntentsavec/DestOutputProfile, l’état du chiffrement, la présence dexmp:CreateDate/ModifyDateet le trailer /ID, puis renvoie TPdfVTValidationResult avec le niveau détecté et l’ensemble des problèmes trouvés - Ajout de la propriété TPdf.PdfVTConformance : elle renvoie le niveau de conformité du document actuellement ouvert, pvc1, pvc2, pvcNone ou pvcUnknown, sans nécessiter d’appel explicite à ValidatePdfVT
- Nouveaux types exportés dans la nouvelle unité FPdfPdfvt : TPdfVTConformance (pvcUnknown/None/1/2), TPdfVTTrappedState (ptvUnspecified/True/False/Unknown), TPdfVTValidationResult, TPdfVTValidationIssue, TPdfVTSaveOptions
- La hiérarchie Document Part,
DPartRoot/DPartselon §6.5, est une structure au niveau de l’application qui dépend du flux d’impression à données variables, du destinataire et du mappage des plages de pages. SaveAsPdfVT ne synthétise PAS cet arbre DPart ; ValidatePdfVT expose un/DPartRootmanquant sous la forme depvviMissingDPartRootafin que les appelants puissent faire passer les fichiers PDF/VT par une étape séparée de construction du DPart. Les exigences PDF/X-4 au niveau contenu, incorporation des polices, transparence, couleurs gérées par ICC, interdictions OPI, JavaScript et Reference XObject, restent à la charge de l’auteur du document et du pipeline de rendu PDFium - La chaîne TPdf.AboutInfo a été mise à jour pour signaler la version courante du produit
Version 1.34.0
- Ajout de la prise en charge de l’injection de marqueurs PDF/R-1 (ISO 23504-1:2020) : TPdf.SaveAsPdfR promeut le document courant en fichier conforme PDF/R-1, le sous-ensemble PDF de transport d’images raster utilisé pour les documents numérisés. L’injection couvre les exigences au niveau format de fichier qui peuvent être attachées par post-traitement : le commentaire d’identification de version unique
%PDF-raster-1.0écrit entre le dictionnaire trailer et le mot-clé startxref selon §5, le dictionnaire catalogue réduit à la liste blanche du §6.3, avec seulement Version, ViewerPreferences, PageLayout, PageMode, AcroForm et Metadata, le Document Information Dictionary réduit à la liste blanche du §6.4.3, avec seulement Creator, Producer, CreationDate et ModDate, un flux XMP /Metadata de catalogue portant les quatre entrées du §6.4.4 Table 1, xmp:CreatorTool, pdf:Producer, xmp:CreateDate et xmp:ModifyDate, ainsi qu’un tableau /ID dans le trailer - Ajout de TPdf.SaveAsPdfRToStream pour la sortie PDF/R en mémoire, ainsi que d’un raccourci d’options par défaut
TPdf.SaveAsPdfR(FileName)pour le cas le plus courant - Ajout de TPdf.ValidatePdfR : vérifie qu’un PDF ouvert porte les marqueurs de conformité PDF/R-1, le commentaire de pied de page
%PDF-raster-x.y, la version d’en-tête, l’absence de /Type /ObjStm, la conformité du catalogue à la liste blanche, la conformité du dictionnaire Info à la liste blanche, la présence du flux de métadonnées XMP et le trailer /ID, puis renvoie TPdfRValidationResult avec le niveau détecté et l’ensemble des problèmes trouvés - Ajout de la propriété TPdf.PdfRConformance : elle renvoie le niveau de conformité du document actuellement ouvert, prc1, prcNone ou prcUnknown, sans nécessiter d’appel explicite à ValidatePdfR
- Nouveaux types exportés dans la nouvelle unité FPdfPdfr : TPdfRConformance, TPdfRValidationResult, TPdfRValidationIssue, TPdfRSaveOptions.
TPdfRSaveOptions.Defaultpositionne StripInfoOptionalEntries et StripCatalogOptionalEntries à True, de sorte que l’injecteur produit par défaut un catalogue et un dictionnaire Info conformes aux §6.3 et §6.4.3 ; les appelants peuvent les passer à False pour préserver les entrées de la source, auquel cas la sortie ne satisfera pas ces clauses PDF/R, mais les autres marqueurs resteront attachés - Les exigences au niveau contenu restent à la charge du PDF source : structure de Contents par page selon §6.5.1, forme MediaBox
[0 0 w h]selon §6.5.3, restrictions de filtres selon §6.2.2, seulement FlateDecode, CCITTFaxDecode bitonal et DCTDecode gris ou RGB 8 bits, absence d’object streams selon §6.2.4 et disposition des bandes selon §6.6. Ces exigences ne peuvent pas être imposées par post-traitement ; PDF/R est structurellement un sous-ensemble bien plus strict que les autres standards PDF/x et exige de générer correctement les octets source. ValidatePdfR expose les problèmes de format de fichier que cette unité peut détecter ; associez-le à un validateur PDF/R du TWAIN Working Group pour une vérification complète au niveau contenu - La chaîne TPdf.AboutInfo a été mise à jour pour signaler la version courante du produit
Version 1.33.0
- Ajout de la prise en charge de l’injection de marqueurs PDF/X, famille ISO 15930 : TPdf.SaveAsPdfX promeut le document courant en fichier conforme PDF/X-1a:2001, PDF/X-3:2002 ou PDF/X-4 par post-traitement du PDF de base avec une mise à jour incrémentale. L’injection couvre les exigences au niveau format de fichier qui peuvent être attachées par post-traitement : un flux de métadonnées XMP portant
pdfxid:GTS_PDFXVersionetpdfxid:GTS_PDFXConformancepour PDF/X-1a et PDF/X-3, ainsi que la description pdfaExtension:schemas correspondante, un Document Information Dictionary réécrit avec/GTS_PDFXVersion,/GTS_PDFXConformanceet/Trapped, un catalogue mis à jour avec/OutputIntents [N 0 R]référençant un dictionnaire OutputIntent portant/S /GTS_PDFXet un profil ICC embarqué, et un tableau trailer/ID - Ajout de TPdf.SaveAsPdfXToStream pour la sortie PDF/X en mémoire, ainsi que d’un raccourci d’options par défaut
TPdf.SaveAsPdfX(FileName)qui produit un PDF/X-4 avec l’OutputIntent sRGB IEC61966-2.1 intégré, 3144 octets, identique au profil utilisé par SaveAsPdfA - Ajout de TPdf.ValidatePdfX : vérifie sur un PDF ouvert les marqueurs de conformité PDF/X, l’identifiant pdfxid XMP et son égalité avec la valeur du dictionnaire Info, la description du schéma d’extension pdfxid, le tableau /OutputIntents avec /DestOutputProfile, la présence du Title, le trailer /ID, l’état du chiffrement et la présence de xmp:CreateDate / xmp:ModifyDate, puis renvoie TPdfXValidationResult avec le niveau détecté et l’ensemble des problèmes trouvés
- Ajout de la propriété TPdf.PdfXConformance : elle renvoie le niveau de conformité du document actuellement ouvert, pxc1a, pxc3, pxc4, pxcNone ou pxcUnknown, sans nécessiter d’appel explicite à ValidatePdfX. La chaîne de version XMP est analysée pour désambiguïser les trois niveaux de conformité
- Nouveaux types exportés dans la nouvelle unité FPdfPdfx : TPdfXConformance (pxcUnknown/None/1a/3/4), TPdfXTrappedState (ptUnspecified/True/False/Unknown), TPdfXValidationResult, TPdfXValidationIssue, TPdfXSaveOptions.
TPdfXSaveOptions.Defaultcible PDF/X-4 avec sRGB OutputIntent et/Trapped /False; les appelants peuvent remplacerConformance, fournir un blob CMYK viaIccProfileDatapour des flux d’impression commerciale, ou modifierOutputCondition,OutputConditionIdentifieretRegistryNameafin de pointer vers une entrée spécifique d’un registre de caractérisation ICC, par exemple FOGRA39 ou GRACoL2006_Coated1v2 - Les exigences au niveau contenu, toutes les polices incorporées, l’absence de JavaScript, l’absence d’annotations visibles, l’interdiction d’OPI et les règles de transparence pour PDF/X-1a et PDF/X-3, restent à la charge de l’auteur du document et du pipeline de rendu PDFium. Associez ValidatePdfX à un outil de preflight tel que callas pdfaPilot ou le Ghent PDF Workgroup Output Suite pour une vérification complète de conformité
- La chaîne TPdf.AboutInfo a été mise à jour pour signaler la version courante du produit
Version 1.32.0
- Ajout de la prise en charge de l’injection de marqueurs PDF/E-1 (ISO 24517-1:2008) : TPdf.SaveAsPdfE transforme le document courant en fichier conforme PDF/E-1 en appliquant une mise à jour incrémentale au PDF de base. L’injection couvre les exigences du format de fichier applicables par post-traitement : un flux de métadonnées XMP portant
pdfe:ISO_PDFEVersion = "PDF/E-1"avec la description pdfaExtension:schemas correspondante, un Document Information Dictionary réécrit avec l’entrée obligatoire/ISO_PDFEVersion (PDF/E-1)du §5, les blocs de correspondance Info-XMP hérités d’ISO 19005-1 §6.7 via §13.1 (dc:title / dc:creator / dc:description / pdf:Producer / pdf:Keywords / xmp:CreateDate / xmp:ModifyDate / xmp:MetadataDate / xmp:CreatorTool), et le tableau/IDdu trailer exigé par §6.2 - Ajout de TPdf.SaveAsPdfEToStream pour produire un PDF/E en mémoire, ainsi que du raccourci à options par défaut
TPdf.SaveAsPdfE(FileName)pour le cas courant - Ajout de TPdf.ValidatePdfE : vérifie les marqueurs de conformité PDF/E-1 d’un PDF ouvert, notamment la présence de pdfe:ISO_PDFEVersion dans XMP et son égalité avec la valeur du dictionnaire Info, la description du schéma d’extension pdfe, l’entrée /ISO_PDFEVersion du dictionnaire Info, le tableau /ID du trailer et la présence de xmp:CreateDate / xmp:ModifyDate. La méthode renvoie un résultat structuré contenant le niveau de conformité détecté et les problèmes trouvés
- Ajout de la propriété TPdf.PdfEConformance : renvoie le niveau de conformité du document ouvert (pec1, pecNone ou pecUnknown) sans nécessiter d’appel explicite à ValidatePdfE
- Nouveaux types exportés dans la nouvelle unité FPdfPdfe : TPdfEConformance, TPdfEValidationResult, TPdfEValidationIssue, TPdfESaveOptions
- La réécriture du dictionnaire Info est une première dans le post-traitement PDF/x de PDFium Delphi Component. L’objet Info existant est réécrit avec le même numéro d’objet, ce qui préserve la validité de la sous-section xref et de la référence /Info du trailer ; un nouveau dictionnaire Info est créé lorsque le trailer source ne contient pas d’entrée /Info. PDFium produit lui-même un dictionnaire Info dans chaque sortie SaveAs : le cas courant passe donc par la réécriture
- Les exigences portant sur le contenu (incorporation des polices, CMaps ToUnicode, XObjects, clés ExtGState et formulaires XFA interdits, etc.) restent à la charge de l’auteur du document. SaveAsPdfE ajoute les marqueurs du format de fichier, mais ne modifie pas le contenu des pages et ne supprime pas les fonctionnalités interdites
- Chaîne TPdf.AboutInfo mise à jour pour rapporter la version actuelle du produit
Version 1.31.0
- Ajout du support d’injection de marqueurs PDF/UA-1 (ISO 14289-1:2014) : TPdf.SaveAsPdfUa promeut le document courant en fichier conforme PDF/UA-1 par post-traitement du PDF de base avec une mise à jour incrémentale. L’injection couvre les exigences au niveau format de fichier applicables par post-traitement — flux de métadonnées XMP portant
pdfuaid:part = 1avec la description pdfaExtension:schemas correspondante,dc:titleobligatoire, catalog/MarkInfo << /Marked true /Suspects false >>et/ViewerPreferences << /DisplayDocTitle true >>(uniquement si la source n’en a pas), catalog/Lang(quand l’appelant fournit une étiquette BCP 47), et tableau/IDdans le trailer - Ajout de TPdf.SaveAsPdfUaToStream pour sortie PDF/UA en mémoire, et d’un raccourci avec options par défaut
TPdf.SaveAsPdfUa(FileName)pour le cas courant - Ajout de TPdf.ValidatePdfUa : vérifie un PDF ouvert pour les marqueurs de conformité PDF/UA-1 (existence de StructTreeRoot, /Lang, /MarkInfo /Marked true avec /Suspects = false, /ViewerPreferences /DisplayDocTitle true, identifiant XMP pdfuaid:part, présence de dc:title, /ID du trailer, statut de chiffrement) et renvoie un résultat structuré avec le niveau de conformité détecté et l’ensemble des problèmes trouvés
- Ajout de la propriété TPdf.PdfUaConformance : renvoie le niveau de conformité du document ouvert (puc1, pucNone ou pucUnknown) sans appel explicite à ValidatePdfUa
- Nouveaux types exportés dans la nouvelle unité FPdfPdfua : TPdfUaConformance, TPdfUaValidationResult, TPdfUaValidationIssue, TPdfUaSaveOptions
- Les champs vides de TPdfUaSaveOptions (Title / Author / Subject / Keywords / Creator / Producer / CreationDate / ModDate / DocumentId / InstanceId / Language) sont remplis automatiquement via FPDF_GetMetaText / FPDF_GetFileIdentifier / FPDFCatalog_GetLanguage
- Les exigences au niveau contenu (complétude du taggage StructTreeRoot, texte Alt de Figure, CMaps ToUnicode, incorporation de polices, etc.) restent à la charge de l’auteur du document — SaveAsPdfUa n’ajoute que les marqueurs format. ValidatePdfUa signale l’absence de StructTreeRoot comme
pvuaiMissingStructTreeRoot - Chaîne TPdf.AboutInfo mise à jour pour rapporter la version actuelle du produit
Version 1.30.0
- La sortie PDF/A-1b satisfait désormais les exigences d’équivalence entre Document Information Dictionary et XMP d’ISO 19005-1 (avec Cor.1:2007) : chaque entrée du Info dictionary écrite par PDFium dans le PDF de base est reflétée dans le paquet XMP, y compris Title (dc:title), Author (dc:creator), Subject (mappé vers dc:description par Cor.1), Keywords (pdf:Keywords), Creator (xmp:CreatorTool), Producer (pdf:Producer), CreationDate (xmp:CreateDate) et ModDate (xmp:ModifyDate). xmp:MetadataDate est également émis
- Le trailer d’un document PDF/A contient maintenant toujours un tableau /ID (exigence stricte d’ISO 19005-1 6.1.3). Lorsque TPdf.SaveAsPdfA traite un document dont la source possède déjà un file identifier, les IDs de 16 octets permanent et changing sont réutilisés ; sinon, un ID de secours de 16 octets déterministe est dérivé des octets sources
- Le XMP injecté embarque maintenant la description du extension schema pdfaid requise par ISO 19005-1 6.7.8 (remplacé par Cor.1) — pdfaid est considéré comme un extension schema relatif à XMP Specification 2004, donc tous les fichiers conformes doivent déclarer ses property names, value types et categories dans le conteneur pdfaExtension:schemas
- TPdfASaveOptions gagne cinq nouveaux champs optionnels : Producer, CreationDate, ModDate (chaînes de date PDF au format « D:YYYYMMDDHHmmSSOHH'mm' »), DocumentId et InstanceId (chaînes de 16 octets pour le tableau /ID du trailer). TPdf.SaveAsPdfA / SaveAsPdfAToStream remplissent automatiquement les champs vides via FPDF_GetMetaText et FPDF_GetFileIdentifier ; le code existant continue donc à fonctionner sans modification
- TPdf.ValidatePdfA / TPdf.PdfAConformance signalent maintenant trois problèmes supplémentaires : pvaiMissingTrailerId (pas de /ID dans le trailer), pvaiMissingXmpDates (xmp:CreateDate ou xmp:ModifyDate manquant) et pvaiMissingExtensionSchema (description de l’extension schema pdfaid absente)
- Les caractères non-ASCII de Title, Author, Subject, Keywords, Creator et Producer sont désormais encodés en UTF-8 dans le paquet XMP (XMP Specification exige UTF-8), préservant les métadonnées multilingues lors de la traversal de SaveAsPdfA
- Chaîne TPdf.AboutInfo mise à jour pour rapporter la version actuelle du produit
Version 1.29.0
- Mise à jour des DLL PDFium fournies (Win32 et Win64, builds standard et V8) vers l’instantané PDFium du 2026-05-22, intégrant les correctifs des chemins de plantage de FPDFText_SetText / FPDFText_SetCharcodes et divers renforcements internes du projet PDFium
- Exposition du nouveau drapeau de sauvegarde FPDF_SUBSET_NEW_FONTS de PDFium dans FPdfPageOps.pas, permettant aux appelants de FPDF_SaveAsCopy de demander le sous-ensemble automatique des fichiers de polices incorporées pour les nouveaux objets de texte. Les constantes existantes FPDF_INCREMENTAL, FPDF_NO_INCREMENTAL et FPDF_REMOVE_SECURITY sont désormais définies sous la forme de décalage de bits de PDFium (la valeur numérique héritée 3 est conservée en tant que FPDF_REMOVE_SECURITY_DEPRECATED pour la compatibilité binaire)
- Ajout de l’énumération FPDF_FONT_BACKEND_TYPE (FREETYPE / FONTATIONS) et du champ correspondant m_FontLibraryType sur FPDF_LIBRARY_CONFIG dans FPdfView.pas, afin que les applications qui initialisent PDFium avec le renderer Skia puissent choisir le backend de polices au démarrage
- Mise à jour de la signature de TFPDFPage_InsertObject pour correspondre à l’export C de PDFium : la fonction retourne désormais FPDF_BOOL (TRUE en cas de succès, FALSE si page_object est NULL ou si le transfert d’ownership échoue) au lieu de void. Les appels existants de PDFium Delphi Component compilent toujours sans modification, Delphi / FPC permettant d’ignorer la valeur de retour d’une fonction
- Correction de la chaîne TPdf.AboutInfo pour qu’elle indique la version actuelle du produit (elle était restée obsolète à v1.27.0 depuis la version 1.28.0 dédiée à la documentation)
Version 1.28.0
- Étendu de manière substantielle la documentation intégrée sur l’ensemble de la référence API : chaque entrée de propriété, méthode, événement et fonction globale comporte désormais une Description de 3 paragraphes, une liste Remarks, un Example Delphi multiligne et un bloc See Also plus riche — couvrant 200+ pages auparavant minces, dont tous les compteurs TPdf, les accesseurs de métadonnées, les accesseurs de polices et de caractères, les propriétés au niveau page, les enregistrements indexés, les méthodes au niveau document, et toute la surface d’état / affichage / événements de TPdfView
- Affiné la mise en page de l’aide pour correspondre à la base visuelle losLab : tailles h1/h2 harmonisées, styles de grille de navigation API consolidés dans la StyleSheet partagée, et suppression des surcharges CSS inline par page sur Navigation.html
- La documentation est désormais livrée avec un script utilitaire (Docs\Build-Expand-Entries.ps1) qui régénère l’enrichissement des pages d’entrée à partir d’une table de données unique, pour une maintenance reproductible
Version 1.27.0
- Ajouté la prise en charge de la création PDF/A-1b : TPdf.SaveAsPdfA enregistre tout document ouvert en tant que fichier conforme PDF/A-1b en post-traitant le PDF de base par une mise à jour incrémentale qui injecte un flux de métadonnées XMP, un OutputIntent ICC sRGB et un catalogue de document mis à jour — le tout sans nécessiter d’API DLL supplémentaires. Fonctionne sur toutes les plates-formes prises en charge par PDFium Delphi Component
- Ajouté TPdf.SaveAsPdfAToStream pour la sortie PDF/A en mémoire
- Ajouté TPdf.ValidatePdfA : vérifie la conformité PDF/A d’un PDF ouvert (marqueurs XMP pdfaid, OutputIntent avec profil ICC intégré, chiffrement) et renvoie un résultat structuré indiquant le niveau de conformité détecté et l’ensemble des problèmes spécifiques trouvés
- Ajouté la propriété TPdf.PdfAConformance : renvoie le niveau de conformité du document actuellement ouvert (pac1b, pac1a, pac2b, pac3b, pacNone ou pacUnknown) sans avoir besoin d’appeler explicitement ValidatePdfA
- Nouveaux types exportés : TPdfAConformance, TPdfAValidationResult, TPdfAValidationIssue, TPdfASaveOptions (dans la nouvelle unité FPdfPdfa.pas)
- SaveAsPdfA prend en charge un profil ICC personnalisé via TPdfASaveOptions.IccProfileData ; lorsqu’il est laissé vide, le profil sRGB IEC61966-2.1 intégré (HP/Microsoft, 3144 bytes) est utilisé automatiquement
- Remplacé la référence HTML monolithique par un système d’aide web restructuré : 302 pages d’entrée API individuelles (une par propriété, méthode, événement et fonction globale) couvrant TPdf et TPdfView, chacune avec une description complète, un tableau de paramètres, un exemple de code Delphi et des liens See Also
- Ajouté Navigation.html : un index de navigation API complet sur une seule page organisé en six sections (propriétés / méthodes / événements TPdf, propriétés / méthodes / événements TPdfView, fonctions globales) avec une grille flex à 5 colonnes pour une consultation rapide
- Reconstruit TPdf.html et TPdfView.html en tant que pages compactes de présentation des composants conservant les sections de référence de type (Types, Constants, Global Variables) et renvoyant aux pages d’entrée individuelles pour tous les membres
- Ajouté la recherche en texte intégral, propulsée par Search.js, avec une correspondance incrémentale côté client sur l’ensemble des 312 pages indexées
- Mis à jour toutes les barres de navigation du site pour pointer vers Navigation.html
Version 1.26.0
- Ajouté Demo/Lazarus/BatchExport, le portage LCL de la démo Delphi BatchExport de la v1.14.0. Même ensemble de fonctionnalités : export PDF -> JPG multi-fichiers avec progression globale par fichier, progression actuelle par page, saisie DPI / qualité / mot de passe, et un lot annulable coopérativement basé sur IPdfCancellationToken. Le dossier de sortie est ouvert dans le gestionnaire de fichiers de la plate-forme lorsque l’extraction se termine avec succès
Version 1.25.0
- Ajouté la réutilisation de pages via Form XObject à TPdf, permettant les flux de filigrane, de superposition de modèle et de “tamponner une page sur plusieurs” : CreateXObjectFromPage fabrique un handle réutilisable à partir de n’importe quelle page d’un autre document ; InsertFormObjectFromXObject insère UNE copie de la page encapsulée dans la page actuelle. Renvoie le FPDF_PAGEOBJECT inséré afin que l’appelant puisse le positionner / mettre à l’échelle / faire pivoter à l’aide de FPDFPageObj_SetMatrix et des assistants TPdfMatrix de la v1.9.0
- La nouvelle classe Pascal TPdfXObject encapsule le handle FPDF_XOBJECT de PDFium et le ferme automatiquement dans son destructeur, éliminant la cérémonie manuelle FPDF_CloseXObject
- Étendu les suites de régression Delphi et Lazarus à 147 cas chacune, et la suite C++Builder à 123 cas, couvrant les contrats de création de handle et d’insertion d’objet de page
Version 1.24.0
- Ajouté TPdf.RenderPageProgressive — une variante annulable de RenderPage qui pilote la boucle de rendu progressif de PDFium et interroge un IPdfCancellationToken de la v1.7.0 entre les itérations, de sorte que les longs rendus haute DPI puissent être interrompus en plein milieu d’une page au lieu de bloquer l’appelant jusqu’à l’achèvement
- Renvoie une valeur TPdfProgressiveStatus : prsDone, prsCancelled ou prsFailed. Passer AToken = nil pour effectuer le rendu jusqu’à la fin sans jamais marquer de pause (aucune possibilité de prsCancelled)
- Utilise le même chemin rapide zero-copy introduit dans la v1.21.0 — PDFium effectue le rendu directement dans le DIB du TBitmap de destination. Le même fallback hérité s’applique lorsque le DIB ne peut pas être encapsulé
- Étendu les suites de régression Delphi et Lazarus à 145 cas chacune, et la suite C++Builder à 121 cas, couvrant le token nil (achevé), le token pré-annulé (prsCancelled) et l’équivalence pixel avec RenderPage synchrone sur un token actif
Version 1.23.0
- Ajouté six nouvelles méthodes TPdfView qui exposent aux applications la sélection de texte dans les widgets de formulaire et l’Undo/Redo de PDFium : GetSelectedFormText renvoie le texte actuellement sélectionné dans le widget de formulaire focalisé ; SelectAllFormText sélectionne tous les caractères ; FormUndo / FormRedo / FormCanUndo / FormCanRedo pilotent l’historique d’édition du widget focalisé. Les API PDFium sous-jacentes étaient déjà liées mais n’avaient pas de point d’entrée de haut niveau. Les six méthodes court-circuitent de manière sûre lorsque la vue est inactive ou que le document n’a aucun widget AcroForm focalisé
- Étendu les suites de régression Delphi et Lazarus à 142 cas chacune, et la suite C++Builder à 119 cas, couvrant le contrat “pas de formulaire / pas de focus” pour chaque nouvelle méthode
Version 1.22.0
- Ajouté des enveloppes de composition de pages à TPdf : ImportPagesByIndex prend un tableau d’index basés sur zéro pour copier des pages spécifiques d’un document source ; ImportNPagesToOne renvoie un tout nouveau TPdf dont les pages sont des composites N-up de ce document ; MovePages réordonne les pages sur place. Les API PDFium sous-jacentes étaient déjà liées mais n’avaient pas de point d’entrée convivial pour Pascal
- ImportPagesByIndex accepte un tableau vide pour importer toutes les pages source (équivalent à passer nil au niveau de l’ABI C)
- Étendu les suites de régression Delphi et Lazarus à 136 cas chacune, et la suite C++Builder à 115 cas, couvrant l’importation de sous-ensemble, l’importation de document entier, le réordonnancement de page et le composite N-up
Version 1.21.0
- Amélioré les performances de rendu en faisant passer TPdf.RenderPage / TPdf.RenderTile (et les assistants TPdfView correspondants) sur un chemin de sortie zero-copy. PDFium écrit désormais directement dans le tampon DIB du TBitmap de destination au lieu d’un tampon interne qui était ensuite copié ligne par ligne, économisant une copie mémoire de width x height x 4 bytes par rendu. L’amélioration est la plus notable à haute DPI (panneaux de vignettes, export qualité impression, export par lots)
- L’ancien chemin par scanline est conservé comme fallback de sécurité pour le cas peu probable où le DIB de destination ne peut pas être encapsulé (dimensions extrêmes, stride inhabituel, OOM). Le comportement est identique au byte près entre les deux chemins, simplement plus lent dans le fallback
- Étendu les suites de régression Delphi et Lazarus à 132 cas chacune, et la suite C++Builder à 112 cas, couvrant la mise à niveau pf32bit du bitmap appelant, le round-trip de dimensions et un test de cohérence stride pour grand bitmap
Version 1.20.0
- Ajouté la mise en surbrillance des résultats de recherche à TPdfView : HighlightSearchText(Text, MatchCase, MatchWholeWord) parcourt la page de vue courante et renvoie le nombre de correspondances trouvées, peignant un masque HighlightColor sur chaque correspondance à chaque redessin. ClearHighlight supprime les surbrillances ; basculer la vue vers une autre page les efface automatiquement puisque les correspondances sont spécifiques à la page
- HighlightColor a pour valeur par défaut clYellow et est publié pour que les applications puissent thématiser la surbrillance en accord avec leur palette d’interface
- Étendu les suites de régression Delphi et Lazarus à 129 cas chacune, et la suite C++Builder à 109 cas, couvrant la couleur par défaut, le round-trip de couleur, les “vraies correspondances de mot dans un fixture” sur la chaîne sample.pdf, et le contrat “mot absent renvoie zéro correspondance”
Version 1.19.0
- Ajouté la propriété FitMode à TPdfView avec quatre valeurs : pfmNone (zoom manuel), pfmActualSize (100%), pfmFitPage (la page entière tient dans la fenêtre d’affichage) et pfmFitWidth (la largeur de page correspond à celle de la fenêtre d’affichage). Le mode d’ajustement actif est réappliqué automatiquement lors de Resize et lorsque la page courante change, de sorte que les documents longs aux tailles de page mixtes restent parfaitement cadrés
- Définir Zoom directement annule le mode d’ajustement actif (FitMode revient à pfmNone), conformément à la convention standard des visionneuses PDF où taper une valeur de zoom fait quitter Fit Page / Fit Width
- La valeur par défaut est pfmNone afin que les applications existantes conservent leur comportement de zoom explicite
- Étendu les suites de régression Delphi et Lazarus à 124 cas chacune, et la suite C++Builder à 106 cas, couvrant la valeur par défaut, le round-trip du mode, fit-page produisant un zoom réel sur un document chargé, et zoom manuel annulant le mode d’ajustement
Version 1.18.0
- Ajouté la propriété PageColor à TPdfView, découplant l’arrière-plan de la page PDF rendue de la Color du contrôle environnant. La valeur par défaut est clWhite, donc les pages PDF s’affichent désormais en blanc papier indépendamment du thème de l’application hôte. Les visionneuses en mode sombre peuvent désormais conserver une zone de défilement sombre tout en laissant la page PDF effective en blanc (ou toute autre couleur choisie par l’application)
- Changement de comportement : les applications qui définissaient TPdfView.Color pour recolorer la page PDF doivent désormais définir PageColor à la place. L’expérience par défaut s’améliore pour le cas courant (pages blanches sur arrière-plan de contrôle thématisé) sans aucun changement de code
- Étendu les suites de régression Delphi et Lazarus à 120 cas chacune, et la suite C++Builder à 103 cas, couvrant la valeur par défaut et le round-trip de couleur
Version 1.17.0
- Ajouté des bascules de verrouillage d’entrée utilisateur à TPdfView afin que les applications intégrant la visionneuse dans des kiosques, des panneaux d’aperçu ou des contextes en lecture seule puissent désactiver les gestes de navigation sans sous-classement : AllowUserPageChange contrôle les nouveaux raccourcis clavier PgUp / PgDn / Ctrl+Home / Ctrl+End ; ChangePageOnMouseScrolling contrôle les nouveaux sauts de page molette haut / molette bas ; AllowUserTextSelection est réservée au futur chemin de sélection de texte par glisser-souris. Les trois ont par défaut la valeur True afin que les applications existantes soient mises à niveau sans changement de comportement
- La navigation par molette saute Ctrl+molette pour que les applications puissent garder Ctrl+molette réservé au zoom
- Étendu les suites de régression Delphi et Lazarus à 118 cas chacune, et la suite C++Builder à 101 cas, couvrant les valeurs par défaut et le round-trip des bascules
Version 1.16.2
- Étendu la couverture de régression TPdfView pour les clics sur des liens d’annotation lorsque la page de la visionneuse diffère de la page TPdf associée, en utilisant un véritable chemin de clic souris en mode headless sur Delphi, Lazarus et C++Builder
- Les suites Delphi et Lazarus exécutent désormais 114 cas chacune, et C++Builder en exécute désormais 99
Version 1.16.1
- Corrigé la gestion des clics sur les liens dans TPdfView afin que les actions automatiques d’annotation et de lien web utilisent la page actuellement affichée par la visionneuse, même lorsque le composant TPdf associé est positionné sur une page différente
- Renforcé TPdfThumbnailView contre les références Pdf pendantes lorsque le composant TPdf lié est détruit
- Ajouté une couverture de régression sur la durée de vie de la référence des vignettes ; les suites Delphi et Lazarus exécutent désormais 113 cas chacune, et C++Builder en exécute désormais 98
- Synchronisé README, la documentation des tests, le contenu de recherche / d’index de l’aide HTML et les sorties générées des packages C++ avec les mises à jour d’intégration v1.7.0 à v1.16.0
Version 1.16.0
- Ajouté une nouvelle démo Delphi PrintDialog (Demo/Delphi/PrintDialog) qui se concentre sur l’impression N-up (1 / 2 / 4 / 9 pages par feuille) avec filtrage des pages paires / impaires, rendu en niveaux de gris et bordures de cellule optionnelles de 1 pixel. C’est un petit compagnon délibéré à la démo PrintPDF existante, qui couvre déjà l’aperçu, les fichiers récents, le zoom et la mise à l’échelle
Version 1.15.0
- Ajouté un nouveau composant TPdfThumbnailView (unité FPdfThumbnail) qui restitue une vignette de page par ligne dans un panneau latéral défilant avec mise en surbrillance au survol et à la sélection, plus la navigation clic-pour-aller. Conçu pour être placé à côté d’un TPdfView pour que les utilisateurs finaux puissent parcourir un long document par page
- Le composant est enregistré dans l’onglet de palette losLab aux côtés de TPdf et TPdfView ; propriétés clés : Pdf, CurrentPageIndex, ThumbnailWidth, ThumbnailHeight, TextColor, HoverColor, SelectionColor, BorderColor, et l’événement OnPageClick
- Étendu les suites de régression Delphi et Lazarus à 112 cas chacune, et la suite C++Builder à 97 cas, couvrant les valeurs par défaut, le round-trip de la taille de vignette, le clamp des valeurs extrêmes, le round-trip de couleur et l’affectation du gestionnaire d’événement
Version 1.14.0
- Ajouté une nouvelle démo Delphi BatchExport (Demo/Delphi/BatchExport) montrant comment convertir de nombreux fichiers PDF en JPG en une seule passe en utilisant TPdf.LoadCustomDocument pour un chargement en streaming, IPdfCancellationToken pour une annulation coopérative, et des barres de progression globale par fichier + actuelle par page. La démo utilise une instance TPdf par fichier (PDFium lui-même n’est pas thread-safe) et ouvre le dossier de sortie dans l’Explorateur lorsque l’extraction se termine avec succès
Version 1.13.0
- Ajouté une superposition d’interface de rendu asynchrone à TPdfView via trois nouvelles propriétés : AsyncRendering, LoadingText et LoadingColor. Lorsque AsyncRendering est True, le chemin de peinture de page unique dessine un petit indicateur “Loading...” au-dessus de la page rendue afin que les applications utilisant leur propre worker pour les longs rendus partagent une affordance visuelle cohérente
- Les valeurs par défaut préservent le comportement existant : AsyncRendering est False, donc les applications qui n’y participent pas ne voient aucun changement visuel
- La documentation précise que PDFium lui-même n’est pas thread-safe — déporter réellement le rendu sur un worker exige que l’appelant conserve un TPdf par worker ; la prochaine démo d’export par lots montre ce schéma
- Étendu les suites de régression Delphi et Lazarus à 106 cas chacune, et la suite C++Builder à 93 cas, couvrant les valeurs par défaut et le round-trip des trois propriétés
Version 1.12.0
- Ajouté la gestion des liens pilotée par clic à TPdfView. La nouvelle propriété LinkOptions contrôle le comportement automatique pour les quatre types d’actions de lien PDF : goto (saut de page), URI (ShellExecute), launch (ShellExecute) et embedded GotoR (réservé). Les valeurs par défaut activent loAutoGoto et loAutoOpenURI ; loAutoLaunch et loAutoEmbeddedGoto restent désactivés afin qu’un clic accidentel ne puisse pas exécuter un programme arbitraire
- Ajouté les événements OnAnnotationLinkClick et OnWebLinkClick qui se déclenchent avant toute action automatique et permettent aux applications d’inspecter le lien, de le marquer Handled ou de le rediriger (par exemple, vers une invite de sécurité)
- La détection de clic sur lien ne s’exécute que lorsque le geste est un clic plutôt qu’un glissement, en utilisant un nouvel ancrage MouseDown afin que les gestes de panoramique continuent à suivre le chemin de défilement existant sans changement
- Étendu les suites de régression Delphi et Lazarus à 102 cas chacune, et la suite C++Builder à 91 cas, couvrant les LinkOptions par défaut, le round-trip d’ensemble et l’affectation du gestionnaire d’événement
Version 1.11.0
- Ajouté un raffinement visuel à TPdfView : les propriétés PageShadowSize, PageShadowColor et PageBorderColor peignent une ombre portée optionnelle sous le rectangle de page et une bordure d’un pixel autour de celui-ci. Les valeurs par défaut préservent le rendu plat précédent (PageShadowSize = 0 ; la bordure est dessinée avec clBlack par défaut mais se fond dans l’arrière-plan blanc par défaut jusqu’à ce que les appelants modifient les couleurs)
- Ajouté une propriété SmoothScroll comme indicateur opt-in pour une future animation de défilement incrémentale ; la propriété fait un round-trip aujourd’hui et est câblée afin que les applications puissent persister la préférence, tandis que le côté rendu utilise toujours le comportement de défilement immédiat existant
- Étendu les suites de régression Delphi et Lazarus à 98 cas chacune, et la suite C++Builder à 89 cas, couvrant les valeurs par défaut, le round-trip de propriété et le clamp de taille d’ombre négative
Version 1.10.0
- Ajouté l’insertion directe d’image via de nouvelles surcharges TPdf.AddImage et TPdfView.AddImage qui prennent soit un chemin de fichier, soit un TBitmap, en plus du AddPicture existant basé sur TPicture. AddImage(FileName) reconnaît tout format enregistré auprès des unités graphiques VCL ou LCL (BMP, PNG via l’unité PngImage, JPG, etc.) et passe par le même pipeline qu’AddPicture afin que le comportement soit identique
- AddImage(TBitmap) ignore l’intermédiaire TPicture, ce qui simplifie les appelants qui détiennent déjà un TBitmap issu d’un rendu ou d’un travail de génération par lots
- Étendu les suites de régression Delphi et Lazarus à 92 cas chacune, et la suite C++Builder à 84 cas, couvrant l’insertion de bitmap, les bornes de l’objet de page, le rejet de bitmap nil et le chargement de fichier BMP
Version 1.9.0
- Ajouté la prise en charge de matrices de transformation de haut niveau via la nouvelle classe TPdfMatrix dans l’unité FPdfMatrix. TPdfMatrix encapsule le FS_MATRIX de PDFium avec une API OO pour Translate, Scale, Rotate, HorizontalFlip, VerticalFlip, CentralFlip, Skew et Multiply, adaptée à la composition de transformations avant de les remettre à FPDFPageObj_SetMatrix et aux API PDFium similaires
- TPdfMatrix.Multiply effectue correctement un instantané des six éléments de matrice avant de calculer les nouvelles valeurs de ligne, corrigeant un problème latent où les implémentations Pascal alternatives écrasent les éléments précédents pendant le même appel et produisent des résultats incorrects pour toute composition au-delà de la translation pure
- Étendu les suites de régression Delphi et Lazarus à 88 cas chacune, et la suite C++Builder à 81 cas, couvrant identité, reset, translate / scale / flip, ordre de composition post-multiplicatif et le cas de régression Multiply
Version 1.8.0
- Ajouté le chargement de flux à la demande via la nouvelle méthode TPdf.LoadCustomDocument(AStream, AOwnsStream) et la classe utilitaire TPdfStreamAdapter, adossées à FPDF_LoadCustomDocument de PDFium. PDFium lit désormais des blocs depuis le TStream fourni uniquement en cas de besoin, de sorte que les PDF très volumineux ou distants ne nécessitent plus de copie en mémoire préalable
- Ajouté la propriété de flux optionnelle : passer AOwnsStream = True remet la durée de vie du TStream à TPdf, qui le libère lors de l’exécution d’UnloadDocument
- Étendu les suites de régression Delphi et Lazarus à 79 cas chacune, et la suite C++Builder à 75 cas, couvrant le chargement en streaming via TFileStream, le nettoyage de flux possédé et le contrat “flux possédé en externe survit-décharge”
Version 1.7.0
- Ajouté des primitives d’annulation asynchrone coopérative dans la nouvelle unité FPdfAsync, exposant IPdfCancellationToken / IPdfCancellationTokenSource et un singleton réutilisable PdfNoCancellationToken, afin que les longs flux de rendu et d’export puissent prendre en charge une sémantique propre d’annulation depuis l’interface utilisateur
- Ajouté un assistant léger TPdfFuture<T> qui exécute un worker sur un thread d’arrière-plan et renvoie l’enveloppe TPdfFutureResult<T> vers le thread principal, distinguant les cas de succès, d’annulation et d’échec
- Étendu les suites de régression Delphi et Lazarus à 76 cas chacune, et la suite C++Builder à 73 cas, avec une couverture partagée de l’état d’annulation, de l’annulation idempotente, du fan-out de callback et de l’enregistrement post-annulation
Version 1.6.10
- Ajouté un accès TPdf.PrintPageRanges de haut niveau à la plage de pages d’impression définie dans les préférences de la visionneuse PDF, renvoyant des plages de pages basées sur 1 pour le code applicatif
- Ajouté TPdf.SetFormFieldFlags / SetFormFieldFlagsAt et les assistants TPdfView correspondants afin que les applications puissent mettre à jour les flags des champs AcroForm via l’API publique, y compris la couverture des flags password et multi-select
- Renforcé la couverture ABI de liaison PDFium pour FPDF_DWORD de taille Windows, les callbacks FPDF_FILEACCESS et les champs de slot embedder V8
Version 1.6.9
- Ajouté des liaisons de rendu Skia de bas niveau pour les API FPDF_RenderPageSkia et FPDF_FFLDrawSkia nouvellement exportées dans les DLL PDFium standard et V8 livrées
- Étendu les vérifications de couverture des liaisons publiques afin que le chargement de DLL standard et V8 vérifie désormais les points d’entrée de rendu Skia aux côtés des sondes de capacités V8/XFA existantes
Version 1.6.8
- Ajouté TPdf.SetTextPositions et TPdfSingleArray pour définir les positions par caractère sur des objets texte existants via l’API FPDFText_SetPositions nouvellement exportée
- Promu FPDFText_SetPositions au rang de liaison requise pour les DLL PDFium actuellement livrées, tout en confirmant que les points d’entrée de rendu Skia restent indisponibles parce que les DLL ne les exportent toujours pas
- Étendu les suites de régression Delphi, C++Builder et Lazarus à 65 cas chacune avec la couverture des positions de texte
Version 1.6.7
- Ajouté un accès TPdf de haut niveau aux actions JavaScript de name-tree du document, renvoyant les noms d’actions et les scripts via JavaScriptAction et JavaScriptActions
- Ajouté TPdf.FileIdentifier pour lire les IDs de trailer permanents et changeants en tant que TBytes binaires sans le byte de terminaison de PDFium
- Ajouté TPdf.PageBox, GetPageBox et SetPageBox pour MediaBox, CropBox, BleedBox, TrimBox et ArtBox sur la page courante
- Confirmé que les DLL PDFium actuellement livrées ne laissent indisponibles à l’exécution que les points d’entrée de rendu Skia parce que ces exports ne sont pas présents
- Étendu les suites de régression Delphi, C++Builder et Lazarus à 64 cas chacune avec la couverture des actions JavaScript de document, de l’ID de trailer et des page-box
Version 1.6.6
- Ajouté la prise en charge à l’exécution de la DLL PDFium activée V8 livrée. Définir EnableV8Engine avant le chargement sélectionne désormais pdfium.v8.dll depuis l’arborescence DLLs\Win32 ou DLLs\Win64 et expose les liaisons réservées V8/XFA lorsque la DLL chargée les fournit
- Ajouté V8FeaturesAvailable, XfaBStrHelpersAvailable, GetRecommendedV8Flags et des liaisons optionnelles de bas niveau pour FPDF_BStr_*, FPDF_GetRecommendedV8Flags et FPDF_GetArrayBufferAllocatorSharedInstance
- Rendu FPDFText_SetPositions optionnel afin que PDFium Delphi Component continue de charger avec les DLL PDFium qui n’exportent pas ce setter de position de texte expérimental
- Étendu les suites de régression Delphi, C++Builder et Lazarus à 61 cas chacune avec la couverture des capacités DLL standard et DLL V8