使用 SetAutoPageBreak 分页后的 FPDF 多单元格值未插入定义的 Y 位置

FPDF after page break using SetAutoPageBreak multicell values are not inserted in the defined Y position

我正在尝试使用 multiCell 显示数据。当页面中的数据到达 y=228 时,我希望它转到下一页并显示在 y=112.

的位置

作为第一步,我尝试只添加 2 个简单条件:

when the data arrives to position y=228 create a new page when the data goes to the next Page display the result at position =112

成功了。但是如果当前的多单元格内容很大,它不会转到下一页,直到它完成所有多单元格内容的写入,所以我添加了函数 SetAutoPageBreak 所以它在 y=228 时插入一个分页符。 问题从这里开始代码没有将我的数据插入新页面中我定义的位置(y = 112)它插入它开始。我不知道如何解决这个问题我希望我能找到一些帮助我会很感激的。

这是我的代码:

<?php
require ('../fpdf/fpdf.php');

$pdf = new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial', 'B', 12);
$y = $pdf->GetY();
$x = $pdf->GetX();
$width_cell = array(
    10,
    30,
    50
);
$pdf->SetFillColor(193, 229, 252);
$pdf->SetY(112);

$pdf->Cell($width_cell[0], 10, 'ID', 1, 0, C, true);
$pdf->Cell($width_cell[1], 10, 'NAME', 1, 0, C, true);
$pdf->Cell($width_cell[2], 10, 'CLASS', 1, 1, C, true);

$pdf->SetFont('Arial', '', 10);

for ($i = 0;$i < 30; $i++) {
    $pdf->Cell($width_cell[0], 10, $i, 1, 0, C, false);
    $pdf->Cell($width_cell[1], 10, 'John Deo', 1, 0, C, false);
    $pdf->Cell($width_cell[2], 10, 'Four', 1, 1, C, false);
    $y = $pdf->GetY();
    $pdf->Cell($width_cell[0], 10, $i, 1, 0, C, false);
    $pdf->Cell($width_cell[1], 10, 'Y:' . $y, 1, 0, C, false);

    // $pdf->Cell($width_cell[2],10,'Four',1, 1, C, false);
    $pdf->MultiCell($width_cell[2], 10, 'four four four four four four four four four four four four four four four four four four four four four four ', 1, C, false);

    // Uncomment this line to see what Happends when the Page Break is inserted
    // $pdf->SetAutoPageBreak(auto,69);
    $y = $pdf->GetY();
    if ($y > 228 && $i != 29) {
        $pdf->AddPage();
        $pdf->SetY(112);
    }

    /*
    if ($pdf->PageNo() != 1 && $y < 20){


       $pdf->SetY(112);
    }
    */
}
$pdf->Output();

?>

扩展 fPDF 并添加一个 header 函数,该函数在每次开始新页面时将 Y 定位到您想要的位置。

require ('fpdf.php');
class PDF extends FPDF {

    function Header() {

        $this->SetY(112);
    }

}  // end of the PDF class

$pdf = new pdf();
$pdf->AddPage();
$pdf->SetFont('Arial','B',12);
$y=$pdf->GetY();
$x=$pdf->GetX();
$width_cell=array(10,30,50);
$pdf->SetFillColor(193,229,252);
$pdf->SetY(112);

您的其余代码放在此处,您确实想要取消对 AutoPageBreak 行的注释。您还需要将 AutoPageBreak 行更改为

$pdf->SetAutoPageBreak(1,69);

因为第一个参数是一个布尔值,表示是否应该启用它。