Installer des polices

De Lea Linux
(Redirigé depuis Xwindow-ttf)
Aller à la navigation Aller à la recherche

Installation de polices pour X, GhostScript et StarOffice

[[Catégorie:{{{1}}} Documentations obsolètes]]

Cette documentation est considérée comme étant obsolète.

Cela signifie que la documentation sur cette page est dépassée. Léa-Linux vous incite à ne pas suivre cette documentation dans votre utilisation d'une distribution récente. Cette documentation est conservée uniquement dans un souci de curiosité et d'archive documentaire, mais au moins une partie des informations qui la compose n'est plus valide.

Trouvez des articles plus à jour dans la rubrique [[{{{1}}}]].

par Fred

Vous avez plein de polices vectorielles TrueType ou Adobe Type1, mais vous ne savez pas comment faire en sorte que X, Ghostscript et StarOffice les utilisent. Ce document est fait pour vous. Il contient l'état actuel de mes recherches sur la question.


Le cas de votre serveur X.

La problématique est la suivante : vous disposer de 3 polices vectorielles : police1.pfa (Adobe Type 1 ascii), police2.pfb (Adobe Type 1 binaire) et police3.ttf (TrueType) et vous souhaitez que X puisse afficher ces polices. Nous supposerons dans la suite que les deux polices type1 sont dans /usr/share/fonts/type1 et la police TrueType est dans /usr/share/fonts/ttf.

Sur Fedora Core 5, ces répertoires sont sur /usr/share/X11/fonts/Type1 et /usr/share/X11/fonts/TTF


Les fichiers fonts.dir et fonts.scale.

Chaque répertoire contenant des polices doit contenir un fichiers fonts.dir qui permet au serveur de polices de faire le lien entre le fichier de polices et le nom xfld (le nom X window). Pour les répertoires contenant des polices Adobe Type 1 il  faut aussi un fichier fonts.scale qui est semblable à fonts.dir (son rôle est de donner les différentes tailles de la police). Ces fichiers commencent par un nombre qui est le nombre des polices décrites par ce fichier. Ce nombre est suivi de lignes du type :

comic.ttf -microsoft-Comic Sans MS-medium-r-normal--0-0-0-0-p-0-fcd8859-15

Le premier champ est le nom de fichier contenant la police, le second champ est le nom xfld de cette police sous X. On peut si l'on veut modifier les deux premiers champs du nom xfld pour y mettre ce que l'on veut (vous pouvez par exemple remplacer microsoft par linux si ça vous amuse).

A la vue d'une telle ligne on ne peut qu'être effrayé : "Je vais devoir écrire des lignes aussi farfelues ?". Bien sûr que non. Il existe deux utilitaires qui vont faire ce travail pour nous en extrayant les données qui conviennent directement depuis le fichier de police.

Pour les polices TrueType l'utilitaire s'appelle : ttmkfdir. L'utilisation est relativement simple, puisqu'il suffit de se placer dans le répertoire contenant les polices et de taper :

ttmkfdir > fonts.dir

et d'ignorer les messages d'erreurs qui signalent que quelques fonts ne sont peut-être pas reconnues par l'utilitaire.

Pour les polices Adobe Type 1 l'utilitaire s'appelle type1inst . Son utilisation n'est pas plus complexe : on se place dans le répertoires contenant les polices et on tape :

type1inst

et on ignore là aussi les messages d'erreur. Dans les deux cas on a à la fin de l'opération un fichier fonts.dir et dans le cas des polices Adobe Type 1, le fichier fonts.scale est aussi généré. Dans les cas des polices Type1, type1inst génère en plus Fontmap qui contient ce qu'il faut inclure au fichier correspondant de Ghostscript pour que GS (le petit nom de Ghostscript) puisse imprimer ces polices. Nous verrons plus loin que ce fichier ne nous servira pas tel quel : on peut l'effacer sans autre forme de procès.

A partir de maintenant nous savons comment configurer nos répertoires contenant des polices vectorielles.

Vous utilisez un serveur de polices (XFree 3.3.x).

