PHP Conference Kansai 2025

ps_findfont

(PECL ps >= 1.1.0)

ps_findfontCarrega uma fonte

Descrição

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

Carrega uma fonte para uso posterior. Antes que o texto seja gerado com uma fonte carregada, ele deve ser definido com ps_setfont(). Esta função precisa do arquivo de métricas de fontes da Adobe para calcular o espaço usado pelos caracteres. Uma fonte carregada dentro de uma página estará disponível apenas naquela página. As fontes que serão usadas no documento completo devem ser carregadas antes da primeira chamada de ps_begin_page(). Chamar ps_findfont() entre páginas tornará essa fonte disponível para todas as páginas seguintes.

O nome do arquivo afm deve ser fontname.afm. Se a fonte for incorporada, o arquivo fontname.pfb contendo o contorno da fonte também deve estar presente.

Chamar ps_findfont() antes da primeira página requer a geração do cabeçalho PostScript que inclui o BoundingBox para todo o documento. Normalmente, o BoundingBox é definido com a primeira chamada de ps_begin_page(), que agora vem depois de ps_findfont(). Consequentemente, o BoundingBox não foi definido e um aviso será emitido quando ps_findfont() for chamado. Para evitar essa situação, deve-se chamar ps_set_parameter() para definir o BoundingBox antes de ps_findfont() ser chamado.

Parâmetros

psdoc

Identificador de recurso do arquivo postscript conforme retornado por ps_new().

fontname

O nome da fonte.

encoding

ps_findfont() tentará carregar o arquivo passado no parâmetro encoding. Os arquivos de codificação têm a mesma sintaxe daqueles usados ​​por dvips(1). Eles contêm um vetor de codificação de fonte (que atualmente não é usado, mas deve estar presente) e uma lista de ligaduras extras para estender a lista de ligaduras derivadas do arquivo afm.

encoding pode ser null ou a string vazia se a codificação padrão (TeXBase1) for usada.

Se a codificação for definida como builtin, não haverá recodificação e a codificação específica da fonte será usada. Isso é muito útil com fontes de símbolos.

embed

Se definido para um valor maior que zero, a fonte será incorporada ao documento. Isso requer a presença do contorno da fonte (arquivo .pfb).

Valor Retornado

Retorna o identificador da fonte ou zero em caso de erro. O identificador é um número positivo.

Veja Também

adicione uma nota

Notas Enviadas por Usuários (em inglês) 4 notes

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