Php 西里尔字母字符的DOMPF问题

Php 西里尔字母字符的DOMPF问题,php,pdf,pdf-generation,dompdf,Php,Pdf,Pdf Generation,Dompdf,我正在使用DOMPDF库以PDF格式创建发票。此文档可以是法语、俄语或英语,但我无法打印俄语字符 首先,我尝试使用UTF-8编码,并将meta标记放在要转换的HTML页面的头部: 但那没用 然后我将这个meta标记插入BODY标记中,它帮助解决了法语字符的问题 但是俄罗斯人的角色仍然不起作用。我还尝试将俄语字符转换为HTML实体,但这也不起作用 我使用R&OS CPDF类,而不是PDFLib作为后端 有人能帮忙吗?问题在于dompdf默认使用的字体(也就是说,它没有所有的unicode字符,到

我正在使用DOMPDF库以PDF格式创建发票。此文档可以是法语、俄语或英语,但我无法打印俄语字符

首先,我尝试使用UTF-8编码,并将
meta
标记放在要转换的HTML页面的头部:

但那没用

然后我将这个
meta
标记插入
BODY
标记中,它帮助解决了法语字符的问题

但是俄罗斯人的角色仍然不起作用。我还尝试将俄语字符转换为HTML实体,但这也不起作用

我使用R&OS CPDF类,而不是PDFLib作为后端


有人能帮忙吗?

问题在于dompdf默认使用的字体(也就是说,它没有所有的unicode字符,到目前为止已经超过5000个)。通常arialuni.ttf是您需要的。您可以在{断开链接}下载本地化的俄语版本

更新链接:

下载arialuni.ttf 在dompdf目录中运行php load_font.php'Arial'arialuni.ttf,将字体设置为Arial
它有效;)

在已接受答案中,链接已断开,其中包含DOMPDF的旧版本

要在DOMPDF 0.6中使用unicode符号,您有两种选择:使用现有字体或创建自己的字体

  • 使用现有字体(适用于DOMPDF 0.6):

  • 存档和摘录
  • 将提取的文件复制到dompdf fonts文件夹
    /dompdf/lib/fonts/
  • 使用代码片段1编辑
    dompdf\u font\u family\u cache.dist.php
  • 在CSS中使用
    font-family:times
片段1:

/* ... */
'times' => array (
    'normal' => DOMPDF_FONT_DIR . 'times',
    'bold' => DOMPDF_FONT_DIR . 'timesbd',
    'italic' => DOMPDF_FONT_DIR . 'timesi',
    'bold_italic' => DOMPDF_FONT_DIR . 'timesbi'
),
'times-roman' => array (
    'normal' => DOMPDF_FONT_DIR . 'times',
    'bold' => DOMPDF_FONT_DIR . 'timesbd',
    'italic' => DOMPDF_FONT_DIR . 'timesi',
    'bold_italic' => DOMPDF_FONT_DIR . 'timesbi'
),
/* ... */

  • 如果您想使用自己的TTF字体(例如,
    Arial.TTF
    ):

  • 运行:
    ttf2afm-o Arial.afm Arial.ttf
    。(我是在Ubuntu上做的。)
  • 运行:
    ttf2ufm-a-F Arial.ttf
    。(我在Windows中使用的是来自的exe,但我想您可以使用
    /dompdf/lib/ttf2ufm/bin/ttf2ufm.exe
  • Arial.*
    文件复制到
    /dompdf/lib/font/
  • 添加到
    dompdf\u font\u family\u cache.dist.php
    snippet 2
  • 在CSS中使用
    字体系列:arial
片段2:

/* ... */
'arial' => array (
    'normal' => DOMPDF_FONT_DIR . 'Arial',
    'bold' => DOMPDF_FONT_DIR . 'Arial',
    'italic' => DOMPDF_FONT_DIR . 'Arial',
    'bold_italic' => DOMPDF_FONT_DIR . 'Arial'
)
/* ... */

对我来说,上述4个步骤并没有解决问题。 除此之外,dompdf还将创建的pdf转换为ANSI(ISO) 您需要在“选项”页面上禁用此选项

勾选“使用dompdf的Unicode模式”复选框。这将强制创建UTF-8/Unicode格式的文件


请注意,默认情况下,web设置会覆盖dompdf_config.inc.php中的设置。

如果使用DejaVu字体,您可以看到西里尔字母

DejaVu TrueType字体已经预先安装,默认情况下,它可以提供dompdf体面的Unicode字符覆盖率。要使用DejaVu字体,请参考样式表中的字体,例如body{font-family:DejaVu-Sans;}(适用于DejaVu-Sans)

默认为DOMPDF include DejaVu字体

    $html = "<html><head><style>body { font-family: DejaVu Sans }</style>".
        "<body>А вот и кириллица</body>".
        "</head></html>";

    $dompdf = new \DOMPDF();
    $dompdf->load_html($html);
    $dompdf->render();
    echo file_put_contents('cyrillic.pdf', $dompdf->output());

注意到问题可能在css重置使用中,特别是
font:inherit

在html中,使用以下样式:

<style type="text/css">
* {
  /*font-family: Helvetica, sans-serif;*/
  font-family: "DejaVu Sans", sans-serif;
}
</style>

* {
/*字体系列:Helvetica,无衬线*/
字体系列:“DejaVu Sans”,无衬线;
}

如果您希望您的问题得到更多关注,请使用新信息更新此问题。不要发布完全相同的内容。为什么这个社区是维基?这是一个具体的问题,有一个很好的答案。向下投票,因为Arialuni的文件大小是22MB,当我想生成一页PDF时,需要很长时间,PDF的文件大小很大(在我的例子中是20MB)。当我生成10页的PDF时,需要无限的处理器时间,实际上无法看到结果。最好使用轻量级字体。为其他遇到以下问题的人更新了链接:
<style type="text/css">
* {
  /*font-family: Helvetica, sans-serif;*/
  font-family: "DejaVu Sans", sans-serif;
}
</style>