FPDF PHP - 第二页中的行无法正常工作

时间:2016-08-11 06:33:39

标签: php fpdf

以下是我的代码,打印“HELLO”,然后是虚线。这件事重复了50次。一切都很好,但第二页开始时,虚线消失了。此代码需要进行哪些修改?

   <?php

    require("fpdf.php");

    class PDF extends FPDF
    {   
        function SetDash($black=null, $white=null)
        {
            if($black!==null)
                $s=sprintf('[%.3F %.3F] 0 d',$black*$this->k,$white*$this->k);
            else
                $s='[] 0 d';
            $this->_out($s);
        }
    }

    $pdf = new PDF('P', 'mm', 'A4');
    $pdf->AliasNbPages();
    $pdf->AddPage();
    $margin = 0;

    $pdf->SetFont('Arial','B',12);

    for ($i = 0; $i < 50; $i++)
    {
        $pdf->Cell(90, 10, "Hello", 0, 1);
        $pdf->SetDrawColor(0,0,0);
        $pdf->SetDash(2,2); 
        $margin = $margin + 10;
        $pdf->Line(10,$margin,200,$margin);
    }

    $pdf->Output();

    ?>

1 个答案:

答案 0 :(得分:1)

即使在循环中间发生分页符,您也会在每行之后将$margin变量的值递增10。因此,第二页上第一行的上边距将比第一页上最后一行的上边距大10毫米。

添加新页面时需要重置边距。

此问题的解决方案是覆盖FPDF的AcceptPageBreak方法。当达到页面底部时,此方法拦截添加新页面。

class PDF extends FPDF
{
    var $lineY = 0;

    // ...

    function AcceptPageBreak()
    {
        $this->lineY = 0;
        return parent::AcceptPageBreak();
    }
}

然后,在你的循环中,你可以这样做:

$pdf->Line(10, $pdf->lineY, 200, $pdf->lineY);