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

如何在Laravel的dompdf中显示印地语与古吉拉特语字体

解决Laravel中dompdf同时显示印地语和古吉拉特语字体的问题

1. 修复CSS字体声明错误

你当前的CSS写法会让后一个font-family覆盖前一个,导致全局仅使用Noto Sans Gujarati,印地语内容可能依赖默认 fallback 显示,而古吉拉特语因字体未正确加载出现异常。可以通过两种方式修正:

方式一:全局Fallback字体链

将多个字体合并到同一个font-family声明中,dompdf会自动为对应语言的字符匹配合适字体:

* {
  font-family: 'Noto Sans Devanagari', 'Noto Sans Gujarati', sans-serif;
}

方式二:针对不同语言内容单独设置

给印地语、古吉拉特语内容分别添加类名:

<p class="devanagari">印地语内容示例</p>
<p class="gujarati">古吉拉特语内容示例</p>

再通过样式指定对应字体:

.devanagari {
  font-family: 'Noto Sans Devanagari', sans-serif;
}
.gujarati {
  font-family: 'Noto Sans Gujarati', sans-serif;
}

2. 正确注册本地字体到dompdf

dompdf无法直接识别storage/fonts目录下的字体文件,需生成字体元数据并完成注册:

  1. 进入Laravel项目根目录,执行dompdf字体加载命令(替换为你的实际字体文件名):
    # 注册印地语字体
    php vendor/dompdf/dompdf/lib/fonts/load_font.php "Noto Sans Devanagari" storage/fonts/NotoSansDevanagari-Regular.ttf
    # 注册古吉拉特语字体
    php vendor/dompdf/dompdf/lib/fonts/load_font.php "Noto Sans Gujarati" storage/fonts/NotoSansGujarati-Regular.ttf
    
  2. 若使用barryvdh/laravel-dompdf,先发布配置文件:
    php artisan vendor:publish --provider="Barryvdh\DomPDF\ServiceProvider"
    
    然后修改config/dompdf.php中的字体路径配置:
    'font_dir' => storage_path('fonts/'),
    'font_cache' => storage_path('fonts/'),
    

3. 升级数据库字符集到utf8mb4

MySQL的utf8仅支持3字节Unicode字符,部分复杂语言字符可能无法正确存储,建议升级为utf8mb4:

  1. 修改config/database.php中的数据库连接配置:
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_unicode_ci',
    
  2. 将存储多语言内容的表和字段的字符集改为utf8mb4,排序规则改为utf8mb4_unicode_ci。

4. 移除远程谷歌字体链接

dompdf对远程字体的加载支持不稳定,容易出现加载失败导致字体失效的问题,建议完全依赖本地注册字体,删除<link>标签。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 04:22:32