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

Laravel DomPDF配置自定义@font-face显示方块 中文渲染异常求助

dompdf生成PDF中文显示方块问题解决方案

该问题核心原因是中文字体未成功嵌入生成的PDF文件,仅在选中内容时临时调用本地系统字体渲染,因此未嵌入字体的PDF在打开时会显示方块,可按以下步骤逐一排查修复:

1. 修正CSS中@font-face语法错误

你当前的src属性存在字符串拼接语法错误,两个单引号拼接断裂导致字体文件路径读取失败,修改为如下正确写法:

@font-face {
    font-family: 'simhei';
    font-style: normal;
    font-weight: normal;
    src: url('{{base_path().'/public/fonts/simhei.ttf'}}') format('truetype');
}

body {  
    font-family: 'simhei', sans-serif; 
}

注意:Linux环境下严格区分文件大小写,需确保字体文件名与代码中拼写完全一致。

2. 配置dompdf字体权限与参数

  • 确保dompdf的字体缓存目录(默认是vendor/dompdf/dompdf/lib/fonts或你自定义的storage下的字体目录)有755以上读写权限,dompdf需要将加载的字体缓存到该目录后才能嵌入PDF
  • 修改dompdf配置文件dompdf_config.inc.php中的对应参数:
    • 开启字体子集嵌入:define("DOMPDF_ENABLE_FONTSUBSETTING", true);,仅嵌入PDF用到的字符,既减小文件体积也能保证嵌入成功
    • 确认允许加载本地字体:define("DOMPDF_ENABLE_REMOTE", true);

3. 手动安装字体(可选,稳定性更高)

如果CSS引入方式一直失效,可以使用dompdf自带的字体安装工具直接将字体安装到dompdf的字体库中:

  1. 把字体文件上传到服务器任意目录
  2. 执行dompdf自带的load_font.php脚本:php load_font.php simhei /path/to/your/simhei.ttf
  3. 安装完成后CSS中直接指定font-family: simhei即可,无需再写@font-face

4. 验证嵌入结果

生成PDF后,用专业PDF阅读器打开,查看文件属性中的「字体」标签页,确认simhei字体状态显示为「已嵌入」即可解决方块问题。

内容的提问来源于stack exchange,提问作者doremi666

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 00:54:03