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

使用mPDF库导出阿拉伯文PDF时文本显示乱码的问题

解决mPDF导出阿拉伯文PDF显示异常的方案

针对你的问题,核心原因是mPDF默认配置未适配阿拉伯文的RTL(从右到左)排版需求,且缺少支持阿拉伯文的字体配置,以下是具体修复步骤:

1. 修正mPDF初始化配置

阿拉伯文属于RTL语言,需要在初始化时指定对应模式、开启自动语言字体映射,并设置文本方向:

function generateAndOutputPDF($studentDetails)
{
    // 初始化mPDF,适配阿拉伯文
    $mpdf = new Mpdf([
        'mode' => 'utf-8', // 或直接用'ar'指定阿拉伯文模式
        'format' => 'A2',
        'autoScriptToLang' => true,
        'autoLangToFont' => true,
        'default_font' => 'Amiri' // 指定支持阿拉伯文的字体
    ]);

    // 设置全局文本方向为RTL
    $mpdf->SetDirectionality('rtl');

    // 构造包含阿拉伯文的HTML内容(根据你的实际字段调整)
    $html = '
    <!DOCTYPE html>
    <html lang="ar">
    <body dir="rtl">
        <h1>شهادة التسجيل</h1>
        <p>اسم الطالب: ' . $studentDetails['NomArabe'] . '</p>
        <p>رقم التسجيل: ' . $studentDetails['NumInscription'] . '</p>
    </body>
    </html>
    ';

    // 写入HTML内容到PDF
    $mpdf->WriteHTML($html);

    // 输出PDF作为下载
    $mpdf->Output('certificate_' . $studentDetails['NumInscription'] . '.pdf', 'D');
}

2. 确保字体支持阿拉伯文

  • 如果使用系统已安装的阿拉伯字体(如Arial Unicode MS、Times New Roman),直接修改default_font为对应字体名称即可。
  • 如果需要引入自定义字体(如Amiri),需将字体文件(.ttf/.otf)放入项目字体目录,然后在mPDF初始化时配置:
$mpdf = new Mpdf([
    // 其他配置...
    'fontDir' => __DIR__ . '/fonts/',
    'fontdata' => [
        'amiri' => [
            'R' => 'Amiri-Regular.ttf',
            'B' => 'Amiri-Bold.ttf'
        ]
    ],
    'default_font' => 'amiri'
]);

3. 数据库字符编码校验

确保数据库连接和表字段字符编码为utf8mb4,避免从数据库读取阿拉伯文时出现乱码:

// 在conn.php中添加字符编码设置
$conn->exec("SET NAMES 'utf8mb4'");
$conn->exec("SET CHARACTER SET utf8mb4");

关键注意事项

  • HTML内容必须设置lang="ar"和dir="rtl",确保mPDF识别文本方向。
  • 所有包含阿拉伯文的变量输出时,不要转义字符(确保数据库读取的是原始UTF-8字符串)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 10:27:46