2016-10-04 11 views
2

私はこの種のpdfを生成しようとしています。最初のページではすべて問題ありません。FPDFでSetXY()を使用してセルを新しいページで開始するPHP

enter image description here

しかし、改ページIループもっとして23回、それは新しいページにCell()開始を探します。

enter image description here

は、私が最初のページのように表示するには、このセルを()します。ここで

は私のコードです:

class PDF extends FPDF { 
    public $hPosX; 
    public $hPosY; 
    function FancyTable() { 
     $this->SetFillColor(255,0,0); 
     $this->SetTextColor(255,0,0); 
     $this->SetDrawColor(128,0,0); 
     $this->SetLineWidth(.3); 
     $this->SetFont('','B'); 

     $this->headerTable(); 
    } 

    public function headerTable(){ 
     $this->hPosX = 15; 
     $this->hPosY = 3; 
     $this->SetFillColor(255,0,0); 
     $this->SetTextColor(255); 
     $this->SetDrawColor(128,0,0); 
     $this->SetLineWidth(.3); 
     $this->SetFont('','B'); 
     for($i=0; $i<30;$i++){ 
      if($this->GetX() > 160){ 
       $this->hPosX = 15; 
       $this->hPosY += 35; 
      } 

      $this->SetXY($this->hPosX,$this->hPosY); 
      $this->Cell(50,5,'Header'.$i,1,0,'L',true); 

      $this->hPosX += 55; 
     } 
    } 
} 




$pdf = new PDF(); 
$pdf->SetTopMargin(10); 
$pdf->SetFont('Arial','',14); 
$pdf->AddPage(); 
$pdf->FancyTable(); 
$pdf->Output(); 

どれソリューションが高く評価されます。

答えて

0

解決済み。 GetY()が現在のページよりも大きい場合はページ区切りを停止し、新しいページを追加し、hPosY変数をデフォルト値にリセットする必要がありました。

GetX()が160より大きいかどうかをチェックして、hPosXをデフォルト値にリセットして、最後の要素がページに適合し、新しいページで正しく開始するようにしました。ここ

は修正方法 'headerTable()' のコードである:

public function headerTable(){ 
$this->hPosX = 15; 
$this->hPosY = 3; 
$this->SetFillColor(255,0,0); 
$this->SetTextColor(255); 
$this->SetDrawColor(128,0,0); 
$this->SetLineWidth(.3); 
$this->SetFont('','B'); 
for($i=0; $i<30;$i++){ 
if($this->GetX() > 160){ 
$this->hPosX = 15; 
$this->hPosY += 35; 
} 

$this->SetXY($this->hPosX,$this->hPosY); 
$this->Cell(50,5,'Header'.$i,1,0,'L',true); 

$this->hPosX += 55; 

if($this->GetY() > 240 && $this->GetX() > 160){ 
$this->SetAutoPageBreak(false); 
$this->AddPage(); 
$this->hPosX = 15; 
$this->hPosY = 3; 
} 
} 

} 
関連する問題