2014-02-18 43 views
1

我正在編輯一個代碼,該表格用填充了從數據庫調用的數據的表格創建PDF。FPDF表格超出右邊距

該代碼可以完美地在列中打印第一行中指定的參數數據,如圖所示。

Table showed OK

但當DB詢問幾個參數,列超過右邊距極限。你可以在這張圖片中看到。

Table exceeded

我已經看到了這個網站,從具有表和FPDF問題的人每一個崗位,但我不能找到一個出路。

這是我在PDF打印數據的代碼:

 $type = 'application/pdf'; 
     $pdf=new \FPDF('L');//Querformat 
     $name=$arbeitsplatz->getName(); 
     $pdf->AliasNbPages(); 
     $pdf->SetFont('Arial','',10); 
     $pdf->SetTitle('Arbeitsplatzliste'); 
     $pdf->SetAuthor($user_info->getKuerzel()); 
     $pdf->SetCreator('PMA Manager'); 
     $pdf->SetSubject("Arbeitsplatzliste drucken"); 
     $pdf->SetAutoPageBreak(true, 10); 
     $pdf->SetMargins(10, 10, 10); 
     //$pdf->SetTopMargin(20);//in mm 
     $pdf->AddPage(); 

     $cellLength_array=array(); 

     //set initial Y axis position 
     $y_axis = 20; 
     $pdf->SetY($y_axis); 

     if ($pdf->GetY() == $y_axis) 
     { 
      //Kopfzeile(Tabelle header) 
      $pdf->Cell(30,7,"Probe",1,0,'L'); 
      $pdf->Cell(20,7,"Frist",1,0,'L'); 

      //Start to write table 
      foreach($apParamArray as $parameter) 
      { 
       if($bereich==='W' || $bereich==='I'){ 
        $arbeit_para_name=utf8_decode($parameter->getName()).' ['.utf8_decode($parameter->getEinheit()).']'; 
       } 
       else 
       { 
        $arbeit_para_name=utf8_decode($parameter->getNameD()).' ['.utf8_decode($parameter->getEinheit()).']'; 
       } 
       $length=strlen($arbeit_para_name)*2; 
       array_push($cellLength_array,$length); 
       $pdf->Cell($length,7,$arbeit_para_name,1,0,'C'); 

      } 
       $pdf->Ln(7);//mm 
     } 

     //Start to add data 
     foreach($apProbenArray as $probe) 
     { 
      $frist=$probe->getFrist(); 
      $keys=array(); 
      $keys=array_keys($probe->getParameterliste()); 

      if($bereich==='W' || $bereich==='I'){$pma_nr=$probe->getPmaNr();} else{$pma_nr= $probe->getLaborNr();} 
      $pdf->Cell(30,7,$pma_nr,'LRB',0,'L'); 
      $pdf->Cell(20,7,$frist,'LRB',0,'L'); 

      for($j=0;$j<(sizeof($arbeit_para_r_ID_array));$j++) 
      { 
       $breite=$cellLength_array[$j]; 
       $arbeit_parameterID=$arbeit_para_r_ID_array[$j]; 
       if(in_array($arbeit_parameterID , $keys)) 
       { 
        $parameterliste=$probe->getParameterliste(); 
        //print_r($parameterliste); 
        $ergebnis=$parameterliste[$arbeit_parameterID]->getErgebnis(); 
        if($ergebnis!==null) 
         $pdf->Cell($breite,7,utf8_decode($ergebnis),'LRB',0,'C'); 
        else 
         $pdf->Cell($breite,7,'...','LRB',0,'C'); 
       } 
       else 
        $pdf->Cell($breite,7,'','LRB',0,'C'); 
      } 

      $pdf->Ln(7);//mm 
     } 
     //end of writting data 

     //Print and get file 
     $pdf->Output('prints/Arbeitsplatzliste.pdf','F'); 
     $fichier='../web/prints/Arbeitsplatzliste.pdf'; 
     $response = new Response(); 
     $filename='Arbeitsplatzliste.pdf'; 
     $response->setContent(file_get_contents($fichier)); 
     $response->headers->set('Content-Type', $type); 
     $response->headers->set('Content-disposition', 'filename='.$filename); 
     return $response; 

`

我tryed添加一個條件

if ($pdf->GetY() == $y_axis) && ($pdf->GetX() == -10) 
$pdf->AddPage(); 

但沒有奏效。

我的意圖是在所有頁面顯示標題行,但它也不起作用。

我tryed本 - >How to display table header in every page using FPDF library?

這 - >Add sub-headers in all pages with FPDF

+0

使用MultiCell代替Cell http://www.fpdf.org/en/doc/multicell.htm –

+0

我想我已經在使用MultiCell了。因爲它打破每一個新的測試打印線。 行 - >測試| 列 - >要顯示/編輯的參數 – Franco

+0

在第一張圖像中它接收4個參數,所以它正確打印4列。但在第二個圖像中,它爲每個測試接收9個參數。在頁邊距結束時,它應該分頁5個靜止列(即使表格格式看起來很奇怪) – Franco

回答

1

我和這使得它最後:

if($pdf->GetX() < 230) 
{ 
$pdf->Cell($length,7,$parameter,1,0,'C',1); 
} 
else 
$pdf->ln(); 

所以當電池陣列到達X軸限制(我選擇了230mm,因爲我在橫向模式下配置了頁面),它會斷線。

爲了顯示每頁中的標題,我嘗試了幾次Header()函數,但沒有奏效。 所以我用GetY()函數做了一個條件,然後當GetY()的值等於新頁面的上邊距時,它會打印標題;如果不是,它將繼續寫入表格數據。

if($pdf->GetY() == 5) 
{ 
$pdf->ln(); 
//Header... 
} 
else 
{ 
//Table data... 
} 

我希望這可以幫助別人。