PHP 5.4.33 Released

ps_findfont

(PECL ps >= 1.1.0)

ps_findfontCharge une police

Description

int ps_findfont ( resource $psdoc , string $fontname , string $encoding [, bool $embed = false ] )

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.

Liste de paramètres

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).

Valeurs de retour

Retourne un identifiant de la police ou zéro en cas d'erreur. L'identifiant est un nombre positif.

Voir aussi

add a note add a note

User Contributed Notes 4 notes

up
1
zeldorblat at gmail dot com
9 years ago
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.
up
0
yarych at bigmir dot net
6 years ago
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.
up
0
pepe at dexef dot hu
8 years ago
I found out that you must copy the <fontname>.afm files next to your php because it's searched there in default.
up
-1
yarych at bigmir dot net
6 years ago
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.)
To Top