Prise en charge des filtres PDF

Vue d’ensemble

Les flux PDF et les images incorporées indiquent leur codage par des noms de filtre HotPDF travaille principalement avec les familles de filtres suivantes lors de la génération des documents ou du décodage de contenu externe

Filtres courants

  • FlateDecode: Principal filtre de compression pour les flux générés et chemin de décompression principal basé sur zlib
  • LZWDecode: Pris en charge pour les scénarios legacy et de compatibilité via HPDFLZW.pas
  • DCTDecode: Utilisé pour les données image JPEG standard gérées par les chemins de chargement d’images HotPDF
  • CCITTFaxDecode: Courant dans les TIFF monochromes et les données d’image de type fax
  • ASCIIHexDecode / ASCII85Decode / RunLengthDecode: Helpers d’encodage exposés dans HPDFTypes.pas (_ASCIIHexEncode, _ASCII85Encode, _RunLengthEncode) depuis HotPDF v2.4.0. Utiles pour envelopper du contenu binaire arbitraire pour les canaux 7 bits ou pour la prise en charge explicite du round-trip PDF 1.7 7.4
  • JBIG2Decode / JPXDecode : noms de filtres définis par PDF 1.7 7.4.7 / 7.4.9. HotPDF route les flux d’images JPXDecode et les fichiers JPEG 2000 via le décodeur JPEG2000 adossé à OpenJPEG, puis embarque le résultat avec la compression choisie par l’appelant. La sortie JBIG2 biveau et les chemins d’images JBIG2Decode chargés utilisent le pipeline natif encodeur/décodeur JBIG2, y compris les contrôles de dictionnaire de symboles, de segments globaux, de niveau avec perte et de filtrage des points noirs

