2011-09-26 61 views
0

我爲自己製作了這個簡單的類,用於通過行將文本繪製到特定頁面中。這是它的外觀:Zend PDF問題

class pdf { 
    public $path; 
    private $pdf; 
    private $page; 
    private $font; 
    private $visibleLineYValue = 600; 


    public function __construct() { 
     require_once './Zend/Pdf.php'; 
    } 

    public function loader($page) { 
     $this->pdf = Zend_Pdf::load($this->path); 

     $this->page = $this->pdf->pages[$page]; 
    } 

    public function fontSetter($size) { 
     $this->font = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_TIMES_BOLD); 
     $this->page->setFont($this->font, $size); 
    } 

    public function drawVisibleLine($content) { 
     $page->drawText($content, 20, $this->visibleLineYValue); 
     $this->visibleLineYValue - 40; 
    } 

    public function saver() { 
     $pdf->save('something.pdf'); 
    } 
} 

的問題是,當taht我調用這個類......這樣的:

$pdf = new pdf(); 
    $pdf->path = 'PJ Pracovnepravni.pdf'; 
    $pdf->loader(1); 
    $pdf->fontSetter(13); 
    $pdf->drawVisibleLine('Lorem'); 
    $pdf->drawVisibleLine('Ipsum'); 
    $pdf->drawVisibleLine('Dolor'); 
    $pdf->saver(); 

...它寫入這樣的:

Notice: Undefined variable: page in E:\!localhost\woltersKluwer\classes\pdf.php on line 31 

Fatal error: Call to a member function drawText() on a non-object in E:\!localhost\woltersKluwer\classes\pdf.php on line 31 

如果我正確理解它,這意味着私有變量$頁面沒有定義,但如果我看到它是好的,它是定義。

提前感謝回答

+1

也許這只是一些訓練場地,但通常我認爲在包裝紙上編寫包裝並不意味着很有意義。如果你想爲Zend_Pdf添加更多的功能,你應該擴展Zend_Pdf,而不是在你的類中放置它,這是一種反模式。所以改爲寫'class My_Pdf extends Zend_Pdf'。現在,您可以直接使用$ this獲得Zend_Pdf的所有字段和方法,並且不需要包裝任何東西。 – markus

回答

1

你錯過了在過去的兩年方法$this

public function drawVisibleLine($content) { 
    $this->page->drawText($content, 20, $this->visibleLineYValue); 
    $this->visibleLineYValue - 40; 
} 

public function saver() { 
    $this->pdf->save('something.pdf'); 
} 

沒有這一點,解釋尋找一個本地變量$page