西里尔字符的 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
中为字体默认设置更改 defdef("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.php
sn-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 问题的主要内容,如果未能解决你的问题,请参考以下文章