西里尔字符的 DOMPDF 问题

Posted

技术标签:

【中文标题】西里尔字符的 DOMPDF 问题【英文标题】:DOMPDF problem with Cyrillic characters 【发布时间】:2010-11-02 16:12:11 【问题描述】: 【参考方案1】:

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

DejaVu TrueType 字体已预先安装,默认情况下为 dompdf 提供体面的 Unicode 字符覆盖。要使用 DejaVu 字体,请参考样式表中的字体,例如正文 字体系列: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");

【讨论】:

【参考方案2】:

接受的答案链接已损坏,其中包含旧版本的 DOMPDF。

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

使用现有字体(适用于 DOMPDF 0.6):
    Download 存档和提取。 将提取的文件复制到您的 dompdf 字体文件夹 /dompdf/lib/fonts/。 使用 sn-p 1 编辑 dompdf_font_family_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 中使用来自 UFPDF 的 exe 完成此操作,但我想您可以使用 /dompdf/lib/ttf2ufm/bin/ttf2ufm.exe。) 将Arial.*文件复制到/dompdf/lib/fonts/。 添加到dompdf_font_family_cache.dist.phpsn-p 2。 在 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'
)
/* ... */

【讨论】:

【参考方案3】:

问题在于默认 dompdf 使用的字体(即它没有所有 unicode 字符,现在已经超过 5000 个)。通常 arialuni.ttf 是你需要的。您可以在http://chernev.ru/dompdf.rar broken link

下载本地化的俄语版本

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

【讨论】:

更新了其他人的链接:code.google.com/p/ipwn/downloads/detail?name=arialuni.ttf【参考方案4】:

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

【讨论】:

投反对票,因为 Arialuni 的文件大小为 22 MB,当我想生成 1 页 PDF 时,它需要很长时间,而且 PDF 的文件大小很大(在我的情况下约为 20 MB)。当我生成 10 页 PDF 时,它需要无限的处理器时间,实际上看不到结果。最好使用轻量级字体。【参考方案5】:

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

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

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

【讨论】:

【参考方案6】:

注意到问题可能出在 css-reset 的使用上,尤其是 font:inherit;

【讨论】:

【参考方案7】:

在您的 html 中,使用这种样式:

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

</style>

【讨论】:

以上是关于西里尔字符的 DOMPDF 问题的主要内容,如果未能解决你的问题,请参考以下文章

PHPmailer 西里尔字符集问题

友好网址中的西里尔字符问题

Backand:西里尔字符串转向?

Eclipse 打印错误的西里尔字符

seo 友好的 url 使用西里尔字符 х 字符,它总是得到 404。如何修复它?

如果路径中有西里尔字符,如何使用 require