在Pimcore中使用DOMPDF渲染非ANSI字符PDF失败求助
解决Pimcore中DOMPDF渲染非ANSI字符(泰/韩/中/日/越等)显示异常的问题
核心问题是DOMPDF默认字体不支持东亚、东南亚语言字符,需通过引入多语言支持字体+编码配置解决,具体步骤如下:
1. 准备支持多语言的字体文件
- 下载覆盖目标语言的字体,推荐Google的Noto Sans系列(如
NotoSansCJKsc-Regular.ttf支持中文、NotoSansThai-Regular.ttf支持泰语,或直接用包含多语言子集的NotoSans-Regular.ttf) - 将字体文件(
.ttf/.otf)放到Pimcore项目可访问目录,比如public/fonts/(避免更新DOMPDF时丢失)
2. 在HTML模板中指定自定义字体
在模板的<style>标签里定义字体,确保覆盖目标字符范围:
@font-face { font-family: 'Noto Sans'; src: url('/fonts/NotoSans-Regular.ttf') format('truetype'); font-weight: normal; font-style: normal; /* 覆盖泰、韩、中、日、越等字符的Unicode范围 */ unicode-range: U+0E00-0E7F, U+AC00-D7AF, U+4E00-9FFF, U+3040-30FF, U+0E80-0EFF, U+0000-00FF; } body, .content { font-family: 'Noto Sans', sans-serif; }
3. 调整PHP代码的编码与字体配置
- 确保HTML内容为UTF-8编码:
// 加载模板时强制转成UTF-8 $html = file_get_contents($yourTemplatePath); $html = mb_convert_encoding($html, 'UTF-8', mb_detect_encoding($html)); // 初始化DOMPDF并配置 $dompdf = new \Dompdf\Dompdf(); // 设置默认字符集为UTF-8 $dompdf->set_option('default_charset', 'UTF-8'); // 注册自定义字体(可选,若HTML中已通过@font-face定义可跳过) $fontDir = realpath(__DIR__ . '/../public/fonts'); $dompdf->getFontMetrics()->registerFont([ 'family' => 'Noto Sans', 'style' => 'normal', 'weight' => 'normal', 'uri' => $fontDir . '/NotoSans-Regular.ttf' ]); $dompdf->loadHtml($html); $dompdf->render();
4. 关键注意事项
- 模板文件本身需保存为UTF-8无BOM格式
- 确保DOMPDF有权限读取字体文件目录
- 测试时可先渲染仅包含目标语言字符的极简HTML,排查是字体缺失还是编码错误
内容的提问来源于stack exchange,提问作者Chauhan Mukesh
相关产品推荐
相关产品推荐

