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字体,无需转换字体:
- 下载tFPDF替换原FPDF
- 直接加载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
相关产品推荐
相关产品推荐

