Wednesday, March 30, 2011

剛認識 Zend_Pdf

跟大多數的人需求一樣,就是輸出一個簡單的報表資訊。但是亂抓亂玩其實都是可以 WORK 的,唯獨一些中文問題會讓人比較頭大。以下是採用 Zend Framework 所提供的 Zend_Pdf 物件做處理。

目的

使用者點選某個特定按鈕之後,觸發 JavaScript 並且替使用者發出 AJAX 請求,這部分可能就是 Select 一些 Table 或是 Trigger 一些 SQL 等資訊整併回傳,但是都藉由某個 Action 來做回傳處理,最終是希望輸出一份特定報表。

資源

Bootstrap.php 很簡單的就打入以下初始化設定
/**
     * 報表工具
     */
 protected function _initPDF(){
     $pdf = new Bill_PDF();
     return $pdf;
    }

利用 PDF 報表工具

簡易說明利用那些 Zend 內建的物件

class Bill_PDF
{
    protected $_pdf;

    public function init(){
        // 路徑會以 Public 為頭
        $this->_pdf = Zend_Pdf::load('Template.pdf');
        // PDF 文件屬性
        $this->_pdf->properties['Title'] =  '你可以輸入任何資訊';
        // 載入中文字型(仿宋或是標楷體皆可)
        $font = Zend_Pdf_Font::fontWithPath('c:/windows/fonts/SIMFANG.TTF', Zend_Pdf_Font::EMBED_DONT_EMBED);
        $this->_pdf->pages[0]->setFont($font, 12);
        $this->_pdf->pages[0]->drawText('內容擺設', 170, 750, 'UTF-8');
        // 存成新的 PDF 檔案
        $this->_pdf->save($this->_output.'.pdf');
    }
}

使用 PDF 工具

$pdf = $this->getInvokeArg('bootstrap')->getResource('PDF')->init();

目前遭遇問題

1. 檔案不是每個 PDF 閱讀器都可以正確看到中文字,有的呈現空白有的是O符號。
2. 字型的部分想採用新細明體,但是會找不到系統字型
3. 之後程式要丟到單位的 Linux 伺服器,感覺中文字似乎會是個 Bug。

No comments:

Post a Comment