dompdf没有显示一些拉丁字符

时间:2016-01-27 21:35:30

标签: php dompdf

我使用的是最新稳定的0.6 dompdf版本,但是我无法显示一些拉丁字符,我看到文档目前仅用于收入。

到目前为止,我正在尝试使用Open Sans字体,我甚至将其转换为afm格式,但仍显示一些显示?而不是我们的拉丁字符'č,ć,đ,ž'。

将字体下载为ttf,并将字体定义添加到dompdf_font_family_cache.dist.php文件中,如下所示:

'open sans' => 
  array (
    'normal' => $rootDir . '/lib/fonts/OpenSans',
  ),

将html内容输出到浏览器可以很好地呈现这些字符。有没有官方解决方案,因为缺少load_font.php或者应该更新到0.7-beta并使用@ font-face?

1 个答案:

答案 0 :(得分:1)

字符编码

PDF文档的默认编码是Windows ANSI (1)。此编码提供有限的字符集支持,包含问题中指定的字符(č,ć,đ,ž)。因此,虽然文本在技术上是拉丁编码的,但支持这些字符的特定编码(ISO-8859-5)与PDF文档中提供的默认编码(Windows-1252,即Windows ANSI,它相当不同很多ISO-8859-1)。

字体指标

考虑到字符编码问题,您采用了正确的方法来loading a font添加对字符的支持。但是,您完成它的方法不会得到预期的结果。 dompdf(使用CPDF后端时)利用字体度量来确定如何布置文档的文本。字体度量标准有两种形式,AFM(Adobe字体度量标准)和UFM(Unicode字体度量标准)。这两种形式对应于dompdf,Windows ANSI和Unicode支持的两种可能的编码。您的字体指标采用AFM格式这一事实表明dompdf该字体被编码为Windows ANSI。

加载字体

虽然可以修改dompdf_font_family_cache.dist.php文件,但不建议这样做。由于该文件作为发行版的一部分包含在内,因此您执行的任何更新都可能会覆盖该文件。当使用任何支持的字体加载方法时,dompdf将创建一个名为dompdf_font_family_cache.php的文件来存储自定义字体的名称/位置信息。如果要调整自定义字体信息,可以在此文件中进行调整。此文件通常与自定义字体相关的TTF和AFM文件一起存储(不一定在dompdf / lib / fonts目录中......取决于您的配置)。

我建议不要手动编辑dompdf_font_family_cache.php。相反,我会使用CSS @font-face规则来定义和加载字体,如果没有其他原因易于使用。如果您倾向于使用命令行工具预加载字体,则load_font.php脚本仍包含在dompdf的0.6.x版本中(不确定为什么会这样认为)。如果要移至0.7.0,可以在dompdf-utils project中找到load_font.php脚本的更新版本。

最后,如果您仍然遇到问题,可以尝试使用其中一种捆绑的DejaVu字体(从dompdf 0.6.0开始提供)。

(1)好的,是的,有一些可能的编码。但在大多数情况下,您可以将Windows ANSI视为默认值。