Et vous avez bien raison, cela permet d'utiliser la même configuration pour toutes vos machines. L'objet de ce document n'étant pas de présenter cet aspect des choses, je ne m'attarderai donc pas sur ce point.
Il existe plusieurs serveurs de polices qui font l'affaire, je ne parlerais que de xfs le serveur de polices de X auquel on a appliqué les différents patchs nécessaires à la gestion des polices TrueType (c'est le cas de la version de xfs livré avec la Mandrake 6.1 et plus) Dans tous les cas, la procédure serait similaire. Je n'expliquerai pas comment l'installer (il est installé par défaut avec les distributions récentes).

Le fichier de configuration de xfs est /etc/X11/fs/config (sur la Mandrake, si ce n'est pas votre cas faites man xfs pour en avoir le coeur net). Il n'est pas nécessaire d'éditer soi-même ce fichier, chkfontpath fait très bien ce travail en vérifiant en plus que les paramètres que l'on lui passe ne sont pas stupides, ce qui nous évite d'avoir un plantage pénible de X parce qu'on a mal écrit un nom de répertoire.

Pour permettre à notre serveur de polices d'afficher celles que nous venons fraîchement d'installer, il nous faut dire au serveur de police que de nouveaux répertoires contenant des polices sont présents sur notre système. Pour cela nous tapons :

chkfontpath --add /usr/share/fonts/type1
chkfontpath --add /usr/share/fonts/ttf
/etc/rc.d/init.d/xfs restart

La dernière ligne demande au serveur de police de recharger sa configuration. Le deux première ligne sont suffisamment claires. Pour vérifier que nos polices sont effectivement disponibles il suffit de faire :

xlsfonts | less

et de regarder la sortie à la recherche des polices que nous venons d'installer. Les noms affichés sont ceux reconnus par X et pas ceux que l'on aimerait trouver.

Vous n'utilisez pas de serveur de polices.

Pourquoi ne pas utiliser un serveur de polices ? Il suffit de récupère le rpm sur rufus.w3.org !


Le cas de ghostscript (5.10).

Là, c'est enfantin : il suffit de savoir où est installé le fichier Fontmap de ghostscript (rpm -ql ghostscript | grep Fontmap devrait fournir une réponse exploitable). Supposons que ce fichier soit dans /usr/share/ghostscript/5.10/Fontmap. On édite ce fichier et on ajoute les lignes :

/nom-de-police1 (/usr/share/fonts/type1/police1.pfa) ;
/nom-de-police2 (/usr/share/fonts/type1/police2.pfb) ;
/nom-de-police3 (/usr/share/fonts/ttf/police3.ttf) ;

Rien de bien compliqué ! La seule chose importante, c'est que je crois qu'il faut que les nom doivent être sans aucun espace ! Puis dans n'importe quel fichier Postscript il suffira de préciser /nom-de-police1 pour utiliser la police1. évidemment, c'est bien joli, mais qui a déjà écrit un fichier Postscript avec ses petites mains ? Donc, passons à StarOffice qui va générer nos fichiers Postscript.

Pour GS, j'ai rencontré des problèmes avec quelques polices : mais elles sont très rares.


Le cas de StarOffice (5.1a).

Pour ce qui est de l'affichage, toutes les applications de StarOffice (sauf StarWriter) doivent déjà être capable de fonctionner avec nos nouvelles polices. Pour l'impression et StarWriter : c'est une autre paires de manches.

La configuration de StarOffice peut être un véritable cauchemar, en effet ni StarDivision, ni Sun n'ont jamais été très clairs concernant ce point particulier. De plus dans les listes de diffusions, je n'ai pas trouvé beaucoup de chose expliquant tout.
La configuration de StarOffice passe par plusieurs fichiers de configuration (dont un fichier particulier puisque c'est un répertoire !). Le format de fichiers de StarOffice est propriétaire (ouh les vilains!), mais heureusement pour nous pas le format des fichiers de configuration qui nous intéresse.

Réglons d'un coup le cas de StarWriter : quand le problème d'impression aura été réglé il n'en subsistera plus aucun, car StarWriter ne propose que les polices imprimables !

Le fichier SGENPRT.PS.

Donc, il nous suffit de faire en sorte que StarOffice (= SO) soit capable d'imprimer nos polices. Je ne décrirai ici que le cas du conducteur de périphérique (driver) Generic Printer en liaison avec Ghostscript. Il est certain que beaucoup de choses s'appliquent au cas des imprimantes Postscript, mais je ne sais pas lesquels : offrez moi une imprimante Postscript et j'essaierai de trouver ;).

Pour imprimer, il faut que le conducteur de périphérique soit au fait de nos nouvelles polices. Le fichier conduisant ghostscript est : $SOPATH/xp3/ppds/SGENPRT.PS (ou $SOPATH est le nom du répertoire contenant votre installation de SO, le répertoire principal, pas le répertoire utilisateur).

Il suffit d'ajouter à ce fichier,  les lignes suivantes :

 *Font nom-de-police1: Standard "(001.000)" Standard ROM
 *Font nom-de-police2: Standard "(001.000)" Standard ROM
 *Font nom-de-police1: Standard "(001.000)" Standard ROM

Attention : nom-de-police1 DOIT être exactement le même nom que pour ghostscript !
Je ne sais pas à quoi correspond exactement le 001.000 mais il semblerait vu l'analyse que j'ai faite des fichiers *.afm dont nous verrons plus loin l'intérêt, il semblerait que ce soit une taille de polices standard (à voir...).

Bon, maintenant le conducteur d'imprimante de SO sait que l'imprimante sait imprimer ces polices, mais SO ne sait pas quel est le rapport entre ces polices d'imprimante et les polices écran.

Le fichier psstd.fonts.

Faire le lien entre polices écran et polices d'imprimante c'est le rôle du fichier $SOPATH/xp3/psstd.fonts. Cela ne pose pas de problème particulier, il suffit d'ajouter à ce fichier des lignes du type :

 EUNormal, -monotype-EU Normal-medium-r-normal--%d-%d-%d-%d-p-0-iso8859-1

Même si elles paraissent complexe, il n'est pas très compliqué de les deviner, mais c'est pas agréable à faire : il faut, pour chaque police, aller chercher dans le fichier fonts.dir correspondant la ligne décrivant la police X, on note le nom xfld. Puis on ajoute la ligne :

 nom-de-police1, nom-xfld

nom-xfld est le nom de police X où l'on a remplacé les champs  7, 8, 9 et 10 par %d,  pour permettre à SO de choisir la taille des dites polices (quand je dit "pour", je veux dire qu'il est obligatoire que 4 champs du nom xfld soit des %d !).

NDJCC : tiens, ils auraient pas programmé SO en C ou C++ ? ;-)

