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

如何在CodeIgniter框架的TCPDF中添加Jameel Noori Nastaleeq字体?

解决CodeIgniter中TCPDF添加Jameel Noori Nastaleeq字体的问题

我来帮你一步步排查并解决这个问题,你遇到的情况大概率是路径错误或者字体名使用不当导致的,咱们来逐个修正:

1. 确认字体文件与生成必要的字体缓存文件

首先,你已经把Jameel_Noori_Nastaleeq.ttf放到了tcpdf/fonts文件夹,这一步是对的,但TCPDF需要将TTF文件转换为它能识别的格式(生成.php、.z、.ctg.z三个文件),所以必须确保addTTFfont方法能成功生成这些文件。

修正路径问题

你当前的路径/fonts/Jameel_Noori_Nastaleeq.ttf是绝对路径,在CodeIgniter环境下可能不对,建议用框架的常量来拼接正确路径:

// 假设你的TCPDF放在application/libraries/tcpdf目录下
$font_path = APPPATH . 'libraries/tcpdf/fonts/Jameel_Noori_Nastaleeq.ttf';
// 如果TCPDF在system/libraries下,就用BASEPATH
// $font_path = BASEPATH . 'libraries/tcpdf/fonts/Jameel_Noori_Nastaleeq.ttf';

// 执行字体转换,注意捕获返回值
$fontname = $pdf->addTTFfont($font_path, 'TrueTypeUnicode', '', 32);

// 可以打印一下$fontname,看是否返回了正确的字体标识(比如jameel_noori_nastaleeq)
// echo $fontname;

执行这段代码后,去tcpdf/fonts文件夹检查,应该会生成jameel_noori_nastaleeq.php、jameel_noori_nastaleeq.z、jameel_noori_nastaleeq.ctg.z这三个文件,如果没生成,说明fonts文件夹没有写入权限,需要给该目录设置可写权限(比如chmod 755或chmod 777,根据服务器环境调整)。

2. 正确设置字体

你之前直接用'Jameel Noori Nastaleeq'作为字体名是错误的,TCPDF转换后的字体名是小写、空格替换为下划线的格式,也就是addTTFfont返回的$fontname变量,所以必须用这个返回值来设置字体:

// 用返回的$fontname来设置字体,而不是原字体名
$pdf->SetFont($fontname, 'BI', 20);

// 另外,因为Jameel Noori Nastaleeq是从右到左的乌尔都语字体,建议开启RTL模式
$pdf->setRTL(true);

注意:SetFont的最后一个参数不需要传'false',默认就是false,多余的参数可能导致问题。

3. 测试输出

现在可以添加测试文本验证:

$pdf->AddPage();
$pdf->Write(0, '测试乌尔都语文本:میں پاکستان ہوں');
$pdf->Output('test.pdf', 'I');

常见问题排查

  • 如果还是不生效,检查字体文件是否损坏:可以在本地系统安装这个字体,确认能正常显示乌尔都语。
  • 确保TCPDF版本支持TrueTypeUnicode:较新的TCPDF版本都支持,如果你用的是旧版本,建议升级。
  • 路径问题:可以用file_exists($font_path)先判断文件是否存在,避免路径错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:02:23