求助: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");
额外说明
- 若需更精准控制字体,可在HTML中通过内联样式单独指定:
<p style="font-family: cid0cn;">中文内容段落</p> <p style="font-family: dejavusans;">泰文内容段落</p> - 确保你的mPDF版本包含对应的扩展字体(DejaVu Sans、cid0cn等为mPDF默认附带字体),若缺失需重新安装mPDF或手动添加字体文件。
内容的提问来源于stack exchange,提问作者Lavanya Suresh
相关产品推荐
相关产品推荐

