直接用 Composer 安装 tcpdf 包即可:composer require tecnickcom/tcpdf,安装后需引入 autoload 并 use TCPDF;中文需设 dejavusans 等 UTF-8 字体;输出前确保无 BOM、空格或额外输出。

直接用 Composer 安装 tcpdf 包就行
tcpdf 是 PHP 里老牌的 PDF 生成库,不依赖外部二进制(比如 wkhtmltopdf),纯 PHP 实现,适合服务器环境受限或需要稳定部署的场景。Composer 安装非常直接:
composer require tecnickcom/tcpdf安装后会自动下载到
vendor/tecnickcom/tcpdf,并注册自动加载规则,require 'vendor/autoload.php' 后就能用。
实例化时别漏掉命名空间和 require 路径
常见错误是直接 new TCPDF() 报类未找到——因为没引入命名空间,也没确保 autoload 已加载。正确写法是:
require_once __DIR__ . '/vendor/autoload.php'; use TCPDF; $pdf = new TCPDF();
注意两点:
-
TCPDF类本身没有命名空间(老式写法),但必须通过use TCPDF显式声明,否则 PHP 8.2+ 会报Undefined class constant 'TCPDF::DEFAULT_FONT'类似错误 - 如果项目用了 PSR-4 自动加载且自定义了根命名空间,
tecnickcom/tcpdf仍走 Composer 的 classmap 模式,不用额外配置
中文乱码?得换字体 + 设置编码
TCPDF 默认字体不支持中文,直接写中文会显示方块或空白。必须显式设置中文字体路径和编码:
$pdf->setLanguageArray(['a_meta_charset' => 'UTF-8']);
$pdf->setFont('dejavusans', '', 10); // 推荐 dejavusans,自带 UTF-8 支持
// 或者用你自己的 ttf 文件:
// $pdf->addTTFfont(__DIR__.'/fonts/simhei.ttf', 'TrueTypeUnicode', '', 32);
// $pdf->setFont('simhei', '', 12);
关键点:
-
dejavusans是官方内置字体,开箱即用,无需额外文件;simhei这类 Windows 字体需手动添加并调用addTTFfont() -
setLanguageArray()不是万能的,它只影响元信息,真正起作用的是setFont()的字体选择 - 如果用
writeHTML()渲染 HTML,记得把中文内容用中文包裹,否则样式可能失效
生成 PDF 后输出失败?检查 headers 和缓冲区
常见现象:浏览器空白页、PDF 下载失败、提示“Failed to load PDF document”。多数是输出前有空格、BOM 或 echo 干扰了二进制流。务必确保:
- PHP 文件保存为 UTF-8 无 BOM 格式(尤其 Windows 编辑器容易偷偷加 BOM)
- 在
$pdf->Output()前没有任何echo、var_dump、空行或 HTML 输出 - 使用
$pdf->Output('report.pdf', 'D')强制下载;若想内嵌浏览器预览,改用'I',但要确认浏览器支持 PDF MIME 类型 - 如果用了框架(如 Laravel),别在控制器里直接调
Output(),应返回Response::make($pdf->Output('report.pdf', 'S'), 200),避免框架中间件干扰 header
最稳妥的调试方式:先用 'S' 模式获取 PDF 二进制字符串,用 file_put_contents('debug.pdf', $pdf->Output('x.pdf', 'S')) 写到磁盘,确认文件可正常打开再处理输出逻辑。










