如何在FPDF中动态设置表格行背景色?代码无输出求助
搞定FPDF彩色表格行的问题,顺便解决无输出的bug
嘿,我看你在FPDF里做彩色表格行的时候遇到了无输出的问题,还要实现表头黄色、数据行奇偶交替的效果,咱们一步步来解决:
先说说你原代码的核心问题
你的代码没输出主要是这几个原因:
- 没调用
$pdf->Output():FPDF必须靠这个方法才能生成并输出PDF内容,不然白忙活 $_GET遍历方式不对:$_GET是关联数组,直接用数字索引$_GET[$i]基本取不到有效数据,得用foreach遍历- 表头没换行:表头最后一个
Cell没设置换行参数(最后一个参数设为1),数据行和表头挤在一起,看起来就像没输出 - 没设置填充色:你给
Cell传了True启用填充,但没调用SetFillColor()指定颜色,等于白开了填充开关 - 还有个小提醒:
mysql_*函数早就废弃了,建议换成mysqli或者PDO,不然以后版本会报错
给你写个完整的可运行示例
我把正确的逻辑整理好了,你可以直接参考:
// 先引入FPDF类 require('fpdf.php'); // 初始化PDF实例,添加页面,设置字体 $pdf = new FPDF(); $pdf->AddPage(); $pdf->SetFont('Arial','',12); // 定义需要的颜色:表头黄色,奇数行灰色,偶数行白色 $headerBg = [255, 255, 0]; // 黄色 $oddRowBg = [200, 200, 200]; // 浅灰色 $evenRowBg = [255, 255, 255]; // 白色 // --------------------- 输出表头 --------------------- $pdf->SetFillColor(...$headerBg); // 设置表头填充色 $pdf->Cell(25, 6, 'Date', 0, 0, 'L', true); $pdf->Cell(82, 6, 'Headlines', 0, 0, 'L', true); $pdf->Cell(24, 6, 'Publications', 0, 0, 'L', true); $pdf->Cell(20, 6, 'Edition', 0, 0, 'R', true); $pdf->Cell(20, 6, 'Page no.', 0, 1, 'R', true); // 最后一个参数1表示换行到下一行 // --------------------- 输出数据行 --------------------- // 这里用示例数据模拟,你可以替换成自己的查询结果 $dataList = [ ['2024-05-20', 'PHP 8.3新特性解读', '技术周刊', 'Morning', '12'], ['2024-05-21', 'FPDF进阶技巧', '开发者日报', 'Evening', '8'], ['2024-05-22', '数据库优化指南', '运维月刊', 'Morning', '5'], ['2024-05-23', '前端性能调优', '前端周刊', 'Evening', '3'], ]; foreach ($dataList as $rowIndex => $row) { // 判断奇偶行:rowIndex从0开始,所以第1、3行是奇数行 if (($rowIndex + 1) % 2 === 1) { $pdf->SetFillColor(...$oddRowBg); } else { $pdf->SetFillColor(...$evenRowBg); } // 输出当前行的单元格 $pdf->Cell(25, 6, $row[0], 0, 0, 'L', true); $pdf->Cell(82, 6, $row[1], 0, 0, 'L', true); $pdf->Cell(24, 6, $row[2], 0, 0, 'L', true); $pdf->Cell(20, 6, $row[3], 0, 0, 'R', true); $pdf->Cell(20, 6, $row[4], 0, 1, 'R', true); } // 关键!输出PDF $pdf->Output();
替换成你的业务逻辑的要点
- 把示例里的
$dataList换成你从数据库查询到的结果,注意如果用mysqli的话,用mysqli_fetch_array()循环取数据 - 如果你要处理
$_GET的参数,改成foreach($_GET as $paramValue),然后做非空和数字判断 - 确保每个行的最后一个
Cell都设置了0,1,...来换行,不然所有内容都会挤在一行里
这样改完之后,就能正常输出带彩色行的PDF表格啦~
内容的提问来源于stack exchange,提问作者HoldonPhp
相关产品推荐
相关产品推荐

