🗣 Wd提问: php分页pdf
🤖 Ai回答: 在 PHP 中实现“分页 PDF”通常指的是:
1、将大量数据(如数据库记录)按页显示为 PDF 文档,每页展示固定数量的记录。
2、生成一个 PDF 文件,其中包含多个页面,每页内容不同(如报表、列表等)。
下面我将为你提供两种常见场景的解决方案:
✅ 场景一:从数据库中读取数据,分页生成 PDF(推荐)
📌 使用 `TCPDF` 或 `FPDF` 库(最常用)
1、安装 TCPDF(推荐)
bash
composer require tecnickcom/tcpdf
2、示例代码:分页生成 PDF 报表
php
<?php
require_once 'vendor/autoload.php';
use TCPDF;
// 数据库连接示例(请替换为你的实际配置)
$host = 'localhost';
$dbname = 'your_db';
$user = 'your_user';
$pass = 'your_pass';
try {
$pdo = new PDO(mysql:host=$host;dbname=$dbname, $user, $pass);
$pdo-setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die(数据库连接失败: 、$e-getMessage());
}
// 每页显示 10 条记录
$recordsPerPage = 10;
$pageNumber = 1;
// 查询总记录数
$stmt = $pdo-prepare(SELECT COUNT(*) as total FROM your_table);
$stmt-execute();
$totalRecords = $stmt-fetchColumn();
// 计算总页数
$totalPages = ceil($totalRecords / $recordsPerPage);
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
// 设置默认字体
$pdf-SetCreator(PDF_CREATOR);
$pdf-SetTitle('分页PDF报表');
$pdf-SetHeaderData('', 0, '', '');
$pdf-setFooterData(array(0,64,0), array(0,64,128));
// 设置页眉和页脚
$pdf-setHeaderFont(array('dejavusans', '', 10));
$pdf-setFooterFont(array('dejavusans', '', 8));
$pdf-AddPage();
// 设置表格样式
$pdf-SetFont('dejavusans', '', 10);
$pdf-SetFillColor(230, 230, 230);
$pdf-SetTextColor(0, 0, 0);
// 开始输出内容
for ($page = 1; $page <= $totalPages; $page++) {
// 重新设置页码(因为TCPDF会自动重置)
$pdf-AddPage();
// 获取当前页数据
$offset = ($page 1) * $recordsPerPage;
$stmt = $pdo-prepare(SELECT * FROM your_table LIMIT :limit OFFSET :offset);
$stmt-bindValue(':limit', $recordsPerPage, PDO::PARAM_INT);
$stmt-bindValue(':offset', $offset, PDO::PARAM_INT);
$stmt-execute();
$rows = $stmt-fetchAll(PDO::FETCH_ASSOC);
// 输出标题
$pdf-SetFont('dejavusans', 'B', 14);
$pdf-Cell(0, 10, 第 {$page} 页 共 {$totalPages} 页, 0, 1, 'C');
$pdf-Ln(5);
// 输出表头
$pdf-SetFont('dejavusans', 'B', 10);
$headers = ['ID', '姓名', '邮箱'];
$w = [30, 50, 70]; // 列宽
for ($i = 0; $i < count($headers); $i++) {
$pdf-Cell($w[$i], 8, $headers[$i], 1, 0, 'C');
}
$pdf-Ln();
// 输出数据行
foreach ($rows as $row) {
$pdf-SetFont('dejavusans', '', 10);
$pdf-Cell($w[0], 8, $row['id'], 1, 0, 'L');
$pdf-Cell($w[1], 8, $row['name'], 1, 0, 'L');
$pdf-Cell($w[2], 8, $row['email'], 1, 1, 'L');
}
// 如果是最后一页,停止循环
if ($page == $totalPages) break;
}
// 输出 PDF
$pdf-Output('分页报表.pdf', 'D'); // 'D' 表示下载,'I' 表示直接在浏览器打开
?
✅ 场景二:动态分页 + 前端分页(适合用户交互)
如果你希望用户点击“下一页”,然后服务器动态生成新页面 PDF,可以:
1、用户点击“下一页” → 传参 `page=2`
2、后端根据参数生成对应页 PDF
php
<?php
// 分页逻辑
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$perPage = 10;
$offset = ($page 1) * $perPage;
// 根据 page 生成对应页 PDF
// 然后使用上面的 TCPDF 逻辑,只生成当前页内容
// 注意:你可能需要多次调用 AddPage() 并控制内容输出
// 只生成当前页的内容
$pdf = new TCPDF(...);
$pdf-AddPage();
// 查询当前页数据
$stmt = $pdo-prepare(SELECT * FROM your_table LIMIT :limit OFFSET :offset);
$stmt-bindValue(':limit', $perPage, PDO::PARAM_INT);
$stmt-bindValue(':offset', $offset, PDO::PARAM_INT);
$stmt-execute();
$rows = $stmt-fetchAll();
// 输出内容...
foreach ($rows as $row) { ..、}
$pdf-Output(第{$page}页.pdf, 'D');
?
✅ 场景三:前端分页 + 后端导出单页 PDF(适用于大文档)
如果你的数据量很大,但用户只需要导出某一页(比如第3页),你可以:
前端请求 `/export/page/3`
后端只生成第3页 PDF
这种方式适合“长报告”或“多章节文档”
🔧 高级技巧
1、添加页码、水印、背景图
php
$pdf-setPrintHeader(false);
$pdf-setPrintFooter(true);
$pdf-setFooterFont(array('dejavusans', '', 8));
$pdf-SetFooterMargin(10);
$pdf-setFooterData(array(0,64,0), array(0,64,128));
2、支持中文(确保字体支持)
php
$pdf-SetFont('simhei', '', 10); // 或者使用 'dejavusans' + Unicode 支持
3、自定义页眉页脚
php
$pdf-setHeaderData('', 0, '公司名称', '部门:财务部');
$pdf-setFooterData(array(0,64,0), array(0,64,128));
❗ 注意事项
TCPDF 不支持 UTF-8 中文?→ 确保字体支持,或使用 `setRTL()` 和 `setAutoPageBreak()` 调整
大量数据生成 PDF 时注意内存消耗,可分批处理或使用流式输出
生产环境建议使用 `TCPDF` 或 `DomPDF`(更现代,支持 HTML)
✅ 替代方案:使用 DomPDF(支持 HTML)
如果你的数据来自 HTML 模板,可以用 DomPDF:
bash
composer require barryvdh/dompdf
php
use Dompdf\Dompdf;
$html = '<h1第1页</h1<table<tr<td数据1</td</tr</table';
$dompdf = new Dompdf();
$dompdf-loadHtml($html);
$dompdf-setPaper('A4', 'portrait');
$dompdf-render();
$dompdf-stream(report.pdf);
📚 推荐学习资源
[TCPDF 官方文档](https://tcpdf.org/)
[FPDF 官方文档](http://www.fpdf.org/)
[DomPDF GitHub](https://github.com/dompdf/dompdf)
✅ 总结
| 目标 | 推荐工具 |
| 从数据库分页生成 PDF | TCPDF / FPDF |
| 导出 HTML 内容为 PDF | DomPDF |
| 动态分页(用户点击) | TCPDF + URL 参数控制 |
| 大数据分页 | 分批生成或流式输出 |
如果你有具体需求(比如“从 MySQL 查询 1000 条记录,每页 20 条,生成 PDF”),欢迎贴出详细结构,我可以帮你定制完整代码!
✅ 祝你成功生成漂亮的分页 PDF!📄
📣 商家广告:





0
IP地址: 240.211.83.34
搜索次数: 0
提问时间: 2025-11-04 00:54:01
🛒 域名购买:
w-p.cn
souzhan.com.cn
xuesou.com.cn
822.net.cn
zhanwai.cn
rq.gs
kb.gs
92.gs
jqe.com.cn
souhuai.com.cn
❓️ 热门提问:
ip地址每一位的意义
如何邮箱地址注册
云计算的主要特点是什么?
idc网络
sk机房服务器
idc中心机房的作用
vps主机网
网页开发云服务器
外国租用服务器
租服务器跑模型
豌豆Ai站群搜索引擎系统
🌐 域名评估:
g-y.cn
gikw.cn
uu.qh.cn
cxwz.com
ev.ln.cn
wput.cn
u.fj.cn
yu7.sn.cn
souru.cn
ahaz.cn
⛏ 最新挖掘:
凯里酸汤鱼
贵阳烤脑花
都匀毛尖茶
花溪牛肉粉
贵阳烤生蚝
贵阳烤豆腐
贵阳纸包鱼
贵阳特色菜
🖌 热门作画:
🤝 关于我们:
豌豆Ai
域名
建站
站群
留痕
推广
评估
源码
开发Ai
工具
日记
价格
加盟
广告
流量
留言
联系
🗨 加入群聊:
🔗 友情链接:
站群推广
香港搜尋引擎排名
ai提问
🧰 站长工具:
Ai工具 whois查询 搜索
📢 温馨提示:本站所有问答由Ai自动创作,内容仅供参考,若有误差请用“联系”里面信息通知我们人工修改或删除。
👉 技术支持:本站由豌豆Ai提供技术支持,使用的最新版:《豌豆Ai站群搜索引擎系统 V.25.10.25》搭建本站。