【问题标题】:DOMPDF problem with Cyrillic characters西里尔字符的 DOMPDF 问题
【发布时间】:2010-11-02 16:12:11
【问题描述】:

标签: php pdf pdf-generation dompdf


【解决方案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):
    1. Download 存档和提取。
    2. 将提取的文件复制到您的 dompdf 字体文件夹 /dompdf/lib/fonts/
    3. 使用 sn-p 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.*文件复制到/dompdf/lib/fonts/
    4. 添加到dompdf_font_family_cache.dist.phpsn-p 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'
    )
    /* ... */
    

    【讨论】:

      【解决方案3】:

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

      下载本地化的俄语版本

      更新链接:https://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>
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-05-19
            • 2020-08-14
            • 2020-06-15
            • 2015-01-22
            • 1970-01-01
            • 2019-07-23
            • 2011-06-22
            • 1970-01-01
            相关资源
            最近更新 更多