使用DOMpdf

时间:2015-11-24 20:00:25

标签: php utf-8 dompdf

问题:

我想使用包含日文文本的DomPDF生成pdf。为了做到这一点,我知道我需要一个支持日文字符的字体并将字体加载到DomPDF中 我已经阅读了DomPDF的UnicodeHowTo以及关于SO的几个类似的问题,但我似乎无法让它发挥作用。我在日文字符所在的地方得到?

在我的dompdf配置中,我设置了def("DOMPDF_UNICODE_ENABLED", true);,它在管理界面中也显示为true。我使用的字体(我试过几个)应该支持日文字符,并使用load_font.php脚本加载到DomPDF中。为了完整起见,我必须注意,生成字体文件会给出2个相同的警告

  

警告:strftime():依赖系统的时区是不安全的   设置。您必需使用date.timezone设置或   date_default_timezone_set()函数。如果您使用其中任何一个   方法,你最有可能仍然得到这个警告   拼写错误的时区标识符。我们选择了时区' UTC'对于   现在,但请设置date.timezone以选择您的时区。在.. ..

最小(非)工作示例:

存储在PHP变量$template中的相关html:

<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<META http-equiv="X-UA-Compatible" content="IE=8">
<TITLE>Test voucher</TITLE>
<STYLE type="text/css">


@font-face {
      font-family: \'mgenplus\';
      font-style: normal;
      font-weight: 400;
      src: url(dompdf/fonts/rounded-mgenplus-1c-regular.ttf) format(\'truetype\');
 }
.ft0{font: 14px;line-height: 16px;}
*{ font-family: mgenplus !important;}
</STYLE>
</HEAD>

<BODY>
<P>ねん だい かい にほんごのうりょくしけん</P>
<!-- .... -->

相关PHP:

require_once("dompdf/dompdf_config.inc.php");
$template = mb_convert_encoding($template, 'HTML-ENTITIES', 'UTF-8');
$dompdf = new DOMPDF();
$dompdf->load_html($template, 'UTF-8');
$dompdf->render();
$dompdf->stream("test.pdf",array('Attachment'=>0));

如果有人有任何建议或者看我错过了什么,我们将不胜感激!

1 个答案:

答案 0 :(得分:2)

没关系,我发现为什么它不起作用,我会在这里发布给任何面临同样问题的人。

问题在于这篇文章:

@font-face {
      font-family: \'mgenplus\';
      font-style: normal;
      font-weight: 400;
      src: url(dompdf/fonts/rounded-mgenplus-1c-regular.ttf) format(\'truetype\');
 }
.ft0{font: 14px;line-height: 16px;}
*{ font-family: mgenplus !important;}

我必须删除@font-face块,因为您从DomPDF加载字体而不是从文件加载字体,所以不需要它。导致所有麻烦的行是.ft0{font: 14px;line-height: 16px;}它显然将font-family设置为浏览器默认值,然后DomPDF不考虑后面的覆盖(不支持!important?)。

将行更改为.ft0{font-size: 14px;line-height: 16px;}修复了我的问题。