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

求助:CodeIgniter中mPDF生成PDF时中文/泰文显示异常的解决方法

修复mPDF中文、泰文显示异常的配置方案

导致中文、泰文显示为方块的核心原因是仅启用核心字体以及字体配置不匹配,以下是具体修复步骤和代码:

关键修复点

  • 关闭核心字体限制:核心字体不包含中文、泰文字符集,必须允许加载扩展字体
  • 调整初始化参数,明确支持多语言编码
  • 配置支持Unicode多语言的字体(如DejaVu Sans),或为不同语言指定对应字体

修正后的完整代码

// 初始化mPDF,指定UTF-8编码,支持全Unicode字符集
$pdf = new \mPDF('utf-8', 'A4', '', '', 15, 10, 16, 10, 10, 10);

// 关闭仅核心字体限制(默认值为false,显式设置避免歧义)
$pdf->useOnlyCoreFonts = false;

$pdf->SetProtection(array('print'));
$pdf->SetWatermarkText("Rentokil Initial");
$pdf->showWatermarkText = true;
$pdf->watermark_font = 'dejavusanscondensed';
$pdf->watermarkTextAlpha = 0.03;
$pdf->shrink_tables_to_fit = 0;

// 开启自动脚本识别,让mPDF自动匹配对应语言的字体
$pdf->autoScriptToLang = true;
$pdf->baseScript = 0; // 设为0表示自动检测所有脚本类型

// 设置默认字体为DejaVu Sans(支持泰文及多数Unicode字符),中文会自动匹配cid0cn字体
$pdf->SetFont('dejavusans', '', 16);
$pdf->CSSselectMedia = 'pdf';
$pdf->charset_in = 'UTF-8';

$pdf->WriteHTML($html);
$pdf->Output($pdfFilePath, "F");

额外说明

  1. 若需更精准控制字体,可在HTML中通过内联样式单独指定:
    <p style="font-family: cid0cn;">中文内容段落</p>
    <p style="font-family: dejavusans;">泰文内容段落</p>
    
  2. 确保你的mPDF版本包含对应的扩展字体(DejaVu Sans、cid0cn等为mPDF默认附带字体),若缺失需重新安装mPDF或手动添加字体文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 13:30:11