MySQL / FPDF:如何限制PDF中每一页的数据
MySQL / FPDF: How to limit the data by each page in PDF
我目前创建了一个系统,可以生成从 MySQL 到 PDF 的报告。我使用 FPDF 库。
现在我想在每个页面上按限制显示数据。比如我有100行数据,我想这样显示:
1) 第一个PDF页面只会显示8个数据
2) 而其他页面会显示10条数据
谁能帮帮我?
<?php
require('mem_image.php');
require_once "../../config/config.php";
require_once "../../config/check.php";
$email = $_SESSION['login_user'];
$team = $_SESSION['team'];
$pdf = new PDF_MemImage();
$pdf->AddPage();
$pdf->Cell(10,7,'',0,1);
$pdf->SetFont('Arial','B',12);
$pdf->Cell(0,10,'Project Team Overtime Report',1,1,"C");
$pdf->SetFont('Arial','',10);
$pdf->Cell(20,10,'Team:',1,0);
$pdf->SetFont('Arial','B',11);
$user2 = mysqli_query($conn, "SELECT * FROM users WHERE email = '$email'");
while ($row = mysqli_fetch_array($user2)){
$pdf->Cell(170,10,$row['fullname'],1,1);
}
$pdf->SetFont('Arial','',10);
$pdf->Cell(0,10,'Workers Name:',1,1,"C");
$pdf->SetFont('Arial','B',10);
$pdf->Cell(20,7,'Badge ID',1,0);
$pdf->Cell(170,7,'Fullname',1,1);
$pdf->SetFont('Arial','',10);
$user = mysqli_query($conn, "SELECT * FROM users INNER JOIN team on users.team_id = team.team_id WHERE users.team_id = '$team' AND (users.roles_id = 3 OR users.roles_id = 4)");
while ($row = mysqli_fetch_array($user)){
$pdf->Cell(20,7,$row['badgeid'],1,0);
$pdf->Cell(170,7,$row['fullname'],1,1);
}
$pdf->SetFont('Arial','B',10);
$user3 = mysqli_query($conn, "SELECT * FROM report LEFT JOIN users ON report.badgeid = users.badgeid LEFT JOIN team ON team.team_id = users.team_id
WHERE team.team_id = '$team' AND report_date BETWEEN '".$_GET["from"]."' AND '".$_GET["to"]."' ORDER BY report.report_date DESC");
while ($row = mysqli_fetch_array($user3)){
$pdf->Cell(20,7,'Date:',1,0);
$pdf->Cell(75,7,date('d-m-Y',strtotime($row['report_date'])),1,0);
$pdf->Cell(20,7,'Time:',1,0);
$pdf->Cell(38,7,"From: ".date('H:i',strtotime($row['ot_start'])),1,0);
$pdf->Cell(37,7,"To: ".date('H:i',strtotime($row['ot_end'])),1,1);
$pdf->Cell(95,7,'Before',1,0,'C');
$pdf->Cell(95,7,'After',1,1, 'C');
$logo = file_get_contents('../../images/faces/noimage.png');
// Output it
if(!isset($row['photo_before']) || empty($row['photo_before'])) {
$pdf->Cell(95, 50, $pdf->MemImage($logo, $pdf->GetX()+25, $pdf->GetY()+2, 45,45,), 1, 0, 'C');
}else{
$pdf->Cell(95, 50, $pdf->MemImage(base64_decode($row['photo_before']), $pdf->GetX()+2, $pdf->GetY()+2, 90,45,), 1, 0, 'C');
}
if(!isset($row['photo_after']) || empty($row['photo_after'])) {
$pdf->Cell(95, 50, $pdf->MemImage($logo, $pdf->GetX()+25, $pdf->GetY()+2, 45,45,), 1, 1, 'C');
}else{
$pdf->Cell(95, 50, $pdf->MemImage(base64_decode($row['photo_after']), $pdf->GetX()+2, $pdf->GetY()+2, 90,45,), 1, 1, 'C');
}
if ($row['time_photo_before'] == '0000-00-00 00:00:00'){
$pdf->Cell(95,7,'-',1,1, 'C');
}else{
$pdf->Cell(95,7,$row['time_photo_before'],1,0, 'C');
}
if ($row['time_photo_after'] == '0000-00-00 00:00:00'){
$pdf->Cell(95,7,'-',1,1, 'C');
}else{
$pdf->Cell(95,7,$row['time_photo_after'],1,1, 'C');
}
$pdf->SetFillColor(216,214,214);
$pdf->Cell(0,5,'',1,1,"C", true);
}
$pdf->Output();
?>
您需要在 while
循环中使用一个计数器,因此它的工作方式如下:
$count = 0;
while ($row = mysqli_fetch_array($user3)){
/* put your row rendering code here */
/* ... */
if ((($count - 8) % 10) === 0) {
$pdf->AddPage();
/* put any page headers or footers here */
}
$count++;
}
这样你会在第8行、18行、28行等之后有一个新的页面。
我认为您有一些数据(如 header)需要在每个页面上重复(全名、徽章 ID)- 是吗?请记住,每次添加新页面时都需要再次呈现 header。理想情况下,您可以将页面 header 代码提取到一个单独的函数中。
我目前创建了一个系统,可以生成从 MySQL 到 PDF 的报告。我使用 FPDF 库。 现在我想在每个页面上按限制显示数据。比如我有100行数据,我想这样显示:
1) 第一个PDF页面只会显示8个数据 2) 而其他页面会显示10条数据
谁能帮帮我?
<?php
require('mem_image.php');
require_once "../../config/config.php";
require_once "../../config/check.php";
$email = $_SESSION['login_user'];
$team = $_SESSION['team'];
$pdf = new PDF_MemImage();
$pdf->AddPage();
$pdf->Cell(10,7,'',0,1);
$pdf->SetFont('Arial','B',12);
$pdf->Cell(0,10,'Project Team Overtime Report',1,1,"C");
$pdf->SetFont('Arial','',10);
$pdf->Cell(20,10,'Team:',1,0);
$pdf->SetFont('Arial','B',11);
$user2 = mysqli_query($conn, "SELECT * FROM users WHERE email = '$email'");
while ($row = mysqli_fetch_array($user2)){
$pdf->Cell(170,10,$row['fullname'],1,1);
}
$pdf->SetFont('Arial','',10);
$pdf->Cell(0,10,'Workers Name:',1,1,"C");
$pdf->SetFont('Arial','B',10);
$pdf->Cell(20,7,'Badge ID',1,0);
$pdf->Cell(170,7,'Fullname',1,1);
$pdf->SetFont('Arial','',10);
$user = mysqli_query($conn, "SELECT * FROM users INNER JOIN team on users.team_id = team.team_id WHERE users.team_id = '$team' AND (users.roles_id = 3 OR users.roles_id = 4)");
while ($row = mysqli_fetch_array($user)){
$pdf->Cell(20,7,$row['badgeid'],1,0);
$pdf->Cell(170,7,$row['fullname'],1,1);
}
$pdf->SetFont('Arial','B',10);
$user3 = mysqli_query($conn, "SELECT * FROM report LEFT JOIN users ON report.badgeid = users.badgeid LEFT JOIN team ON team.team_id = users.team_id
WHERE team.team_id = '$team' AND report_date BETWEEN '".$_GET["from"]."' AND '".$_GET["to"]."' ORDER BY report.report_date DESC");
while ($row = mysqli_fetch_array($user3)){
$pdf->Cell(20,7,'Date:',1,0);
$pdf->Cell(75,7,date('d-m-Y',strtotime($row['report_date'])),1,0);
$pdf->Cell(20,7,'Time:',1,0);
$pdf->Cell(38,7,"From: ".date('H:i',strtotime($row['ot_start'])),1,0);
$pdf->Cell(37,7,"To: ".date('H:i',strtotime($row['ot_end'])),1,1);
$pdf->Cell(95,7,'Before',1,0,'C');
$pdf->Cell(95,7,'After',1,1, 'C');
$logo = file_get_contents('../../images/faces/noimage.png');
// Output it
if(!isset($row['photo_before']) || empty($row['photo_before'])) {
$pdf->Cell(95, 50, $pdf->MemImage($logo, $pdf->GetX()+25, $pdf->GetY()+2, 45,45,), 1, 0, 'C');
}else{
$pdf->Cell(95, 50, $pdf->MemImage(base64_decode($row['photo_before']), $pdf->GetX()+2, $pdf->GetY()+2, 90,45,), 1, 0, 'C');
}
if(!isset($row['photo_after']) || empty($row['photo_after'])) {
$pdf->Cell(95, 50, $pdf->MemImage($logo, $pdf->GetX()+25, $pdf->GetY()+2, 45,45,), 1, 1, 'C');
}else{
$pdf->Cell(95, 50, $pdf->MemImage(base64_decode($row['photo_after']), $pdf->GetX()+2, $pdf->GetY()+2, 90,45,), 1, 1, 'C');
}
if ($row['time_photo_before'] == '0000-00-00 00:00:00'){
$pdf->Cell(95,7,'-',1,1, 'C');
}else{
$pdf->Cell(95,7,$row['time_photo_before'],1,0, 'C');
}
if ($row['time_photo_after'] == '0000-00-00 00:00:00'){
$pdf->Cell(95,7,'-',1,1, 'C');
}else{
$pdf->Cell(95,7,$row['time_photo_after'],1,1, 'C');
}
$pdf->SetFillColor(216,214,214);
$pdf->Cell(0,5,'',1,1,"C", true);
}
$pdf->Output();
?>
您需要在 while
循环中使用一个计数器,因此它的工作方式如下:
$count = 0;
while ($row = mysqli_fetch_array($user3)){
/* put your row rendering code here */
/* ... */
if ((($count - 8) % 10) === 0) {
$pdf->AddPage();
/* put any page headers or footers here */
}
$count++;
}
这样你会在第8行、18行、28行等之后有一个新的页面。
我认为您有一些数据(如 header)需要在每个页面上重复(全名、徽章 ID)- 是吗?请记住,每次添加新页面时都需要再次呈现 header。理想情况下,您可以将页面 header 代码提取到一个单独的函数中。