Police de secours et texte vertical
HotPDF peut sélectionner des fontes de secours par script Unicode, signaler les points de code qui restent non résolus et écrire du texte CJK via un véritable mode d’écriture CID vertical
Chaînes de secours au niveau du document
THotPDF.SetFontFallbackChain stocke une liste ordonnée de fontes pour une catégorie THPDFFontScript
THPDFPage.TextOutWithFallback résout chaque scalaire Unicode par rapport à la fonte sélectionnée, à sa chaîne de script et à la chaîne commune, puis émet les scalaires adjacents partageant la même fonte comme une seule exécution de texte
- Les chaînes de secours sont des paramètres de document et restent disponibles au fil des pages
- Les noms de fontes en double ou vides sont supprimés tandis que l’ordre de l’appelant est préservé
- Le sondage des fontes installées rejette la substitution GDI silencieuse avant d’accepter la couverture
- Les scalaires du plan supplémentaire sont décodés à partir des paires de substitution UTF-16 avant la classification
- Chaque exécution de secours utilise le chemin de police Type0 embarquée, le sous-dimensionnement,
ToUnicodeet le chemin de police partagé inter-pages existant - La mise en page de secours vérifie les familles de polices installées avec la variante grasse et italique demandée, préserve tous les réglages de style, de jeu de caractères, de taille et de direction d’écriture au fil des exécutions, puis restaure la police de l’appelant
Diagnostics exploitables
AnalyzeUnresolvedGlyphs effectue un audit de couverture en lecture seule, tandis que TextOutWithFallback enregistre les scalaires non résolus rencontrés durant la sortie
Chaque THPDFUnresolvedGlyphInfo contient le point de code scalaire, la fonte principale, le script classé et une liste de suggestions de secours séparées par des points-virgules
GetUnresolvedGlyphs renvoie le rapport courant du document et ClearUnresolvedGlyphs entame un nouvel intervalle de rapport
Les surcharges à style explicite de THotPDF.ResolveFontForCodePoint et THotPDF.AnalyzeUnresolvedGlyphs acceptent TFontStyles, si bien que le preflight peut inspecter la même fonte que celle utilisée pour la sortie ; leurs surcharges d’origine continuent d’inspecter les variantes regular
Les zones de texte, le texte SVG embarqué et les apparences de texte chargées conservent les familles de polices stylées à travers la mise en page de secours, au lieu de traiter les noms de polices PDF internes comme des familles système ou de basculer chaque exécution vers une variante regular
Écriture CJK verticale
THPDFPage.TextOutVertical sélectionne la variante verticale de la fonte courante et émet une exécution de texte Identity-V plutôt que de positionner chaque caractère manuellement
- La police descendante CID contient les valeurs par défaut
/DW2et les entrées/W2spécifiques aux glyphes - Les tables OpenType
vheaetvmtxfournissent les avances verticales et les bearings latéraux supérieurs ; les origines TrueType sont déduites de la boîte englobante de chaqueglyf, tandis queVORGfournit les origines CFF par défaut faisant foi ainsi que les exceptions - Les polices sans tables verticales utilisent des valeurs par défaut configurables d’avancée de 1 000 unités et d’origine de 880 unités
- Avec
sfVerticalAlternates, la chaîne GSUB complète préservant les longueurs utilisevrt2lorsqu’elle est annoncée et retombe sinon survert, en conservant la script et la langue actives - Lorsqu’une police omet une substitution de ponctuation mais mappe les formes de présentation verticales Unicode, virgules, points, crochets, tirets, ellipses et ponctuations apparentées utilisent ces glyphes tandis que
ToUnicodepréserve le texte source - Les fonctionnalités
vert,vrt2et GPOS verticales existantes restent disponibles viaShapingFeatures GetVerticalTextAdvancerenvoie l’avancée en espace utilisateur nécessaire pour positionner la prochaine exécution verticale
Exemple
PDF.SetFontFallbackChain(hfsCJK,
['Microsoft YaHei UI', 'Yu Gothic UI', 'Malgun Gothic']);
PDF.SetFontFallbackChain(hfsEmoji, ['Segoe UI Emoji']);
PDF.CurrentPage.SetFont('Arial', [], 12);
PDF.CurrentPage.TextOutWithFallback(72, 72, 0, Text);
PDF.CurrentPage.SetFont('Yu Gothic UI', [], 14);
PDF.CurrentPage.TextOutVertical(420, 72, VerticalText);
Missing := PDF.GetUnresolvedGlyphs;