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 — Carga una fuente
ps_findfont() carga una fuente para su uso posterior. Antes de que el texto sea escrito con la fuente cargada, debe ser fijada con ps_setfont(). Esta función debe tener el archivo de métricas de la fuente "adobe" para calcular el espacio utilizado por los caracteres. Una fuente que se carga en una página solo estará disponible en esa página. Las fuentes que se utilizarán en todo el documento deben ser cargadas antes de la primera llamada a ps_begin_page(). La llamada a ps_findfont() entre páginas hará que esta fuente esté disponible para todas las páginas siguientes.
El nombre del archivo afm debe ser
fontname
.afm
. Si la fuente debe
ser incorporada, el archivo
fontname
.pfb
que contiene el dibujo
de la fuente también debe estar presente.
La llamada a ps_findfont() antes de la primera página requiere mostrar el encabezado del postscript que incluye el BoundingBox para el documento completo. Normalmente, el BoundingBox se fija con la primera llamada a ps_begin_page() que ahora viene después de ps_findfont(). En consecuencia, el BoundingBox no ha sido fijado y se lanzará un error cuando ps_findfont() sea llamada. Para prever esta situación, debe llamarse a la función ps_set_parameter() para fijar el BoundingBox antes de que ps_findfont() sea llamada.
psdoc
Identificador de un archivo postscript devuelto por ps_new().
fontname
El nombre de la fuente.
encoding
ps_findfont() intentará cargar el archivo pasado
en el argumento encoding
. Los archivos de
codificación tienen la misma sintaxis que los utilizados por
dvips(1). Contienen un vector de codificación de
fuente (que actualmente no se utiliza, pero que debe estar presente) y
una lista de ligaduras adicionales para extender la lista de ligaduras
derivadas del archivo AFM.
encoding
puede ser null
o una string vacía
si se desea utilizar la codificación por omisión (TeXBase1).
Si la codificación se establece en builtin
entonces
no habrá codificación adicional y se utilizará la codificación
específica de la fuente. Esto es muy útil para fuentes con símbolos.
embed
Si se establece en un valor >0, la fuente será incorporada en el documento. Esto requiere la presencia del archivo de dibujo (.pfb).
Devuelve un identificador de la fuente o cero en caso de error. El identificador es un número positivo.
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.