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

FPDF中Simhei字体转PostScript后中文显示乱码问题求助

解决FPDF中Simhei字体中文乱码问题

一、重新规范字体转换流程

乱码大概率是MakeFont转换时的参数或文件问题,按以下步骤重新操作:

  • 使用未修改的原始Simhei.ttf字体文件(直接从系统字体目录复制,避免文件损坏)
  • 打开FPDF的MakeFont工具,编码选项选择GB2312(不要用默认的Latin1),生成simhei.php和simhei.z两个文件
  • 将这两个文件放到FPDF安装目录的font子文件夹中,确保路径正确

二、修正代码中的编码匹配问题

PDF_Chinese类基于GB2312编码工作,必须保证代码与文本编码一致:

  • 若你的PHP文件是UTF-8编码,输出中文前必须转码为GB2312,否则会出现乱码
  • 修正后的代码示例:
$pdf2 = new PDF_Chinese('P', 'cm', 'Letter');
$pdf2->AliasNbPages();
$pdf2->AddGBFont('simhei','黑体');
$pdf2->AddGBFont('simkai','楷体_GB2312');

$pdf2->AddPage();

$pdf2->SetCompression(false);
$pdf2->SetAutoPageBreak(1,3);
$pdf2->SetDrawColor(200,200,200);

$pdf2->SetFont('simhei','',20.5);
// 将UTF-8中文转码为GB2312,忽略无法转换的字符
$chineseText = iconv('UTF-8', 'GB2312//IGNORE', 'Black Bomb 目录批发价格 (批发)');
$pdf2->Cell(0,1,$chineseText,0,0,'C');
$pdf2->SetFont('Arial','',7);
  • 若PHP文件本身就是GB2312编码,可直接写中文,无需转码

三、更省心的替代方案:改用tFPDF

原生FPDF的中文支持繁琐,tFPDF是扩展版本,直接支持UTF-8和TrueType字体,无需转换字体:

  1. 下载tFPDF替换原FPDF
  2. 直接加载Simhei.ttf字体,示例代码:
require('tfpdf.php');
$pdf = new tFPDF();
$pdf->AddPage();
// 加载Simhei字体,指定UTF-8编码
$pdf->AddFont('Simhei','','simhei.ttf',true);
$pdf->SetFont('Simhei','',20.5);
// 直接输出UTF-8中文
$pdf->Cell(0,1,'Black Bomb 目录批发价格 (批发)',0,0,'C');
$pdf->Output();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 01:44:59