I've found out that pslib is searching for fonts in its data dir (/usr/share/pslib). There is no way to change the search path now.
(PECL ps >= 1.1.0)
ps_findfont — Charge une police
ps_findfont() charge une police pour utilisation ultérieure. Avant que le texte soit écrit avec la police chargée, il doit être fixé avec ps_setfont(). Cette fonction doit avoir le fichier de police métrique "adobe" afin de calculer l'espace utilisé par les caractères. Une police qui est chargée dans une page sera seulement disponible sur cette page. Les polices qui seront utilisées dans le document complet doivent être chargées avant le premier appel de ps_begin_page(). L'appel de ps_findfont() entre les pages rendra cette police disponible pour toutes les pages qui suivent.
Le nom du fichier afm doit être
fontname
.afm
. Si la police doit
être incorporée, le fichier
fontname
.pfb
contenant le dessin
de la police doit être présent aussi.
L'appel de ps_findfont() avant la première page requiert l'affichage de l'en-tête du postscript qui inclut le BoundingBox pour le document entier. Normalement, le BoundingBox est fixé avec le premier appel de ps_begin_page() qui vient maintenant après ps_findfont(). En conséquence, le BoundingBox n'a pas été fixée et une erreur sera lancée lorsque ps_findfont() sera appelée. Afin de prévenir cette situation, vous devriez appeler la fonction ps_set_parameter() pour fixer le BoundingBox avant que ps_findfont() soit appelée.
psdoc
Identifiant d'un fichier postscript retourné par ps_new().
fontname
Le nom de la police.
encoding
ps_findfont() essaiera de charger le fichier passé
dans le paramètre encoding
. Les fichiers
d'encodage sont de même syntaxe que ceux utilisés par
dvips(1). Ils contiennent un vecteur de police
d'encodage (qui n'est actuellement pas utilisé, mais qui doit être
présent) et une liste de ligatures en extra pour prolonger la liste des
ligatures dérivées du fichier AFM.
encoding
peut être null
ou une chaîne de caractères vide
si l'encodage par défaut (TeXBase1) désire être utilisé.
Si l'encodage est fixé à builtin
alors il n'y aura
pas d'encodage à nouveau et l'encodage spécifique de police sera
utilisé. Cela est très utile pour les polices avec symboles.
embed
Si fixé à une valeur >0, la police sera incorporée dans le document. Ceci requiert la présence du fichier dessin (.pfb).
Retourne un identifiant de la police ou zéro en cas d'erreur. L'identifiant est un nombre positif.
I've found out that pslib is searching for fonts in its data dir (/usr/share/pslib). There is no way to change the search path now.
Ok, now I found the way to set the path I need for fonts - before calling ps_findfont() make a call like this:
<?php ps_set_parameter($psdoc, 'SearchPath', $fonts_dir); ?>
It works for pslib 0.4.1 version. (Looks like it didn't work in some earlier versions.)
I found that my Postscript files were taking an incredibly long time to generate and the file sizes were abnormally large. The problem was that, everytime I chose to set a font I would call ps_findfont() followed by ps_setfont().
It seems that every time ps_findfont() is called, the font gets embedded in the file. To prevent this, I keep an array of fonts I've already loaded, keyed by the font name. When I go to set the font, I first check this array to see if I've already loaded the font, and, if so, return the resource handle from that array. Otherwise, I call ps_findfont() and store the handle in the array.
Note that, if your call to ps_findfont() occurs while inside a page, the font will not be available on other pages. To get around this I just clear out the array at the end of each page.
My PS file went from 10 M to 75 K, and the time to create the file went from around 15 seconds to less than 1 second.
I found out that you must copy the <fontname>.afm files next to your php because it's searched there in default.