Je développe un service Web qui rend les caractères utilisant l'extension PHP GD, à l'aide d'une police TTF sélectionnée par l'utilisateur. P>
Cela fonctionne bien en ASCII-Terre, mais il y a quelques problèmes: p>
La chaîne à rendu est rendue dans UTF-8. J'aimerais limiter la liste des polices sélectionnables par l'utilisateur pour être uniquement celles qui peuvent rendre la chaîne correctement, car certaines polices n'ont que des glyphes uniquement pour les caractères ASCII, ISO 8601, etc. P> LI>
Dans le cas où certains caractères décoratifs sont inclus, il serait bon de rendre la majorité des caractères de la police sélectionnée et de rendre les caractères décoratifs dans Arial (ou quelle que soit la police contenant les glyphes prolongés). P > li> ol>
Il ne semble pas que PHP-GD ait le support pour interroger suffisamment les métadonnées de police pour déterminer si un caractère peut être rendu dans une police donnée. Quel est un bon moyen d'obtenir des mesures de police en PHP? Existe-t-il une utilitaire de ligne de commande capable de déménager dans XML ou un autre format analysable? P>
4 Réponses :
PHP-CAIRO construit contre le pango et FontConfig doit avoir suffisamment de cerveaux pour Faire la substitution de la police le cas échéant. P>
Vous pouvez essayer d'utiliser pdf_info_font () à partir d'une extension PDffib. Un bon exemple est là: http: //www.pdflib.com/pdflib-cookbook/font/font-metrics-info/php-font-metrics-info/ p>
Si vous n'avez pas de police Unicode, vous devrez essayer quelque chose comme pris de si le mélange et Les caractères UTF-8 sont égaux, puis vous pouvez l'utiliser. Sinon, alors vous ne pouvez pas. P> p>
J'ai fini par utiliser utilitaire TTX pour dépenser des métriques de police. Je pourrais ensuite inspecter les fichiers .TTX résultants et regarder la carte de caractère-> glyphe. Je l'ai fait manuellement, mais l'analyse automatique des fichiers XML est possible.
Un exemple GNU Makefile qui génère les fichiers .ttx à partir d'un ensemble de polices TrueType dans le même répertoire: P>
all: fontmetrics fontmetrics: $(patsubst %.ttf,%.ttx,$(wildcard *.ttf)) .PHONY: fontmetrics clean: rm -f *.ttx %.ttx: %.ttf ttx -t cmap $<
Il suffit de vous procurer une police unicode.