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

时间:2019-09-26 13:56:51

标签: php pdf fpdf

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

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

  

当数据到达位置y = 228时,创建一个新页面   当数据转到下一页时,将显示位置= 112

上的结果

有效。但是,如果当前的multiCell内容很大,则直到完成所有多单元格内容的编写之后,它才会进入下一页,因此我添加了函数SetAutoPageBreak,因此当y = 228时它将插入分页符Break。 问题开始的地方代码没有将我的数据插入到我定义的位置的新页面中(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();

?> 

1 个答案:

答案 0 :(得分:0)

扩展fPDF并添加一个标头功能,该功能可在每次启动新页面时将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);

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