Render PDF di Yii Menggunakan Zend

Posted on October 30, 2009

4


Pengantar

Yii adalah salah satu framework di PHP yang extensible. Tulisan ini akan membahas salah satu contoh integrasi 3rd party libraries di Yii dengan menggunakan Zend.

Software yang Diperlukan

Untuk mengikuti tulisan ini, ambil Zend Framework minimal di http://framework.zend.com/download/current/. Untuk tulisan ini, saya menggunakan versi 1.9.5. Ekstrak ZendFramework-1.9.5-minimal.tar.gz berikut:

$ tar -xzvf ZendFramework-1.9.5-minimal.tar.gz

Hasilnya adalah sebagai berikut:

[bpdp@bpdp-arch software]$ cd ZendFramework-1.9.5-minimal/
[bpdp@bpdp-arch ZendFramework-1.9.5-minimal]$ ls -la
total 32
drwxr-xr-x 4 bpdp users 4096 2009-10-27 00:19 .
drwxr-xr-x 7 bpdp users 4096 2009-10-30 11:19 ..
-rw-r--r-- 1 bpdp users 3438 2009-10-26 20:33 INSTALL.txt
-rw-r--r-- 1 bpdp users 1547 2009-10-26 20:33 LICENSE.txt
-rw-r--r-- 1 bpdp users 6496 2009-10-27 00:19 README.txt
drwxr-xr-x 2 bpdp users 4096 2009-10-26 20:39 bin
drwxr-xr-x 3 bpdp users 4096 2009-10-26 20:38 library
[bpdp@bpdp-arch ZendFramework-1.9.5-minimal]$

Copy semua isi directory Zend di library ke aplikasi Yii yang dibuat, diletakkan pada  zax/protected/vendors sehingga menjadi berikut ini (asumsi: aplikasi yang saya buat mempunyai nama zax, mungkin lain dengan milik anda):

[bpdp@bpdp-arch vendors]$ ls -la
total 12
drwxr-xr-x  3 root root 4096 2009-10-30 09:56 .
drwxr-xr-x 12 root root 4096 2009-10-30 08:49 ..
drwxr-xr-x 59 root root 4096 2009-10-30 09:56 Zend
[bpdp@bpdp-arch vendors]$

Untuk me-render dalam bentuk stream PDF menggunakan Zend, tidak perlu mengaktifkan layout dan view di Yii. Yang kita perlukan hanyalah controller. Berikut ini adalah contoh untuk membuat controller dengan nama PdfviewController:

[root@bpdp-arch zax]# protected/yiic shell
Yii Interactive Tool v1.0 (based on Yii v1.0.10)
Please type 'help' for help. Type 'exit' to quit.

>> controller pdfview
 generate PdfviewController.php
 mkdir /opt/web/httpd/htdocs/zax/protected/views/pdfview
 generate index.php

Controller 'pdfview' has been created in the following file:
 /opt/web/httpd/htdocs/zax/protected/controllers/PdfviewController.php

You may access it in the browser using the following URL:
 http://hostname/path/to/index.php?r=pdfview
>> [root@bpdp-arch zax]#

Setelah itu, pada controller, buatlah program

class PdfviewController extends CController
{
  public function actionIndex()
  {
    // Memastikan bahwa Zend di-include-kan
    Yii::import('application.vendors.*');
    require_once('Zend/Pdf.php');

    // Create stream pdf baru
    $pdf1 = new Zend_Pdf();

    // definisi halaman
    $page = new Zend_Pdf_Page(Zend_Pdf_Page::SIZE_A4);

    // definisi font
    $font = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA);

    // apply font
    $page->setFont($font, 36);

    // menuliskan text ke page
    $page->drawText('Hello from Yii', 72, 720);

    // memasukkan page tersebut ke file pdf
    $pdf1->pages[] = $page;

    // mengambil hasil pdf yang di-generate
    $pdfcontents = $pdf1->render();

    // me-render ke browser - jangan lupa setting header untuk Content-Type
    header('Content-Type: application/pdf');
    $this->layout = false;
    $this->renderText($pdfcontents);
  }
  // .... dan seterusnya

Hasilnya (http://server/zax/index.php?r=pdfview) adalah sebagai berikut:

Hasil Render PDF

Hasil Render PDF

Kemana Setelah Ini?

Setelah mengetahui cara membuat stream PDF yang bisa ditampilkan langsung di browser, silahkan membaca manual dari Zend untuk mengetahui berbagai methods dan properties yang berkaitan dengan pembuatan file PDF. Secara spesifik, silahkan melihat ke Programmer’s Reference Guide, khususnya tentang Zend_Pdf (http://framework.zend.com/manual/en/zend.pdf.html).

Tagged: ,