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

使用FPDF生成PDF时无法正常显示卢比符号的技术问询

解决FPDF中添加印度卢比符号的问题

哦,这个问题我之前碰过好多次!FPDF默认自带的字体(比如Helvetica、Arial)都是ANSI编码的,对Unicode特殊字符的支持很差,印度卢比符号(₹)刚好就是这类Unicode字符,直接写进代码里自然会显示乱码或者完全不显示。咱们来一步步解决:

核心解决方案:使用支持Unicode的字体

FPDF要显示特殊Unicode字符,必须加载支持它们的TrueType字体。推荐用DejaVu Sans(免费开源,支持几乎所有常用Unicode字符),步骤如下:

  1. 准备字体文件
    下载DejaVu Sans的TTF字体文件(可自行搜索获取免费资源)。

  2. 转换为FPDF兼容格式
    FPDF自带一个makefont.php工具,用它把TTF文件转换成FPDF能识别的格式:

    php makefont.php DejaVuSans.ttf
    

    执行后会生成两个文件:DejaVuSans.php和DejaVuSans.z,把这两个文件放到FPDF目录下的fonts文件夹里。

  3. 修改你的代码
    在输出卢比符号之前,先加载并切换到这个字体:

    // 加载自定义字体(放在Cell调用之前)
    $this->AddFont('DejaVuSans', '', 'DejaVuSans.php');
    // 设置字体、样式、字号
    $this->SetFont('DejaVuSans', '', 12);
    // 现在输出卢比符号就正常了
    $this->Cell(530, 10, "(Figures In ₹)", 0, 0, 'R');
    

替代小技巧(紧急情况用)

如果暂时没法加载自定义字体,也可以尝试用卢比符号的UTF-8字节序列代替直接写符号:

$this->Cell(530, 10, "(Figures In ".chr(0xe2).chr(0x82).chr(0xb9).")", 0, 0, 'R');

不过这个方法的前提是当前使用的字体支持卢比符号,不然还是会乱码,所以优先推荐上面的自定义字体方案。

为什么你的原代码失效?

你代码里的鈧�是乱码,本质是因为默认字体没有卢比符号的字形,FPDF无法渲染,就显示成了占位乱码。只有切换到包含该符号的字体,才能正常显示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:20:13