ps_findfont

(PECL ps >= 1.1.0)

ps_findfont加载字体

描述

ps_findfont(
    资源 $psdoc,
    字符串 $fontname,
    字符串 $encoding,
    布尔值 $embed = false
): 整数

加载字体以便稍后使用。在使用已加载的字体输出文本之前,必须使用 ps_setfont() 设置它。此函数需要 Adobe 字体度量文件才能计算字符占用的空间。在页面内加载的字体仅在该页面可用。要在整个文档中使用的字体必须在第一次调用 ps_begin_page() 之前加载。在页面之间调用 ps_findfont() 将使该字体对所有后续页面可用。

afm 文件的名称必须是 fontname.afm。如果要嵌入字体,则包含字体轮廓的 fontname.pfb 文件也必须存在。

在第一页之前调用 ps_findfont() 要求输出 Postscript 标头,其中包括整个文档的 BoundingBox。通常,BoundingBox 在第一次调用 ps_begin_page() 时设置,现在它在 ps_findfont() 之后。因此,BoundingBox 尚未设置,并且在调用 ps_findfont() 时会发出警告。为了防止这种情况,应该在调用 ps_findfont() 之前调用 ps_set_parameter() 来设置 BoundingBox。

参数

psdoc

Postscript 文件的资源标识符,由 ps_new() 返回。

fontname

字体的名称。

encoding

ps_findfont() 将尝试加载参数 encoding 中传递的文件。编码文件与 dvips(1) 使用的文件具有相同的语法。它们包含字体编码向量(当前未使用,但必须存在)以及扩展从 afm 文件派生的连字列表的额外连字列表。

encoding 可以是 null 或空字符串,如果要使用默认编码(TeXBase1)。

如果将编码设置为 builtin,则不会进行重新编码,并将使用字体特定的编码。这对于符号字体非常有用。

embed

如果设置为 >0 的值,则字体将嵌入到文档中。这需要存在字体轮廓 (.pfb 文件)。

返回值

返回字体的标识符,或者在出错的情况下返回零。标识符是一个正数。

参见

添加注释

用户贡献注释 4 个注释

1
zeldorblat at gmail dot com
19 年前
我发现我的 Postscript 文件生成速度非常慢,并且文件大小异常大。问题是,每次我选择设置字体时,都会调用 ps_findfont(),然后调用 ps_setfont()。

看来每次调用 ps_findfont() 时,字体都会被嵌入到文件中。为了防止这种情况,我保留了一个我已经加载的字体的数组,以字体名称为键。当我设置字体时,我首先检查此数组以查看我是否已经加载了字体,如果是,则返回该数组中的资源句柄。否则,我会调用 ps_findfont() 并将句柄存储在数组中。

请注意,如果在页面内部调用 ps_findfont(),则该字体在其他页面上不可用。为了解决这个问题,我只需在每个页面的末尾清除该数组。

我的 PS 文件从 10M 减少到 75K,并且创建文件的时间从大约 15 秒缩短到不到 1 秒。
1
yarych at bigmir dot net
16 年前
我发现 pslib 在其数据目录(/usr/share/pslib)中搜索字体。现在无法更改搜索路径。
1
pepe at dexef dot hu
18 年前
我发现您必须将 <fontname>.afm 文件复制到您的 php 旁边,因为它默认在那里搜索。
0
yarych at bigmir dot net
16 年前
好的,我现在找到了为字体设置所需路径的方法 - 在调用 ps_findfont() 之前,进行如下调用
<?php ps_set_parameter($psdoc, 'SearchPath', $fonts_dir); ?>

它适用于 pslib 0.4.1 版本。(看起来它在某些早期版本中不起作用。)
To Top