2016-08-11 4 views
0

Ниже приведен мой код, который печатает «HELLO», а затем пунктирную линию. Эта вещь повторяется 50 раз. Все работает нормально, но когда начинается вторая страница, исчезают пунктирные линии. Какая модификация требуется в этом коде?FPDF PHP - строка не работает должным образом на второй странице

<?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

Вы приращение значения вашего переменной $margin на 10 после каждой строки, даже если разрыв страницы происходит в середине цикла. Таким образом, верхний край первой строки на второй странице будет на 10 миллиметров больше верхнего края последней строки на первой странице.

Нужно сбросить маржу при добавлении новой страницы.

Решение этой проблемы заключается в переопределении метода AcceptPageBreak FPDF. Этот метод перехватывает добавление новой страницы при достижении нижней части страницы.

class PDF extends FPDF 
{ 
    var $lineY = 0; 

    // ... 

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

Затем в цикле, вы можете сделать:

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