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

求助:mPDF无法正确加载BMitra、IRANSans等自定义波斯字体渲染波斯文本

解决mPDF渲染波斯语(Farsi)自定义字体异常问题

针对你遇到的mPDF加载波斯语自定义字体失败、OTL报错、排版异常的问题,可按以下步骤排查修复:

1. 字体文件与路径优化

  • 确保使用完整支持OTL特性的字体版本:部分精简版字体(如压缩后的TTF)会移除GSUB/GPOS等OTL核心表,导致启用useOTL时报错。建议从官方渠道下载完整版字体(比如Vazir、IRANSans的官方仓库)。
  • 用绝对路径替代相对路径:mPDF对相对路径的解析容易出错,直接通过realpath()生成绝对路径,避免路径找不到的问题:
    'R' => realpath(__DIR__ . '/assets/fonts/pdf/iransans.ttf'),
    

2. 调整mPDF核心配置

  • 关闭autoLangToFont:该参数会自动根据语言替换字体,可能覆盖你指定的自定义字体,设置为false。
  • 显式启用OTL并绑定波斯语:初始化时指定useOTL、useKashida和default_lang,确保mPDF正确识别波斯语并应用排版规则:
    $mpdf = new \Mpdf\Mpdf([
        'fontDir' => [realpath(__DIR__ . '/assets/fonts/pdf')],
        'format' => $PAGE_FORMAT,
        'autoLangToFont' => false,
        'mode' => 'utf-8',
        'useSubstitutions' => false, // 关闭自动字体替换,强制使用指定字体
        'fontdata' => [
            'bmitra' => [
                'R' => realpath(__DIR__ . '/assets/fonts/pdf/bmitra.ttf'),
                'B' => realpath(__DIR__ . '/assets/fonts/pdf/bmitrabd.ttf'),
            ],
            'iransans' => [
                'R' => realpath(__DIR__ . '/assets/fonts/pdf/iransans.ttf'),
                'B' => realpath(__DIR__ . '/assets/fonts/pdf/iransans.ttf'),
            ],
            'vazir' => [
                'R' => realpath(__DIR__ . '/assets/fonts/pdf/vazir.ttf'),
            ],
        ],
        'default_font' => 'iransans',
        'useOTL' => 1, // 启用全部OTL特性
        'useKashida' => 75, // 波斯语字符拉伸比例(0-100)
        'default_lang' => 'fa', // 默认语言设为波斯语
    ]);
    $mpdf->SetDirectionality('rtl');
    

3. HTML渲染规则优化

  • 统一设置字体样式:在父容器统一指定font-family,避免局部元素重复设置导致的冲突,同时确保dir="rtl"正确生效:
    $headerNumber = '<div dir="rtl" style="font-family: iransans; text-align: left;">';
    $headerNumber .= 'شماره: 123456<br>';
    $headerNumber .= 'تاریخ: 123456<br>';
    $headerNumber .= 'پیوست: دارد';
    $headerNumber .= '</div>';
    
  • 清理mPDF缓存:修改字体配置后,删除mPDF的临时缓存目录(默认路径为vendor/mpdf/mpdf/tmp),避免旧缓存影响新字体加载。

4. 字体兼容性验证

  • 检查字体OTL支持:用FontForge打开字体文件,查看是否存在GSUB和GPOS表,若不存在则说明该字体不支持OTL,需更换版本。
  • 优先使用OTF格式:部分TTF字体的OTL支持不如OTF完善,尝试替换为对应字体的OTF版本测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 16:15:22