如何在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
相关产品推荐
相关产品推荐