Eh bien, on n'est pas sorti de l'auberge, quand il va s'agir d'ajouter 250 polices ! (patience, patience ...)

Le répertoire fontmetrics/afm

Normalement, là on croit que l'on a tout pour être heureux ! Eh bien non ! Là, SO ne sait toujours pas afficher correctement ces polices ! Il lui faut un fichier par police décrivant la métrique de la police : un fichier .afm.

Pour avoir ces .afm, on a deux possibilités :

  • soit on les a eu avec la police (c'est souvent le cas des polices Type 1).
  • soit on les crée grâce à une série de scripts et d'utilitaires que le monde libre nous a fourni (merci le monde libre :).

Pour les créer il faut utiliser :

  • type1afm (du paquetage t1lib sur la mandrake) pour les polices Type 1.
  • ttf2afm (du paquetage ttfutils) pour les polices TrueType.

Il faut se placer dans le répertoire contenant le type de polices concernées et taper :

 type1afm *.pf[ab]
 ou :
 ttf2afm *.ttf

Le problème est que ces fichiers ne sont pas compatibles avec SO ! Il faut les convertir ! C'est le rôle du script afm.pl auquel on passe tour à tour chaque fichier .afm. Ce scripte crée, pour chaque police : un fichier .afm.new. On s'empresse alors d'effacer le fichier  .afm et de renommer le .afm.new en .afm. :

 for i in *.afm ; do afm.pl $i ; done
 rm -f *.afm.new
 for i in *.afm.new ; do mv $i `echo $i | sed "s/\.new//"` ; done

Il faut maintenant que SO sache où trouver ces .afm, et ceux-ci doivent impérativement être dans le répertoire $SOPATH/xp3/fontmetrics/afm, et leur nom doivent être celui de la police ghostscript concernée ! C'est un régal de faire ça à la main !

Maintenant, SO est capable d'afficher la liste des polices, d'afficher les sus-dites polices et même de les imprimer.


Comment automatiser tout cela.

évidemment, on ne va pas se taper tout cela à la main. C'est pour cela que j'ai écrit deux scripts (pour l'instant leur configuration se fait à la main en éditant chacun des scripts, c'est pénible mais je pense que c'est assez clair...)

Ajout de polices

Ce script a pour but de gérer l'installation des polices qui lui sont passées par la ligne de commande. Comme je ne voulais pas que le script pose de question (pour autoriser le D&D (drag and drop) depuis KDE ou Gnome), il m'a fallu faire des choix dans la configuration. addfont.pl installe les polices TrueType dans /usr/share/fonts/addfont/ttf et les polices Type 1 dans /usr/share/fonts/addfont/type1. En contrepartie, la syntaxe est des plus simple :

addfont.pl --add path1/font1 ... pathn/fontn

addfont.pl -a path1/font1 ... pathn/fontn

Attention : la présence d'un répertoire est obligatoire pour chaque polices (c'est un bug. FIXED)
Attention : lors de l'installation, le script ne copie pas réellement les polices dans les répertoires précités, il n'y met que des liens, donc, vous ne devez pas supprimer la police après l'avoir installée.

On peut (c'est conseillé) utiliser les jokers (* et ?). Parfois le script vous renverra un message d'erreur, c'est signe qu'un fichier .afm n'a pas pu être converti : la police ne contenait pas assez d'information pour effectuer cette conversion.

Il y a un bug invisible : quand addfont.pl ne trouve pas un exécutable, ou quand il n'arrive pas à effacer un fichier, il ne retourne aucun message d'erreur, cela peut être très pénible, alors prudence.

Suppression de polices

Il faut passer exactement les mêmes noms  (les jokers sont autorisés)

addfont.pl --rem path1/font1 ... pathn/fontn

addfont.pl -r path1/font1 ... pathn/fontn

Ces polices seront supprimées des répertoires /usr/share/fonts/* ainsi que des fichiers de configuration de GS et SO.

Il subsiste quand même quelques problème, certaine police on des noms (xfld) du type :

-Galopagos Design, Inc-Matisse-*-*-*-*-*-*-*-*-*-*-*-*

et cela peut perturber StarOffice à cause de l'espace dans le nom, il faudrait éditer le fichier fonts.dir correspondant et modifier cela (encore que je n'ai pas essayé). Un conseil, essayez vos polices et enlevez celles qui ne s'impriment pas. (Sur 300 polices - 150 ttf et 150 pfb - j'en ai une quinzaine qui ne fonctionnent pas correctement, et ce sont à chaque fois des polices très peu utiles) On ne peut jamais être sur que ce n'est pas la police qui est buggée.

Où trouver les utilitaires

Vous devez vous procurer les utilitaires suivants si vous voulez configurer vos polices :

  • ttf2pt1, pour convertir des polices TrueType en police Type 1 : la home page, la page de Sergey Babkin qui contient ses derniers patchs expérimentaux.
  • ttfutils, une série de scripts utilisant les utilitaires précédents (nécessaire pour addfont.pl et remfont.pl) : la home page, la même ailleurs
  • [afm afm.pl], pour rendre les .afm compatible avec SO (si quelqu'un sait où trouver ce script - écrit par Thomas Bartschies - je lui serais reconnaissant de me contacter pour que je puisse rendre à Thomas ce qui est à lui.
  • [addfont addfont.pl], pour installer des polices.

Tous ces utilitaires sont bien sûr libres.


Conclusion

La gestions des polices de caractères reste un des points faibles de Linux, j'espère avoir contribué à la rendre plus simple, et que tout ceci vous aidera à imprimer tout plein de jolies polices sous Linux.


Autres ressources

Les scripts :

  •  [afm afm.pl]
  •  [addfont addfont.pl]

Les liens :




@ Retour à la rubrique Environnement graphique

Cette page est issue de la documentation 'pré-wiki' de Léa a été convertie avec HTML::WikiConverter. Elle fut créée par Frédéric Bonnaud le 10/03/2000.

Copyright

© Frédéric Bonnaud 10/03/2000

Creative Commons License
Creative Commons Attribution iconCreative Commons Share Alike icon
Ce document est publié sous licence Creative Commons
Attribution, Partage à l'identique 4.0 :
https://creativecommons.org/licenses/by-sa/4.0/