You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 11:17:42