如何用PHP项目生成PDF文档?从入门到实战的完整指南
📖 目录导读
- 为什么选择PHP生成PDF? 技术选型与场景分析
- 主流工具库对比:TCPDF、FPDF、Dompdf、mpdf
- 环境配置与安装(Composer全流程)
- 实战:从零生成一份PDF(含代码示例)
- 高级技巧:中文支持、模板合并、动态数据填充
- 常见问题问答(Q&A)
- SEO优化建议可见性的关键
为什么选择PHP生成PDF?
在Web开发中,PDF文档生成是高频需求:发票、报告、电子书、合同等,PHP后端生成PDF相比前端截屏方案有三大优势:无需用户安装插件、对SEO友好(PDF内容可被搜索引擎索引)、支持批量自动化,尤其适合电商系统和企业管理系统。

陷阱提示:若直接让浏览器打印网页,会出现分页错乱、样式丢失问题,专业库能规避这些。
主流PHP PDF库对比
| 库名 | 特性优势 | 适用场景 |
|---|---|---|
| TCPDF | 原生PHP实现、无外部依赖 | 复杂排版、二维码 |
| FPDF | 轻量、内存占用低 | 简单发票、小项目 |
| Dompdf | 支持HTML转PDF(CSS2.1) | 快速将网页样式“打印” |
| mpdf | 支持复杂CSS和UTF-8 | 中文文档、电子书 |
推荐:如果需要中文显示和CSS美化,首选 mpdf;若追求原始控制力,选 TCPDF。
环境配置与安装(以mpdf为例)
# 使用Composer安装(前提:PHP 7.4+) composer require mpdf/mpdf
安装后验证:
在PHP文件中打印 require 'vendor/autoload.php'; 无错误即成功。
注意:Linux服务器需确保
php-zlib和php-gd扩展已开启。
实战:生成一份带表格和图片的PDF
代码示例
<?php
require 'vendor/autoload.php';
use Mpdf\Mpdf;
$mpdf = new Mpdf(); // 默认A4纵向
// 写入HTML内容(支持内联CSS)
$html = '
<h1 style="color:blue;">月度销售报告</h1>
<table border="1" width="100%">
<tr><th>产品</th><th>销量</th></tr>
<tr><td>PHP教程</td><td>500本</td></tr>
<tr><td>JavaScript指南</td><td>320本</td></tr>
</table>
<img src="logo.png" width="150px" />
';
$mpdf->WriteHTML($html);
$mpdf->Output('report.pdf', 'I'); // 'I'为浏览器预览,'D'为下载
效果:生成的PDF完美保留表格样式,图片自动嵌入。
高级技巧:中文支持与模板合并
✅ 解决中文乱码
// mpdf自动支持UTF-8,需添加中文字体
$mpdf = new Mpdf(['default_font' => 'dejavusans']);
$mpdf->WriteHTML('<p>中文测试 ✓</p>');
原理:mpdf内置了CJK字体,只需设置默认字体即可。
✅ 合并多个PDF文件
// 使用SetSourceFile和ImportPage
$pageCount = $mpdf->SetSourceFile('template.pdf');
for ($i=1; $i<=$pageCount; $i++) {
$tpl = $mpdf->ImportPage($i);
$mpdf->UseTemplate($tpl);
$mpdf->AddPage();
}
✅ 动态填充数据(如发票)
$invoiceData = ['客户' => '张三', '金额' => 1500];
$html = file_get_contents('invoice_template.html');
foreach ($invoiceData as $key => $val) {
$html = str_replace("{{$key}}", $val, $html);
}
$mpdf->WriteHTML($html);
常见问题问答(Q&A)
Q1:生成的PDF文件太大怎么办?
A:开启压缩功能,并优化图片。
$mpdf = new Mpdf(['mode' => 'c', 'compress' => 1]); // 图片提前压缩为JPEG 70%质量
Q2:表格在翻页时被切断?
A:在表格外添加CSS:page-break-inside: avoid; 避免跨页断开。
<table style="page-break-inside: avoid;">...</table>
Q3:如何让PDF支持超链接?
A:用HTML标签 <a href="https://example.com">链接</a> 即可,mpdf自动保留。
Q4:报错“Class Mpdf not found”?
A:确认 require 'vendor/autoload.php' 路径正确,并运行 composer dump-autoload 清理缓存。
SEO优化建议:让这篇指南被搜索引擎喜欢
包含核心关键词**:如“PHP生成PDF”、“PHP PDF库对比”。
- 短URL:使用
yourdomain.com/php-generate-pdf结构。 - 内链:指向其他PHP教程页面(如PHP字符串处理)。
- 外链:引用mpdf官方文档(可替换为
documentation-placeholder)。 - 代码可复制:所有代码块使用
php...格式,便于SEO爬虫识别代码内容。 - 时效性:定期更新库版本号(当前mpdf v8.2)。
提示:为PDF文档本身添加元数据(标题、作者)会提升搜索引擎索引质量:
$mpdf->SetTitle('月度报告'); $mpdf->SetAuthor('技术部');
从安装到实战,您已掌握用PHP快速生成PDF文档的核心能力,无论是中文报告还是复杂表格,选择mpdf 都能胜任,建议先从最小可行性代码开始,逐步加入样式和动态数据,遇到问题时,优先检查PHP扩展和字体配置,现在您就可以在项目根目录创建 generate_pdf.php 文件,运行“实战”部分代码,生成您的第一份PDF!
最后提醒:若使用共享主机或低版本PHP(低于7.4),建议选择FPDF库作为替代。