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的字体库中:
- 把字体文件上传到服务器任意目录
- 执行dompdf自带的
load_font.php脚本:php load_font.php simhei /path/to/your/simhei.ttf - 安装完成后CSS中直接指定
font-family: simhei即可,无需再写@font-face
4. 验证嵌入结果
生成PDF后,用专业PDF阅读器打开,查看文件属性中的「字体」标签页,确认simhei字体状态显示为「已嵌入」即可解决方块问题。
内容的提问来源于stack exchange,提问作者doremi666
相关产品推荐
相关产品推荐

