2012-08-14 34 views
0
require('inc/fpdf.php'); 
require('inc/mem_image.php'); 



class PDF extends FPDF 
{ 
    // Colored table 
    function FancyTable() 
    { 
     $this->SetFont('Helvetica','B'); 
     $this->Cell(27, 4, 'Other Title', 1, 0); 
    } 
} 


$pdf = new PDF_MemImage(); 
//$pdf = new PDF(); 
$pdf->SetFont('Helvetica','',7); 
$pdf->AddPage(); 

$img = file_get_contents('logo.jpg'); 

$pdf->MemImage($img, 50, 30); 
$pdf->Cell(20,10,'Title',1,1,'C'); 

//$pdf->FancyTable(); 
$pdf->Output(); 

我想將mem_image腳本合併到我現有的FPDF頁面中。我正在使用名爲fancyTable的方法來設置我的表格數據/佈局。不幸的是,試圖調用fancyTable打破了頁面(空白)。如果我評論它,它很好。如果我將$ pdf聲明轉換爲新的PDF()而不是新的PDF_memimage()fancyTable,但顯然我的圖像無法加載。我認爲它可能只是與課堂衝突,但我不熟悉面向對象的語法。FPDF - MemImage問題 - OO語法

回答

1

對此的解決方案實際上非常簡單:您已經擴展了錯誤的類。

所有你需要做的,解決它是改變這種:

class PDF extends FPDF 

...這樣的:

class PDF extends PDF_MemImage 

...然後更改此:

$pdf = new PDF_MemImage(); 

...對此:

$pdf = new PDF(); 

通過擴展FPDF,你已經創建的基礎上,幹線FPDF)繼承樹一個新的分支,而你想要做的是它的基礎上現有的分支PDF_MemImage

爲了記錄,命名您的類PDF可能不是一個好主意 - 首先它不是很具描述性(它並不表示它是從FPDF或MemImage繼承的),其次它非常短並且會冒着風險如果用作較大應用程序的一部分,則會與另一個類發生衝突我個人會稱之爲FPDF_MemImage_FancyTable,YMMV。

此外,在這個時代,確實沒有必要編寫兼容PHP4的類。 (說這話,我其實偶爾也要做到這一點,但我懷疑你做的)

編輯

如果它不是從上面的描述清楚,最終的代碼是這樣的:

require('inc/fpdf.php'); 
require('inc/mem_image.php'); 

class FPDF_MemImage_FancyTable extends PDF_MemImage 
{ 
    // Colored table 
    function FancyTable() 
    { 
     $this->SetFont('Helvetica','B'); 
     $this->Cell(27, 4, 'Other Title', 1, 0); 
    } 
} 

$pdf = new FPDF_MemImage_FancyTable(); 

$pdf->SetFont('Helvetica','',7); 
$pdf->AddPage(); 

$img = file_get_contents('logo.jpg'); 
$pdf->MemImage($img, 50, 30); 

$pdf->Cell(20,10,'Title',1,1,'C'); 

$pdf->FancyTable(); 

$pdf->Output(); 
+0

是的,做到了。我知道這是要麼是Class名稱,要麼是我錯誤的延伸。謝謝你的幫助。 – 2012-08-14 20:20:57