Php 西里尔字母字符的DOMPF问题
我正在使用DOMPDF库以PDF格式创建发票。此文档可以是法语、俄语或英语,但我无法打印俄语字符 首先,我尝试使用UTF-8编码,并将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字符,到
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代码>
/* ... */
'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
- 运行:
。(我是在Ubuntu上做的。)ttf2afm-o Arial.afm Arial.ttf
- 运行:
。(我在Windows中使用的是来自的exe,但我想您可以使用ttf2ufm-a-F Arial.ttf
)/dompdf/lib/ttf2ufm/bin/ttf2ufm.exe
- 将
文件复制到Arial.*
中/dompdf/lib/font/
- 添加到
snippet 2dompdf\u font\u family\u cache.dist.php
- 在CSS中使用
字体系列:arial代码>
/* ... */
'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>