php - MySQL/FPDF : How to limit the data by each page in PDF

标签 php mysql fpdf

我目前创建了一个可以生成从 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 行等之后获得一个新页面。

我认为您有一些数据(如标题)需要在每个页面上重复(全名、徽章 ID) - 是这样吗?请记住,每次添加新页面时都需要再次呈现该标题。理想情况下,您可以将页面标题代码提取到单独的函数中。

关于php - MySQL/FPDF : How to limit the data by each page in PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59171285/

相关文章:

php - 周时间表 : PHP in_array or jQuery plugin

php - 转义多个字符串的好习惯

php - Selenium 。滚动列表时如何获取项目列表?

mysql - 为一行值显示多个列值

php - 未打印 FPDF A4 尺寸

php - FPDF + 关联数组键值列

php - 在 seeInDatabase 中使用逻辑或

mysql - 从高层 View 看 Rails : performing calculations on a model value between view and controller

php - 连接数据库错误类型 : 2002: Permission denied

python - 如何在 fpdf 单元格的 txt 字段中添加新行