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

使用FPDF写入中文字体失败的技术求助

解决FPDF/FPDI写入中文显示异常的问题

核心原因

原生FPDF默认仅支持ISO-8859-1编码,对中文UTF-8字符兼容性差;同时直接使用系统字体文件而非FPDF专用字体格式,会导致字符无法正确渲染。

解决步骤

1. 安装支持UTF-8的FPDF分支

通过Composer安装兼容UTF-8的FPDI扩展包,替代原生FPDF:

composer require setasign/fpdi-fpdf-utf8

2. 生成FPDF兼容的中文字体文件

FPDF无法直接识别系统TTF字体,需将TTF文件转换为FPDF专用的.php和.z格式:

  • 下载目标中文字体的TTF文件(如微软雅黑msyh.ttf、宋体simsun.ttf)
  • 下载FPDF官方的makefont.php工具,将TTF文件与该工具放在同一目录
  • 访问makefont.php页面,选择TTF文件,编码选择UTF-8,点击生成得到对应字体文件
  • 将生成的.php和.z文件放入项目的fonts目录(无则新建)

3. 修改代码实现正确渲染

替换原有代码,确保字体引入、编码设置正确:

<?php
use setasign\Fpdi\Fpdi;

require_once('vendor/autoload.php');

$pdf = new Fpdi();

$pdf->AddPage();
$pdf->setSourceFile("src/registration-form.pdf");
$tplId = $pdf->importPage(1);
$pdf->useTemplate($tplId, 10, 10, 200);

// 引入生成好的中文字体,第四个参数true指定UTF-8编码
$pdf->AddFont('msyh', '', __DIR__ . '/fonts/msyh.php', true);

$pdf->SetFont('msyh', '', 10);
$pdf->SetTextColor(255, 0, 0);
$pdf->SetXY(50, 59);
// 确保字符串为UTF-8编码(PHP文件需保存为UTF-8无BOM格式)
$pdf->Write(0, '林夕夕');

$pdf->Output();

关键注意事项

  • PHP文件必须保存为UTF-8无BOM格式,避免字符串编码混乱
  • 优先选择常用中文字体(微软雅黑、宋体等),避免使用兼容性差的"通用编码字体"
  • 若字体文件未放在FPDF默认字体目录,需在AddFont中指定完整路径

内容的提问来源于stack exchange,提问作者Ahsan Zameer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 10:57:41