我正在尝试使用dompdf生成包含中文字符的PDF。 这是我的代码:
require('dompdf/dompdf_config.inc.php');
$dompdf = new DOMPDF();
mb_internal_encoding('UTF-8');
def("DOMPDF_UNICODE_ENABLED", true);
$html = ' <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<style>
*{ font-family: DejaVu Sans, font-size: 12px;}
</style> </head> <body>
忠烈祠
</body>
</html>';
$dompdf->load_html($html);
$dompdf->render();
$output = $dompdf->output();
$filename = 'a.pdf';
$path = $filename;
file_put_contents($path, $output);
问题是当我用chrome或adobe reader打开它时生成的PDF只显示正方形,但在Mozilla Firefox中看起来没问题。
任何sugestions?
答案 0 :(得分:1)
首先,将def("DOMPDF_UNICODE_ENABLED", true);
移到require之上,因为dompdf中包含的def
函数仅定义常量(如果它不存在)。当你包含dompdf_config.inc.php时,那个常量将被设置。另外,请改用define
。
其次,你需要一个不同的字体。 dompdf附带的DejaVu字体不支持CJK。有关概述,请阅读我对Dompdf and set different font-family的回答。
如果您目前没有字体,可以尝试查找Firefly Sung。无论你决定使用什么字体,它都应该是TTF,以便dompdf使用它。
以下是通过@ font-face CSS规则使用Firefly Sung的示例,无需安装:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style>
@font-face {
font-family: 'Firefly Sung';
font-style: normal;
font-weight: 400;
src: url(http://eclecticgeek.com/dompdf/fonts/cjk/fireflysung.ttf) format('truetype');
}
* {
font-family: Firefly Sung, DejaVu Sans, sans-serif;
}
</style>
</head>
<body>
<div>忠烈祠</div>
</body>
</html>