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

使用PHP结合Mpdf库生成含乌尔都语文本PDF遇UTF-8处理故障

解决Mpdf处理UTF-8阿拉伯语文字的问题

我之前也碰到过Mpdf处理阿拉伯语这类复杂UTF-8字符的坑,就算照着手册示例来也踩过雷。核心问题大多出在字体不支持复杂脚本和RTL(从右到左)布局未正确配置上,给你几个针对性的解决方案:

1. 加载支持阿拉伯语的字体

Mpdf默认的字体(比如Helvetica)不支持阿拉伯语的连写和特殊字符,必须替换成支持多语言的字体,比如DejaVu Sans(Mpdf内置了这个字体,不用额外下载),或者专门的阿拉伯字体如Amiri。

你可以在初始化Mpdf时直接指定默认字体,或者在HTML的CSS里明确设置字体。

2. 完善Mpdf的字符集与RTL配置

除了allow_charset_conversion,还要明确指定charset为UTF-8,同时开启RTL模式适配阿拉伯语的书写方向。另外一定要确保你的PHP文件本身是UTF-8无BOM编码,避免编码冲突。

修改后的完整代码示例

require_once '../vendor/autoload.php';

// 初始化Mpdf,配置字体、字符集和RTL支持
$mpdf = new \Mpdf\Mpdf([
    'allow_charset_conversion' => true,
    'charset' => 'UTF-8',
    'default_font' => 'dejavusans', // 使用支持多语言的DejaVu Sans字体
    'mode' => 'utf-8',
    'orientation' => 'P',
    'direction' => 'rtl' // 开启RTL布局,适配阿拉伯语
]);

$html = ' 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" dir="rtl"> <!-- 这里也设置dir="rtl" -->
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Document in Arabic</title>
<style>
    body {
        font-family: dejavusans, sans-serif; /* 确保HTML里的字体和Mpdf配置一致 */
    }
</style>
</head> 
<body> 
... اسلام و علیکم ... لفظوں کا مجموعہ 
</body> 
</html>';

$mpdf->WriteHTML($html);
$mpdf->Output();

额外排查点

  • 如果还是报错,试试关闭allow_charset_conversion(设为false),有时候自动字符转换反而会干扰原生UTF-8的渲染
  • 检查Composer是否正确安装了Mpdf的依赖,尤其是字体文件有没有缺失(Mpdf的字体包通常在vendor/mpdf/mpdf/fonts目录下)
  • 确认你的HTML文本本身是纯UTF-8编码,没有经过其他转码导致乱码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 12:27:52