Notes pratiques

  • Tous les filtres ne sont pas exposés par une unique API générique ; certains passent par des unités d’aide dédiées aux images ou aux flux
  • Pour le contenu PDF généré, THotPDF.Compression reste le réglage principal côté utilisateur
  • Lors du chargement de données externes, le filtre applicable dépend du format du fichier source et de la classe d’aide utilisée
  • Les PDF chiffrés combinent ces filtres avec le gestionnaire de sécurité ; voir CryptKeyLength pour les options prises en charge AES‑128 (V=4 R=4 / CFM=AESV2) et RC4 (V=1/V=2)
  • Les politiques de filtres de chiffrement réservées peuvent être sélectionnées indépendamment pour les chaînes, les flux normaux et les flux de fichiers embarqués via ConfigureCryptFilterDefaults. La sécurité par mot de passe accepte StdCF ou Identity, tandis que la sécurité à clé publique accepte DefaultCryptFilter ou Identity. SetStreamCryptFilter ajoute ou efface un filtre Crypt de tête explicite sans perturber un pipeline de décodage existant. Les dérogations par flux exigent un dictionnaire de chiffrement /V 4 ou plus récent
  • Les enveloppes de charge utile chiffrée gardent les flux de pages ordinaires visibles tout en protégeant les métadonnées et octets des fichiers embarqués via un filtre de chiffrement EFOpen, avec des API explicites d’inspection et de déverrouillage de documents chargées disponibles depuis HotPDF v2.715.0
  • Les flux de pièces jointes protégés par mot de passe utilisent /EFF et reçoivent un filtre Crypt explicite chaque fois que /EFF diffère de /StmF. Les filtres de flux explicites chiffrés à clé publique échouent de façon fermée parce qu’ils exigent une enveloppe de destinataire spécifique au flux
  • Les documents chargés exposent la politique d’origine /CF, /StrF, /StmF et /EFF, y compris les filtres nommés externes sensibles à la casse, les /CFM /None explicites ou omis, les événements d’authentification et la longueur de clé effective via THPDFCryptFilterInfo. Les longueurs de filtres V2 du gestionnaire standard se lisent en octets, celles des filtres V2 à clé publique en bits, et seules les clés V2 de 40 et 128 bits sont acceptées. Les conteneurs de flux d’objets en clair déchiffrent quand même les chaînes membres compactées via /StrF, tandis que les conteneurs chiffrés évitent un second déchiffrement de membre. Les mises à jour incrémentales retiennent la politique chargée. Disponible depuis HotPDF v2.675.0
  • Les champs de formulaire interactifs sont émis comme des annotations Widget que le lecteur peint ; voir Prise en charge AcroForm
  • Les annotations de balisage textuel (Highlight, Underline, Squiggly, StrikeOut) et les liens de saut intra-document (GoTo, GoToR, Launch) sont exposés comme nouvelles méthodes THPDFPage.Add*Annotation / AddGoToLink / AddGoToRLink / AddLaunchLink depuis HotPDF v2.6.0
  • La sortie DeviceCMYK est disponible via THPDFPage.SetCMYKColor / SetCMYKFillColor / SetCMYKStrokeColor ; les espaces colorimétriques gérés par ICC sont enregistrés avec THotPDF.RegisterICCProfile et appliqués via SetFillColorSpace / SetStrokeColorSpace + SetFillColor / SetStrokeColor depuis HotPDF v2.7.0
  • Définissez THotPDF.UseXRefStream sur true avant l’enregistrement pour émettre un seul flux de références croisées /Type /XRef compressé par FlateDecode au lieu de la séquence textuelle xref / trailer / startxref (PDF 1.7 7.5.8) ; disponible depuis HotPDF v2.8.0
  • Définissez THotPDF.EnableXMPMetadata sur true pour joindre au Catalog un flux XMP /Type /Metadata /Subtype /XML (PDF 1.7 14.3.2) ; il est construit automatiquement à partir des champs du dictionnaire Info, ou bien vous pouvez fournir un paquet rédigé à la main via CustomXMP Disponible depuis HotPDF v2.9.0
  • Verrouillage de version PDF par méthode (depuis HotPDF v2.24.0) Chaque méthode de fonctionnalité introduite à partir de v2.4.0+ consulte RequirePDFVersion avant l’émission ; avec StrictVersionLock=false (la valeur par défaut), la Version du document est relevée silencieusement au minimum requis par la fonctionnalité, et avec StrictVersionLock=true, l’appel est refusé afin que le fichier sauvegardé respecte strictement la spécification de référence 1.3 / 1.4 / 1.5 / 1.6 / 1.7 choisie
  • Encodeurs prédicteurs PNG et TIFF pour les données image compressées par FlateDecode (PDF 1.7 7.4.4.4) : _PNGPredictorEncode applique l’heuristique de filtre à différence absolue minimale de libpng (Predictor=15), _TIFFPredictor2Encode applique la différenciation horizontale (Predictor=2) Disponible depuis HotPDF v2.10.0
  • Points d’entrée Tagged PDF (PDF 1.7 14.7-14.8) : THotPDF.Lang renseigne /Lang dans le Catalog, EnableTaggedPDF émet /MarkInfo <</Marked true>> et un stub /StructTreeRoot, et les nouvelles méthodes THPDFPage.BeginMarkedContent / BeginMarkedContentMCID / EndMarkedContent écrivent les opérateurs de flux de contenu BMC / BDC / EMC Disponible depuis HotPDF v2.11.0
  • Dégradés axiaux et radiaux (PDF 1.7 7.10 / 8.7) : THotPDF.RegisterAxialGradient / RegisterRadialGradient construisent la pile complète Function Type 2 / Shading Type 2-3 / Pattern Type 2 et renvoient un nom de motif stable ; THPDFPage.SetFillPattern / SetStrokePattern l’installent sur la page. Le nombre de composants de la couleur de départ / d’arrivée sélectionne DeviceGray (1) / DeviceRGB (3) / DeviceCMYK (4). Disponible depuis HotPDF v2.13.0 ; les dégradés multi-arrêts Function Type 3 sont exposés via RegisterMultiStopAxialGradient depuis la v2.18.0 et RegisterMultiStopRadialGradient depuis la v2.686.0
  • Images inline (PDF 1.7 8.9.7) via THPDFPage.DrawInlineImage ; les octets bruts sont automatiquement enveloppés avec ASCIIHex lorsqu’aucun Filter n’est fourni, afin que le flux de contenu reste propre en 7 bits Disponible depuis HotPDF v2.18.0
  • OutputIntents (PDF 1.7 14.11) via THotPDF.AddOutputIntent ; chaque appel ajoute au Catalog un dictionnaire /Type /OutputIntent avec un /DestOutputProfile facultatif pointant vers un profil ICC enregistré Disponible depuis HotPDF v2.18.0
  • Génération automatique des flux d’apparence AcroForm (PDF 1.7 12.5.5 / 12.7.3.3 / 8.10) : réglez THotPDF.AutoFormAppearances sur true avant d’ajouter des champs de formulaire interactifs et HotPDF préconstruira un Form XObject /Subtype /Form pour l’entrée /AP /N de chaque widget (sous-dictionnaires Yes / Off pour les boutons), remplira les ressources par défaut /DR d’AcroForm avec des dictionnaires de police indirects Helvetica / ZapfDingbats et basculera /NeedAppearances à false afin que les moteurs de rendu honorent les flux incorporés Disponible depuis HotPDF v2.28.0
  • ViewerPreferences /ViewArea et /ViewClip (PDF 1.4 12.2 Table 152) sont maintenant exposés via les propriétés THotPDF.ViewArea / THotPDF.ViewClip (avec les membres d’ensemble correspondants vpViewArea / vpViewClip) Les deux acceptent les valeurs THPDFPageBoundary (MediaBox / CropBox / BleedBox / TrimBox / ArtBox) et complètent la couverture HotPDF des quatre préférences de limites de page PDF 1.4 Disponible depuis HotPDF v2.29.0
  • Transitions de page (PDF 1.1 / 1.5 12.4.4) : THPDFPage.SetPageTransition écrit un dictionnaire /Trans sur la page afin que les lecteurs PDF en /PageMode /FullScreen animent la navigation Les styles PDF 1.1 (Split, Blinds, Box, Wipe, Dissolve, Glitter, R) et les styles PDF 1.5 (Fly, Push, Cover, Uncover, Fade) sont exposés par l’énumération THPDFTransitionStyle ; les sous-options associées /Dm, /M et /Di sont également exposées THPDFPage.SetPageDuration écrit le délai d’avance automatique /Dur en secondes Disponible depuis HotPDF v2.30.0
  • Groupe de transparence au niveau de la page (PDF 1.4 11.6.6 / 7.5.5) : THPDFPage.SetTransparencyGroup attache un dictionnaire /Group (/Type /Group /S /Transparency) afin que les moteurs de rendu compositent de manière prévisible le contenu portant de l’alpha Choisissez un espace colorimétrique d’appareil via l’énumération THPDFGroupColorSpace (DeviceGray / DeviceRGB / DeviceCMYK ou omission), ou appelez THPDFPage.SetTransparencyGroupICC avec le nom d’un profil ICC préalablement enregistré via THotPDF.RegisterICCProfile Les drapeaux facultatifs /I (Isolated) et /K (Knockout) pilotent le compositeur ; THPDFPage.ClearTransparencyGroup supprime une entrée précédemment attachée Disponible depuis HotPDF v2.32.0
  • Mise à jour incrémentale (PDF 1.7 ISO 32000-1 7.5.6) : THotPDF.BeginIncrementalUpdate(SourceFile) charge un PDF existant en mode ajout seul ; les appels CreateIndirect* suivants marquent automatiquement les nouveaux objets comme modifiés, et THotPDF.MarkDirty(Obj) marque les objets chargés préexistants pour réémission THotPDF.SaveIncrementalUpdate(TargetFile) écrit les octets source d’origine tels quels, ajoute uniquement les objets modifiés en conservant leurs numéros d’objet, émet une nouvelle sous-section xref et se termine par un trailer contenant /Prev pointant vers la xref précédente Combinez cela avec le pipeline existant AddSignedSignatureField + PreparePDFForSigning + InsertSignatureHex pour ajouter des champs de signature ultérieurs à un document déjà signé sans invalider les signatures précédentes (leurs condensats /ByteRange restent valides car aucun octet d’origine ne change) Disponible depuis HotPDF v2.35.0
  • Normalisation du nom de police TrueType incorporée : HotPDF lit la table de noms TrueType incorporée et aligne /BaseFont, /FontDescriptor /FontName, /FontFamily et les noms de police CID descendants sur le nom PostScript du programme de police Cela évite les échecs Adobe Acrobat Font Capture causés par une discordance entre le dictionnaire de police PDF et la charge TTF incorporée Disponible depuis HotPDF v2.35.1
  • Sous-ensemble de police TrueType (PDF 1.7 ISO 32000-1 9.6.4 / 9.8.2) : réglez THotPDF.EnableFontSubsetting sur true avant BeginDoc et HotPDF reconstruira la charge TrueType incorporée pour ne contenir que les glyphes effectivement utilisés par le document Les documents latins typiques voient une réduction d’environ 90 % du poids de police incorporé (1 MB Arial -> environ 70 KB sur un "Hello, world." d’une seule ligne) Les dépendances de glyphes composites sont suivies récursivement, la numérotation GID est préservée (de sorte que les flux de contenu Type0 / Identity-H existants continuent de fonctionner) et le nouveau /BaseFont reçoit automatiquement le préfixe à six lettres suffixé par "+" exigé par la spécification (par exemple /BaseFont /AAAAAA+ArialMT) Désactivé par défaut ; activez-le explicitement pour conserver l’incorporation complète de la police dans les workflows d’édition Disponible depuis HotPDF v2.36.0
  • Sous-ensemble Compact Font Format (CFF) (PDF 1.7 ISO 32000-1 9.7.4 / 9.9) : compagnon du sous-ensemble TrueType pour les polices OpenType-CFF (.otf, sfntVersion OTTO) et Type 1 / Type 1C La fonction exportée par l’unité HPDFSubsetCFF(CFFBytes, KeepGlyph) reconstruit l’INDEX CharStrings en remplaçant les glyphes non conservés par le stub minimal endchar d’un octet, en préservant la numérotation GID octet par octet Disponible depuis HotPDF v2.37.0
  • Chemin d’embarquement OpenType-CFF (.otf) câblé dans StoreFont (PDF 1.6+ 9.7.4 Table 117). Lorsque le binaire de police chargé par GDI est un conteneur sfnt OTTO, HotPDF sous-ensemble la sous-table 'CFF ' embarquée via HPDFSubsetOTFContainer, émet le programme de police via /FontFile3 /Subtype /OpenType et écrit le dictionnaire de police descendante avec /Subtype /CIDFontType0 au lieu de /CIDFontType2. Les polices TrueType continuent via le chemin existant /FontFile2 + /CIDFontType2 sans changement de comportement. Disponible depuis HotPDF v2.38.0.
  • Sous-ensemblage des sous-routines CFF de bout en bout (PDF 1.7 9.7.4 §6 / Adobe Tech Note #5177 §3.1) : le subsetter CFF élimine désormais les entrées inutilisées à la fois du Global Subr INDEX (situé immédiatement après le String INDEX dans le binaire CFF) et du Local Subr INDEX (imbriqué sous le Private DICT, atteint via l’opérateur 18 du Top DICT + l’opérateur 19 du Private DICT). Une closure à point fixe unique suit de façon transitive les chaînes callsubr (op 0x0A) ET callgsubr (op 0x1D), si bien qu’un CharString qui appelle un Local Subr qui appelle un Global Subr qui appelle un autre Local Subr est capté en une itération. Chaque entrée inutilisée est remplacée par un stub return de 1 octet et l’INDEX est réécrit sur place avec le bourrage final rempli de zéros. Ce comportement est exposé via les helpers publics HPDFSubsetCFF et HPDFSubsetOTFContainer ; les scanners CFF de plus bas niveau restent internes. Disponible depuis HotPDF v2.39.0.
  • Sous-ensemblage du CFF à clé CID (PDF 1.7 ISO 32000-1 9.7.4 / Adobe Tech Note #5176 §18-19) : le subsetter CFF reconnaît désormais l’opérateur ROS du Top DICT (12-30) qui marque une police OpenType-CFF à clé CID et parcourt l’INDEX FDArray (12-36) des Font DICTs, chacun portant son propre Private DICT + Local Subr INDEX. La map glyph-vers-FD FDSelect (12-37) est préservée octet par octet. Le scan de closure des sous-routines suit le contexte FD de chaque CharString conservé afin qu’un glyphe du FD #5 ne marque les Local Subrs que du FD #5 - les subrs globaux restent partagés entre les FDs. Le Local Subr INDEX de chaque FD est réécrit sur place avec les entrées inutilisées réduites à des stubs return de 1 octet. Les polices OTF CJK / Indic / arabes (Adobe Fan/Gothic/Heiti/Ming/Myungjo/Song Std, Kozuka Pr6N, Source Han Sans, etc.) passent désormais par le pipeline complet de sous-ensemblage au lieu d’être embarquées telles quelles. Disponible depuis HotPDF v2.40.0.
  • Object Streams (PDF 1.5 ISO 32000-1 7.5.7) : définissez THotPDF.UseObjectStreams à true en plus de UseXRefStream et SaveToStream range les objets indirects éligibles (tout sauf les flux, le dictionnaire de chiffrement et les dictionnaires Catalogue et Info pointés par le trailer) dans un ou plusieurs flux conteneurs /Type /ObjStm. Le flux de références croisées référence ensuite les objets rangés via des entrées de type 2 (champ-2 = numéro d’objet ObjStm hôte ; champ-3 = index d’entrée dans le flux). Réduit sensiblement la taille des fichiers sur les PDF avec beaucoup de petits dictionnaires (documents multipages, annotations, widgets AcroForm, éléments d’arbres de structure, calques Optional Content) - un smoke graphique de 30 pages passe de 14502 à 8488 octets (41,5 % plus petit). Rétrograde silencieusement à false lorsque UseXRefStream est désactivé (les entrées de type 2 ne sont pas représentables dans la table xref textuelle selon la spécification) ou lorsque Version est inférieure à PDF 1.5. Disponible depuis HotPDF v2.41.0.
  • Image soft-mask / SMask (PDF 1.4 ISO 32000-1 8.9.5.4) : THotPDF.AddImageWithSMask(Width, Height, RGB, Alpha) émet un XObject image couleur plus un XObject image soft-mask DeviceGray 8 bits et câble automatiquement la référence croisée /SMask, de sorte que chaque pixel puisse porter une transparence complète par canal au lieu de la limite binaire activé/désactivé du chemin historique /ImageMask. La surcharge de commodité THotPDF.AddImageWithSMask32(Bitmap32) extrait les plans RGB et alpha d’une TBitmap BGRA 32 bits pour un embarquement PNG-avec-alpha en un seul appel. AddImageWithTransparency et AddImageWithTransparency32 exposent le même flux avec un nommage centré image. Les deux sites d’appel passent par RequirePDFVersion(pdf14) afin que la sortie stricte 1.3 reste conforme. Disponible depuis HotPDF v2.42.0
  • Helpers de commodité de masques d’images : AddImageAsMask émet une /ImageMask binaire, AddImageWithMask attache le masque résultant à une image couleur via /Mask, et tous deux renvoient des index d’images normaux pour THPDFPage.ShowImage
  • Contrôles de compression par image : AddImageWithJpegQuality applique une qualité JPEG en un seul appel sans changer JpegQuality, tandis que AddMonochromeImageAuto et icAutoMono choisissent Flate, CCITT Group 4 ou JBIG2 pour une entrée bitmap 1 bit
  • Peinture de Tiling Pattern non coloré (PDF 1.7 ISO 32000-1 8.6.6.1) : THotPDF.RegisterTilingPattern émet à la fois /PaintType 1 (coloré) et /PaintType 2 (non coloré) depuis la v2.19.0, mais la séquence d’opérateurs correspondante côté page n’était correcte que pour la variante colorée. Six nouvelles méthodes THPDFPage - SetFillPatternRGB / SetStrokePatternRGB / SetFillPatternGray / SetStrokePatternGray / SetFillPatternCMYK / SetStrokePatternCMYK - pilotent désormais le chemin non coloré en enregistrant automatiquement l’espace colorimétrique de tinting [/Pattern /BaseCS] correspondant dans le dictionnaire Resources/ColorSpace de la page et en émettant la séquence tint_components /Pn scn exigée par la spécification. Utilisez les SetFillPattern / SetStrokePattern d’origine pour la variante colorée où la tuile porte sa propre couleur. Disponible depuis HotPDF v2.43.0.
  • Le rendu complet des motifs de tiling applique désormais la matrice du motif relative au système de coordonnées par défaut du flux de contenu parent, implémente les trois règles de placement /TilingType, prend en charge les /XStep et /YStep négatifs, démarre chaque cellule avec un chemin isolé, applique le tint de base d’un motif non coloré aux opérations de remplissage et de trait, et retient une exécution de motifs imbriqués bornée. La surcharge étendue de RegisterTilingPattern et les propriétés THPDFTilingPatternBuilder.TilingType / Matrix exposent les mêmes contrôles validés pour les PDF générés. Disponible depuis HotPDF v2.542.0
  • Espace colorimétrique CIELab (PDF 1.3+ ISO 32000-1 8.6.5.3) : THotPDF.RegisterLabColorSpace(Xw, Yw, Zw, aMin, aMax, bMin, bMax) construit un tableau d’espaces colorimétriques en ligne [/Lab << /WhitePoint /BlackPoint /Range >>], le stocke sous un nom généré automatiquement (Lab1, Lab2, ...) et renvoie ce nom pour l’utiliser avec le pipeline habituel THPDFPage.SetFillColorSpace / SetStrokeColorSpace + SetFillColor([L, a, b]) / SetStrokeColor([L, a, b]). Choisissez un illuminant D50 [0.9505, 1.0, 1.089] pour les flux d’impression ICC ou un illuminant D65 [0.95047, 1.0, 1.08883] pour un affichage équivalent sRGB, puis peignez avec L* dans [0..100] et a*, b* dans la plage choisie (typiquement [-128..127]). Disponible depuis HotPDF v2.44.0.
  • Espace colorimétrique Separation pour les encres spot (PDF 1.3+ ISO 32000-1 8.6.6.4) : THotPDF.RegisterSeparation(ColorantName, AlternateCS, TintC1) déclare une encre spot à une composante dont l’unique opérande de tint dans [0..1] pilote une transformation de tint Function Type 2 linéaire construite en interne. Utilisez le nom renvoyé (Sep1, Sep2, ...) avec le pipeline habituel SetFillColorSpace / SetStrokeColorSpace + SetFillColor([tint]) / SetStrokeColor([tint]). AlternateCS accepte DeviceGray, DeviceRGB ou DeviceCMYK ; TintC1 fournit les composants de l’espace alternatif à tint = 1.0. Les noms d’encres Pantone et autres noms avec espaces sont acceptés directement - HotPDF les échappe en #20 selon PDF 1.7 7.3.5 lors de l’écriture du nom de l’espace colorimétrique. Disponible depuis HotPDF v2.45.0.
  • Flux d’apparences de texte AcroForm multi-lignes et comb (PDF 1.7 ISO 32000-1 12.7.4.3) : lorsque THotPDF.AutoFormAppearances est actif, les champs texte dont les Flags incluent ffMultiline reçoivent un Form XObject /AP /N avec retour à la ligne (Td + T* + mise en page /TL d’interlignage, honorant les séparateurs CR / LF / CRLF et tronquant au nombre de lignes visibles). Les champs dont les Flags incluent ffComb avec un MaxLen positif rendent chaque caractère dans sa propre cellule de largeur égale via une matrice Tm absolue par glyphe. La mise en page mono-ligne de la v2.28.0 est préservée octet par octet pour les champs sans ces flags. Les caractères internationaux de la valeur initiale retombent toujours sur le chemin de recomputation /NeedAppearances du lecteur - la génération complète d’apparences à police CID embarquée reste un travail à venir. Disponible depuis HotPDF v2.46.0.
  • Police Unicode /AP AcroForm (PDF 1.7 ISO 32000-1 12.7.2 + 12.7.4.3) : THotPDF.SetFormUnicodeFontDict(LogicalName, FontDict) enregistre une police composite Type 0 / CIDFontType2 + Identity-H fournie par l’appelant dans le dictionnaire de ressources par défaut /DR/Font de l’AcroForm. Une fois enregistrée, le /DA au niveau AcroForm, le /DA de chaque widget Tx et le flux /AP /N produit par AutoFormAppearances pour les valeurs initiales Tx non ASCII basculent tous vers le nom logique ; le sous-dictionnaire /Resources/Font du Form XObject référence aussi la même police indirecte afin que l’AP soit autoportant sans dépendre de la résolution de /DR au rendu. Le helper compagnon THotPDF.CreateIndirectFontDict renvoie un THPDFDictionaryObject vide frais enregistré comme objet PDF indirect afin que les appelants puissent construire des dictionnaires de polices personnalisés (ou tout autre dictionnaire exigeant une sérialisation indirecte « N G R ») sans toucher aux helpers internes. Transmettez un LogicalName vide et un FontDict nil pour revenir au comportement ASCII seul /Helv de la v2.46.0. Les champs Tx ASCII continuent d’utiliser /Helv avec une sortie identique octet par octet à la v2.46.0 / v2.55.0. Les /AP non ASCII multi-lignes + comb et le façonnage bidi RTL (UAX #9 + jonction contextuelle arabe) restent des travaux à venir. Disponible depuis HotPDF v2.56.0 ; le support des /AP non ASCII ffMultiline (Tj hex UTF-16BE par ligne avec Td / T* / interlignage /TL et retour à la ligne conscient du CJK) depuis la v2.57.0 ; le support des /AP non ASCII ffComb (cellules Tm absolues de largeur égale par CID + Tj à cellule unique par point de code avec gestion des paires de substitution UTF-16) depuis la v2.58.0 ; la propriété THotPDF.FormUnicodeRTL pour la direction de droite à gauche (inverse l’ordre UTF-16 dans les hex /AP Tj tout en gardant /V dans l’ordre logique ; l’appelant pré-façonne l’arabe vers les formes de présentation Unicode U+FB50..U+FDFF + U+FE70..U+FEFF ; façonnage complet UAX #9 + GSUB automatique en attente) depuis la v2.59.0.
  • Widget Tx de texte enrichi AcroForm (PDF 1.5+ ISO 32000-1 12.7.4.3 + Annexe L) : THPDFPage.AddRichTextField(FieldName, InitialValue, RichValue, DefaultStyle, Rectangle, [MaxLen], [Flags]) émet un widget texte avec /RV (corps XHTML de texte enrichi), /DS (style par défaut façon CSS), le flag ffRichText bit 26 de /Ff automatiquement ORé, plus le repli en texte simple /V + /DV utilisé par les lecteurs qui n’analysent pas /RV. Acrobat et Foxit rendent directement depuis /RV quand le bit RichText est actif, en profitant des replis de polices depuis les polices Unicode installées du lecteur - si bien que le contenu multi-octets (CJK / cyrillique / arabe / latin accentué) s’affiche correctement sans que HotPDF n’embarque une police CID dans les ressources /DR. /V et /RV détectent tous deux automatiquement les entrées multi-octets et basculent vers l’encodage hexadécimal UTF-16BE (BOM FE FF + points de code gros-boutiste) lorsque nécessaire. La génération de flux d’apparences à police CID pour le chemin /AP propre de HotPDF reste un travail à venir ; les lecteurs conscient du texte enrichi n’en ont pas besoin. Disponible depuis HotPDF v2.55.0.
  • Espace colorimétrique DeviceN pour les flux multi-colorants (PDF 1.3+ ISO 32000-1 8.6.6.5) : THotPDF.RegisterDeviceN(ColorantNames, AlternateCS, TintC1Matrix) généralise RegisterSeparation d’une encre spot unique vers N. La transformation de tint est une Function Type 4 à calculateur PostScript émettant un mélange pondéré linéaire sur la matrice N x M fournie (ligne n colonne m est la contribution du colorant n au canal m de AlternateCS lorsque le colorant n vaut seul 1.0). Renvoie un nom d’espace colorimétrique (DevN1, DevN2, ...) qui pilote le pipeline habituel SetFillColorSpace + SetFillColor([t0, t1, ..., t_{N-1}]). AlternateCS accepte DeviceGray, DeviceRGB ou DeviceCMYK ; les noms d’encres avec espaces sont échappés en #20 selon PDF 1.7 7.3.5 ; le nom spécial None marque un emplacement de colorant inutilisé. Disponible depuis HotPDF v2.47.0.
  • Maillage de triangles à shading Gouraud à forme libre (PDF 1.3+ ISO 32000-1 8.7.4.5.4) : THotPDF.RegisterFreeFormGouraudShading(XMin, YMin, XMax, YMax, NumComponents, Vertices) déclare un flux /ShadingType 4 avec /BitsPerCoordinate 16 + /BitsPerComponent 8 + /BitsPerFlag 8, l’enveloppe dans une entrée Pattern Type 2 en ligne du dictionnaire Resources/Pattern de la page et renvoie le nom de motif généré automatiquement (Sh1, Sh2, ...) pour le pipeline habituel SetFillPattern / SetStrokePattern. Chaque sommet est compacté en 1 octet de flag (toujours 0 pour les triangles indépendants) + 2 octets X gros-boutistes + 2 octets Y gros-boutistes + NumComponents composants de couleur 8 bits. L’argument NumComponents accepte 1 (DeviceGray), 3 (DeviceRGB) ou 4 (DeviceCMYK) ; chaque sommet contribue à 2 + NumComponents valeurs Extended dans Vertices dans l’ordre (X, Y, c1...cN) ; le nombre de sommets doit être un multiple de 3. /Decode reprojette les coordonnées 16 bits vers [XMin, XMax] x [YMin, YMax] et les composants de couleur vers [0, 1]. Les shadings en maillage Type 5 (lattice), Type 6 (Coons patch) et Type 7 (produit tensoriel) restent des travaux à venir. Disponible depuis HotPDF v2.48.0.
  • Maillage de triangles à shading Gouraud en lattice (PDF 1.3+ ISO 32000-1 8.7.4.5.5) : THotPDF.RegisterLatticeFormGouraudShading(XMin, YMin, XMax, YMax, NumComponents, VerticesPerRow, Vertices) déclare un flux /ShadingType 5 qui arrange les sommets en lattice de M lignes x N colonnes et laisse le renderer trianguler automatiquement chaque paire de lignes adjacentes en une bande de triangles. Contrairement à RegisterFreeFormGouraudShading (Type 4), il n’y a pas d’octet de flag par sommet ; /BitsPerFlag est absent du dictionnaire de shading et chaque sommet n’occupe que 4 + NumComponents octets (2 octets X gros-boutistes + 2 octets Y gros-boutistes + N composants de couleur). Le dictionnaire de shading porte à la place l’entrée exigée /VerticesPerRow N. Utilisez-le pour des données sources déjà sur une grille d’échantillonnage régulière (terrains, résultats d’éléments finis, cartes de chaleur scientifiques) - l’application fournit les sommets en ordre ligne-major et le pipeline de rendu assemble automatiquement la topologie de bande de triangles. VerticesPerRow doit valoir au moins 2 et le nombre total de sommets doit être un multiple de VerticesPerRow avec au moins deux lignes. Disponible depuis HotPDF v2.49.0.
  • Maillage de patchs Coons (PDF 1.3+ ISO 32000-1 8.7.4.5.6) : THotPDF.RegisterCoonsPatchMesh(XMin, YMin, XMax, YMax, NumComponents, Patches) déclare un flux /ShadingType 6 de patchs Coons, chacun borné par quatre courbes de Bézier cubiques et portant une couleur par coin. Le moteur ajuste la surface de Coons entre les quatre arêtes, ce qui produit un quadrilatère coloré à géométrie libre - utile pour les dégradés métalliques ou en feuille sur des tracés courbes, les maillages de dégradé issus de SVG et tout quadrilatère à arêtes courbes qui exigerait sinon de nombreux petits triangles pour être approximé. Chaque patch apporte 12 points de contrôle (24 valeurs Extended X+Y, ordonnées c1..c12 dans le sens horaire autour du contour avec c1 / c4 / c7 / c10 aux quatre coins et les 8 restantes comme poignées de Bézier internes) suivis de 4 couleurs de coin (4 * valeurs Extended NumComponents), de sorte que le pas de Patches est 24 + 4 * NumComponents. Le dictionnaire de shading conserve les mêmes /BitsPerCoordinate 16 + /BitsPerComponent 8 + /BitsPerFlag 8 que Type 4 (et, contrairement au Type 5, /VerticesPerRow est absent). Chaque patch émis porte flag = 0 (patch indépendant) ; les indicateurs de continuité 1 / 2 / 3 (partage d’arête) ne sont pas exposés dans cette surcharge pratique. Disponible depuis HotPDF v2.50.0
  • Espace colorimétrique Separation avec transformation tint LUT échantillonnée (PDF 1.3+ ISO 32000-1 8.6.6.4 + 7.10.2) : THotPDF.RegisterSeparationLUT(ColorantName, AlternateCS, Samples) s’appuie sur RegisterSampledFunction pour permettre aux appelants d’exprimer une courbe tint -> espace colorimétrique alternatif entièrement non linéaire sous forme d’un flux plat d’échantillons 8 bits (M-tuple), sans construire manuellement un dictionnaire Function Type 0. Utilisez la variante LUT lorsque la transition de couleur est non linéaire - rampes de tint de style PANTONE Hexachrome, courbes de densité corrigées par gamma, courbes de tonalité tracées à la main pour correspondre à une caractérisation de presse, LUT ICC de conversion sRGB vers spot sans toute la machinerie du profil ICC ; le point d’entrée RegisterSeparation de la v2.45.0 couvre toujours le cas linéaire à point d’extrémité unique. AlternateCS accepte DeviceGray, DeviceRGB ou DeviceCMYK ; la longueur de Samples doit être un multiple positif de M avec au moins 2 * M octets afin que la fonction dispose d’une plage interpolable, et le nombre de points de grille S est déduit de Length(Samples) / M. L’interpolation linéaire est la valeur par défaut selon PDF 1.7 /Order 1. Renvoie le nom d’espace colorimétrique enregistré (Sep1, Sep2, ...) à utiliser avec le pipeline habituel SetFillColorSpace + SetFillColor([tint]). Disponible depuis HotPDF v2.53.0
  • Enregistrement de Function Type 0 (Sampled) (PDF 1.3+ ISO 32000-1 7.10.2) : THotPDF.RegisterSampledFunction(Domain, Range, Size, BitsPerSample, Samples, [Order]) déclare un flux indirect /FunctionType 0 qui exprime un mappage arbitraire entrée vers sortie sous la forme d’une grille N dimensionnelle régulière d’échantillons de sortie M dimensionnels, interpolés entre les points de grille. Utilisez-le lorsqu’une machinerie de profil ICC serait excessive mais qu’une LUT couleur réglée à la main est souhaitée - courbes de tonalité pour /TransferFunction (ExtGState /TR), transformations tint échantillonnées pour /Separation / /DeviceN au-delà des chemins linéaires Type 2 / arithmétiques Type 4, courbes de seuil de demi-teinte ou tout autre objet PDF qui attend un dictionnaire Function. Domain comporte 2N entrées (une paire [min, max] par dimension d’entrée) ; Range comporte 2M entrées (une paire par dimension de sortie) ; Size contient N décomptes de points de grille ; BitsPerSample accepte 1, 2, 4, 8, 12, 16, 24 ou 32 selon la Table 38 de PDF 1.7 ; Samples est le flux brut d’échantillons empaquetés en bits (MSB en premier dans chaque échantillon, sans remplissage entre les échantillons au-delà du bourrage nul du dernier octet, avec l’entrée 0 qui varie le plus vite selon les règles d’ordre des échantillons de la spec) ; Order vaut 1 par défaut (linéaire) et accepte 3 (interpolation par spline cubique, depuis la v2.54.0) selon la Table 38 de PDF 1.7. HotPDF valide le nombre d’octets d’échantillons par rapport à ceil(GridPoints * M * BitsPerSample / 8). Renvoie le THPDFStreamObject indirect afin que les appelants puissent l’attacher partout où un dictionnaire Function est attendu. Disponible depuis HotPDF v2.52.0 ; /Order 3 cubique + couverture bout en bout multi-entrée / multi-sortie depuis la v2.54.0
  • Maillage de patchs à produit tensoriel (PDF 1.3+ ISO 32000-1 8.7.4.5.7) : THotPDF.RegisterTensorProductPatchMesh(XMin, YMin, XMax, YMax, NumComponents, Patches) déclare un flux /ShadingType 7 de patchs à produit tensoriel, chacun défini par une grille complète 4 x 4 de points de contrôle de Bézier bicubiques p[i][j] plus une couleur par coin. Étend RegisterCoonsPatchMesh (Type 6) en ajoutant 4 points de contrôle internes explicites (p[1][1], p[1][2], p[2][2], p[2][1]) aux 12 points de bord, ce qui donne un contrôle plus fin de l’intérieur du patch que l’ajustement lissé par Coons ne peut l’exprimer. Utile pour les allers-retours de dégradés maillés SVG et tout dessin qui nécessite une surface de Bézier à produit tensoriel. Chaque patch apporte 16 points de contrôle (32 valeurs Extended X+Y, ordonnées selon l’ordre de flux du tableau 88 de la spec : p[0][0..3], p[1][3], p[2][3], p[3][3], p[3][2..0], p[2][0], p[1][0], puis les 4 points internes p[1][1], p[1][2], p[2][2], p[2][1]) suivis de 4 couleurs de coin (4 * valeurs Extended NumComponents aux positions p[0][0] / p[0][3] / p[3][3] / p[3][0]), de sorte que le pas de Patches soit 32 + 4 * NumComponents. Chaque patch émis porte flag = 0 (patch indépendant). Avec cette version, toute la famille de maillages de shading ISO 32000-1 8.7.4.5 (Types 4 / 5 / 6 / 7) est désormais couverte. Disponible depuis HotPDF v2.51.0
  • Style de bordure d’annotation et liaison Popup (PDF 1.7 12.5.4 / 12.5.6.14) : THPDFPage.SetAnnotationBorderStyle(Annot, Width, Style, DashPattern) attache un dictionnaire /BS avec le THPDFAnnotBorderStyle choisi (absSolid / absDashed / absBeveled / absInset / absUnderline). THPDFPage.AddPopupAnnotationFor(ParentAnnot, Rect, Open) émet une annotation /Popup raccordée dans les deux sens (parent /Popup -> popup, popup /Parent -> parent) pour que la visionneuse puisse dessiner le connecteur de bulle. La nouvelle propriété THPDFPage.LastAnnotation alimente l’un ou l’autre helper sans modifier la signature des procédures Add*Annotation existantes. Disponible depuis HotPDF v2.34.0
  • Gestionnaire de sécurité à clé publique (PDF 1.7 7.6.5) : THotPDF.EnablePubKeyEncryption(seed, KeyType, EncryptMetadata) + THotPDF.AddPubKeyRecipient(envelope) émettent un dictionnaire de chiffrement /Filter /Adobe.PubSec (/SubFilter /adbe.pkcs7.s4 pour V=1 RC4-40 / /adbe.pkcs7.s5 pour V=2 RC4-128 / V=4 AESV2). L’appelant fournit le seed aléatoire de 20 octets et un blob binaire PKCS#7 envelopedData par destinataire (construit en externe avec Windows CryptoAPI, OpenSSL ou pycryptodome). HotPDF dérive la clé de chiffrement du fichier via l’algorithme 9 (SHA-1 du seed concaténé avec chaque enveloppe) et réutilise la dérivation standard de clé par objet pour les flux AES-128 / RC4. Disponible depuis HotPDF v2.33.0
  • Le rendu des pages chargées décode les types de shading 4 à 7 avec toutes les largeurs standard de coordonnées, composants et bits de flags, les enregistrements alignés sur octets, les flags de continuation de triangles Type 4 et de patches Type 6 / 7, les tableaux Function optionnels, la conversion ColorSpace déclarée, la gestion de BBox et Background, l’élimination par clipping, les remplissages Gouraud groupés et la tessellation adaptative bornée Coons et tensor-product. Disponible depuis HotPDF v2.488.0

Voir aussi