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>总金额:₹5000</p>
方法3:确保UTF-8编码配置正确
字符编码不匹配也可能导致符号显示异常,你需要确认两处配置:
- CodeIgniter配置文件
application/config/config.php中设置字符集为UTF-8:$config['charset'] = 'UTF-8'; - 初始化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
相关产品推荐
相关产品推荐

