thinkphp生成pdf主要用tcpdf或mpdf:tcpdf轻量,适合图片转pdf,需注意路径校验、尺寸适配与居中排版;mpdf对html/css兼容更好,适合富文本,需配置中文字体、内联css并设可写临时目录。

ThinkPHP 生成 PDF 主要靠集成第三方类库,最常用的是 TCPDF 和 mPDF。两者都支持中文、图片、HTML 渲染,但配置和使用细节不同。选哪个取决于你的需求:TCPDF 更轻量、适合纯图片转 PDF;mPDF 对 HTML/CSS 兼容性更好,适合富文本或带样式的报表。
用 TCPDF 把多张图片转成 PDF
适合做图册、证件照合集、扫描件归档等场景。关键点是路径校验、尺寸适配和居中排版:
- 先用 Composer 安装:
composer require tecnickcom/tcpdf - 确保每张图片真实存在,用
file_exists()检查,避免运行时报错中断 - A4 尺寸为 210×297 mm,预留边距后可用区域约 190×277 mm;按比例缩放图片,防止变形
- 每张图单独一页,用
$pdf->AddPage()控制分页,$x = (210 - $pdfWidth) / 2实现水平居中 - 禁用页眉页脚:
$pdf->setPrintHeader(false); $pdf->setPrintFooter(false);
用 mPDF 渲染 HTML 内容生成 PDF
适合导出订单详情、文章预览、动态报表等含文字+样式的内容。中文支持必须显式配置:
- 安装命令:
composer require mpdf/mpdf - 必须指定中文字体路径(如
public/fonts/)和字体数据(推荐 Noto Sans CJK SC),不能只设default_font - 临时目录
tempDir要可写,例如设为runtime/mpdf/并赋予 755 权限 - CSS 必须内联,mPDF 不解析外部样式表或
<style></style>块;表格用<table border="1">,避免 Flex/Grid<li>初始化时建议用兼容模式:<code>new \Mpdf(['mode' => 'c', 'format' => [595.28, 841.89]]),比'A4'更稳定 -
中文乱码:TCPDF 需加载
stsongstdlight等中文字体;mPDF 必须注册字体并关闭 CSS 回退链 - 图片不显示:检查图片路径是否为服务器绝对路径(非 URL);HTTP 图片需先下载到本地再传入
-
空白 PDF 或报错:确认 GD 库已启用(
phpinfo()查gd)、内存限制足够(ini_set('memory_limit', '256M')) -
导出失败无提示:在
Output()前加ob_end_clean()清除输出缓冲,避免 header 冲突 - ThinkPHP6 推荐将 PDF 逻辑封装进 Service 层,控制器只负责调用,便于复用和测试
常见问题与避坑提示
很多失败不是代码问题,而是环境或配置疏漏:
简单对比:TCPDF vs mPDF
不需要复杂样式时,TCPDF 启动快、体积小;需要渲染带 CSS 的 HTML 或处理大量中文段落,mPDF 更省心。二者都不依赖外部服务,纯 PHP 实现,部署方便。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











