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 代码提取到一个单独的函数中。