带有西里尔字符的DOMPDF问题

时间:2009-06-13 07:01:01

标签: php pdf pdf-generation dompdf

我正在使用DOMPDF库以PDF格式创建发票。本文档可以是法语,俄语或英语,但我在打印俄语字符时遇到问题。

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

  

< meta http-equiv =“Content-Type”content =“text / html; charset = utf-8”/>

但那没用。

然后我在meta标记内插入了此BODY标记,这有助于解决法语字符问题。

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

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

有人可以帮忙吗?

7 个答案:

答案 0 :(得分:8)

在接受的答案链接中断,它包含旧版本的DOMPDF。

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

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

    1. Download存档和摘录。
    2. 复制dompdf字体文件夹/dompdf/lib/fonts/中提取的文件。
    3. 使用代码段1修改dompdf_font_family_cache.dist.php
    4. 在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):

    1. 运行:ttf2afm -o Arial.afm Arial.ttf。 (我在Ubuntu中做过。)
    2. 运行:ttf2ufm -a -F Arial.ttf。 (我在Windows中使用来自UFPDF的exe做了,但我想你可以使用/dompdf/lib/ttf2ufm/bin/ttf2ufm.exe。)
    3. 复制Arial.*。{/ li>中的/dompdf/lib/fonts/个文件
    4. 添加到dompdf_font_family_cache.dist.php代码段2。
    5. 在CSS中使用font-family: 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'
)
/* ... */

答案 1 :(得分:7)

问题在于字体默认的dompdf使用(也就是说它没有所有的unicode字符,现在已超过5000)。通常arialuni.ttf就是你所需要的。您可以在http://chernev.ru/dompdf.rar {已断开链接}

下载本地化的俄语版本

更新了链接:https://code.google.com/p/ipwn/downloads/detail?name=arialuni.ttf

答案 2 :(得分:5)

如果你使用DejaVu字体,你可以看到西里尔字符

  

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

DOMPDF包括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());

您还可以在 dompdf_config.inc.php

中默认设置字体更改 def
def("DOMPDF_DEFAULT_FONT", "DejaVu Sans");

答案 3 :(得分:0)

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

答案 4 :(得分:0)

对我而言,上述4个步骤并未解决问题。 除此之外,dompdf将创建的pdf转换为ANSI(ISO) 您需要在选项页面上禁用此功能 http://domain.com/admin/settings/print/pdf

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

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

答案 5 :(得分:0)

注意到问题可能在css-reset使用中,特别是 font:inherit;

答案 6 :(得分:0)

在您的html中,使用以下样式:

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