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

CodeIgnitor中Mpdf 5.7.4生成PDF时₹符号显示为方块

解决CodeIgniter中Mpdf 5.7.4生成PDF时₹符号显示方块的问题

我之前也碰到过类似的情况,Mpdf 5.7.4作为比较早期的版本,对₹(印度卢比)这类相对特殊的货币符号支持不足,显示方块通常是字体不包含该字符或者编码配置问题导致的,下面是几个经过验证的解决方法:

方法1:指定支持₹符号的字体

Mpdf默认字体可能没有包含₹字符,你可以直接切换到支持广字符集的字体,比如DejaVu Sans或者Arial Unicode MS:

// 在CodeIgniter的PDF生成逻辑里初始化Mpdf时指定字体
$mpdf = new mPDF('utf-8', 'A4');
// 设置默认字体为DejaVu Sans(Mpdf通常自带这个字体)
$mpdf->SetFont('dejavusans', '', 12);
// 或者使用Arial Unicode MS(需确保服务器上有该字体文件)
// $mpdf->SetFont('arialuni', '', 12);

如果使用Arial Unicode MS,要确认字体文件已经放在Mpdf的fonts目录下,或者在服务器系统字体库中存在。

方法2:使用HTML实体替代₹符号

在你要渲染的HTML内容里,直接用₹对应的HTML实体₹或者₹代替原符号,Mpdf解析HTML时会自动渲染正确的符号,这个方法不需要修改字体配置,非常实用:

<!-- 原内容 -->
<p>总金额:₹5000</p>
<!-- 修改后 -->
<p>总金额:&#8377;5000</p>

方法3:确保UTF-8编码配置正确

字符编码不匹配也可能导致符号显示异常,你需要确认两处配置:

  1. CodeIgniter配置文件application/config/config.php中设置字符集为UTF-8:
    $config['charset'] = 'UTF-8';
    
  2. 初始化Mpdf时明确指定UTF-8编码:
    $mpdf = new mPDF('utf-8', 'A4');
    

方法4:手动添加自定义字体(进阶)

如果上面的方法都不行,你可以下载一个包含₹符号的TTF字体(比如Google Fonts里的Noto Sans),放到Mpdf的fonts目录下,然后动态注册并使用:

// 添加自定义字体
$mpdf->AddFont('NotoSans', '', 'NotoSans-Regular.ttf');
// 设置为当前字体
$mpdf->SetFont('NotoSans');

优先试试方法1和方法2,这两个在Mpdf 5.7.4版本中解决₹符号问题的成功率最高,毕竟旧版本对新字符的原生支持确实有限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 11:23:20