Sering kali kita dihadapkan pada waktu membuat aplikasi, kita cukup sering dipusingkan oleh masalah pembuatan laporan. Kenapa pusing karena, satu terkadang bentuk dan formatnya harus sesuai permintaan user yang sering aneh2, dan gak standar meskipun secara teknis itu bisa – bisa saja. Dua, pengaturan dan pembuatan informasi yang akan dijadikan laporan terkadang cukup susah, karena bisa-bisa melakukan query kesana kemari.(hiks.. aku pernah gitu, untungnya tahu kalo ada table yang nampung hasil query ‘soal cerita’ itu ).

Berikut ini aku tuliskan cara membikin laporan dalam format PDF, dengan R&OS library yang terintegrasi dengan CodeIgniter 1.6.3. Kenapa R&OS library yang dipakae, kenapa bukan FPDF atau dompdf, karena R&OS ini sudah memiliki fungsi cukup lengkap, antara lain ada header footer, set margin, page number, set ukuran halaman, dsb. Dan kenapa juga pake CodeIgniter (CI) karena ini merupakan framework PHP yang cukup lengkap, kecil, mudah dimodifikasi dan mudah di integrasi kan dengan library lain.

Di akhir post ini saya attach satu file zip yang berisi kode dari tutorial ini berikut dengan R&OS library. Library ini terdiri dari 2 file, class.ezpdf.php dan class.pdf.php dan diletakan di folder application/library, dan juga library ini memerlukan file-file font untuk bisa berfungsi baik, dan ditempatkan dalam satu folder bernama fonts yang diletakan di root folder file zip ini.

Sebelumnya file class.ezpdf.php saya ubah jadi cezpdf.php agar lebih mudah. Lalu lakukan modifikasi pada statement include di baris 3 menjadi seperti :

include_once(APPPATH.'libraries/class.pdf.php');

Hal ini mencegah PHP tidak bisa menemukan file yang di include, setelah modifikasi selesai, library ini siap digunakan dengan CI.

Pertama mari kita buat fungsi sederhana dulu, fungsi hello_world() di class Tutorial di file tutorial.php di dalam folder controllers.

Hello World

 function hello_world()
{
$this->load->library('cezpdf');

$this->cezpdf->ezText('Hello World', 12, array('justification' => 'center'));
$this->cezpdf->ezSetDy(-10);

$content = 'The quick, brown fox jumps over a lazy dog. DJs flock by when MTV ax quiz prog.
Junk MTV quiz graced by fox whelps. Bawds jog, flick quartz, vex nymphs.';

$this->cezpdf->ezText($content, 10);

$this->cezpdf->ezStream();
}

Kode diatas menghasilkan PDF seperti ini. Kita lihat pertama kali kita lakukan adalah memanggil library untuk digunakan. Fungsi ezText() digunakan untuk membuat judul dokumen. Parameter yang dibutuhkan adalah pertama, string yang akan ditulis, kedua, ukuran text judul, ketiga, adalah array opsi konfigurasi. Setelah judul kita masukan jarak tulisan dengan fungsi ezSetDy(). Setelah itu kita masukan konten tulisan dengan fungsi ezText(). barulah kita gunakan fungsi ezStream() yang akan membuat dokumen dan memunculkan dialog untuk membuka/mendownload dokumen PDF yang sudah di buat.

Membuat Data Tabular.

Ketika berurusan dengan laporan bisnis, adalah baik jika kamu menampilkannya dalam bentuk tabel. Terkadang susah membuat data tabel di PDF namun disini aku coba tuliskan contoh fungsi yang mudah dalam membuat tabel dari variable array.

function tables()
{
$this->load->library('cezpdf');

$db_data[] = array('name' => 'Jon Doe', 'phone' => '111-222-3333', 'email' => 'jdoe@someplace.com');
$db_data[] = array('name' => 'Jane Doe', 'phone' => '222-333-4444', 'email' => 'jane.doe@something.com');
$db_data[] = array('name' => 'Jon Smith', 'phone' => '333-444-5555', 'email' => 'deka@someplacepsecial.com');

$col_names = array(
'name' => 'Name',
'phone' => 'Phone Number',
'email' => 'E-mail Address'
);

$this->cezpdf->ezTable($db_data, $col_names, 'Contact List', array('width'=>550));
$this->cezpdf->ezStream();
}

Kode diatas akan menghasilkan PDF seperti ini. Di kode tersebut saya buat array dengan nama $db_data. Aku buat ini seperti layaknya jika kamu ambil data dari database, jadinya variable array. Dibawahnya saya juga buat array $col_names yang berisi nama field yang terkait dengan data tadi. Variable $col_names ini nantinya akan digunakan sebagai nama field dalam table yang akan dibuat.

Setelah ada variable array untuk data dan nama kolom, kita bisa buat table di PDF dengan memanggil fungsi ezTable(). Di fungsi ini akan mengambil array data , array nama kolom yang terkait, nama table, dan array opsi konfigurasi. Sebenarnya ada beberapa macam opsi konfigurasi yang bisa diset, namun tidak saya tulis disini.

Header and Footer

Kebanyakan laporan di korporat berisi dengan standar header atau footer atau dua – duanya. Itu bisa berisi tanggal/waktu dokumen dibuat, user yang membuat, nomor halaman dan lain2. Dalam R&OS library akan sedikit rumit dalam menambahkan header atau footer, karena akan banyak baris kode untuk membuatnya, oleh karena itu proses membuat header footer dijadikan dalam satu fungsi di bagian helper CI. Sehinga kamu hanya mem-load helpernya dan memanggil nama fungsinya dimanapun kamu butuh menambahkan header footer di PDF.

function prep_pdf($orientation = 'portrait')
{
$CI = & get_instance();

$CI->cezpdf->selectFont(base_url() . '/fonts');

$all = $CI->cezpdf->openObject();
$CI->cezpdf->saveState();
$CI->cezpdf->setStrokeColor(0,0,0,1);
if($orientation == 'portrait') {
$CI->cezpdf->ezSetMargins(50,70,50,50);
$CI->cezpdf->ezStartPageNumbers(500,28,8,'','{PAGENUM}',1);
$CI->cezpdf->line(20,40,578,40);
$CI->cezpdf->addText(50,32,8,'Printed on ' . date('m/d/Y h:i:s a'));
$CI->cezpdf->addText(50,22,8,'CI PDF Tutorial - http://www.google.com');
}
else {
$CI->cezpdf->ezStartPageNumbers(750,28,8,'','{PAGENUM}',1);
$CI->cezpdf->line(20,40,800,40);
$CI->cezpdf->addText(50,32,8,'Printed on '.date('m/d/Y h:i:s a'));
$CI->cezpdf->addText(50,22,8,'CI PDF Tutorial - http://www.google.com');
}
$CI->cezpdf->restoreState();
$CI->cezpdf->closeObject();
$CI->cezpdf->addObject($all,'all');
}

Fungsi diatas fungsi untuk membuat footer di dokumen PDF. Kode diatas bila dipanggil dalam fungsi membuat halaman PDF maka menghasilkan PDF  seperti ini . Pada fungsi diatas, ada fungsi prep_pdf() yang terletak di file pdf_helper.php dalam folder application/helpers. Yang harus dilakukan adalah hanya load helper di controller dan memanggil fungsi yang ada didalamnya.

Format laporan juga bisa landscape selain potrait, jadi di dalam fungsi prep_pdf() sudah ada pilihan untuk itu. Aku tidak akan panjang lebar dalam post kali ini karena bisa dilanjutkan dalam post yang lain. Namun di dalam fungsi2 diatas sudah ada perintah2 untuk memodifikasi PDF yang akan kamu buat, seperti ezStartPageNumbers() , line() dan ezStream() untuk generate dokumen akhir. Jadi kamu bisa membuat laporan sesuai keinginan kamu.

Silahkan mencoba.!
Download : Tutorial Bikin PDF di CI

Wassalam

44 Responses to “Bikin Laporan PDF dengan CodeIgniter”

  1. younan setya says:

    Bagus ato Jelek: Thumb up 1 Thumb down 0

    Thanks dek, You are the best

  2. qorianku says:

    Bagus ato Jelek: Thumb up 0 Thumb down 0

    sami2…. smoga berguna

  3. Apriza says:

    Bagus ato Jelek: Thumb up 0 Thumb down 0

    Klo dicontent yang ditampilkan ada html table, kebaca langsung ga…

  4. qorianku says:

    Bagus ato Jelek: Thumb up 0 Thumb down 0

    apa maksudnya inputanya berupa html table ?
    ndak bisa bos.. inputnya harus berupa array php.
    dia bacanya per elemen array.

  5. digos says:

    Bagus ato Jelek: Thumb up 0 Thumb down 0

    saya nyoba ssuai dengan ptunjuk hello world, tp muncul message error :

    A PHP Error was encountered
    Severity: Notice
    Message: Undefined index:
    Filename: libraries/class.pdf.php
    Line Number: 1934

    gimana solusinya ?
    thx..
    digos

  6. qorianku says:

    Bagus ato Jelek: Thumb up 0 Thumb down 0

    sori agak lama balesnya…
    baru sempet online..:)

    itu karena folder fonts nya gak di taruh di folder root CI nya..
    satu direktori ama index.php

    coba mas nya liat lagi struktur folder di pdf-tutorial2.rar..

    semoga membantu

    wassalam

  7. remx says:

    Bagus ato Jelek: Thumb up 0 Thumb down 0

    W lagi nyari resource CI malah ketemu situs ini, hehehe
    bisa2 aja ne mas google…

    make ezpdf, ckckckc
    Pemikiran yang sama boz,
    w juga make ezpdf(2 tahun yang silam kyknya) tapi sebelumnya w otak-atik corenya cms MAMBO/JOOMLA,
    nampaknya kita ada kesamaan suka otak-atik core cms yang lain buat dijadiin core cms kita sendirir..

    Pisss, orang indonesia kn emank jago modifikasi
    hehehehhe

  8. qorianku says:

    Bagus ato Jelek: Thumb up 0 Thumb down 0

    hehehe

    aku masih baru kok bro..

    dimana ada kemauan dan kebutuhan disitu ada modifikasi :D

  9. d3ptzz says:

    Bagus ato Jelek: Thumb up 0 Thumb down 0

    numpang belajar bos….:)

  10. Bagus ato Jelek: Thumb up 1 Thumb down 0

    [...] saya ‘terpaksa’ mencari cara agar bisa generate on the fly. Dan menemukan di blog masdeka. Terimakasih [...]

  11. qorianku says:

    Bagus ato Jelek: Thumb up 0 Thumb down 0

    monggo silahkan :)

  12. gemini says:

    Bagus ato Jelek: Thumb up 0 Thumb down 0

    Kok punya aku error yah….
    Warning: require(C:\xampp\htdocs\pdfci/system/../application/config/constants.php) [function.require]: failed to open stream: No such file or directory in C:\xampp\htdocs\pdfci\system\codeigniter\CodeIgniter.php on line 52

    Fatal error: require() [function.require]: Failed opening required ‘C:\xampp\htdocs\pdfci/system/../application/config/constants.php’ (include_path=’.;C:\xampp\php\pear\’) in C:\xampp\htdocs\pdfci\system\codeigniter\CodeIgniter.php on line 52

  13. qorianku says:

    Bagus ato Jelek: Thumb up 0 Thumb down 0

    error nya itu pas apa ya?
    yakin file constants.php nya ada dan bisa di baca?

  14. gemini says:

    Bagus ato Jelek: Thumb up 0 Thumb down 0

    Mas itu ane download & ane coba, kok file adanya cuma di controller aja yah di view gak ada file terus sistemmya gimana, masih error jadi blom nyambung …

  15. gemini says:

    Bagus ato Jelek: Thumb up 0 Thumb down 0

    mas udah bisa sekarang …… saya coba pindah pake codeigniter 1.7.1 makasih yah

  16. gemini says:

    Bagus ato Jelek: Thumb up 0 Thumb down 0

    mas kasih contoh yang ambil dari Model(data base) kan udah umum kalau data itu dari data base …

  17. qorianku says:

    Bagus ato Jelek: Thumb up 0 Thumb down 0

    sip sip… masukan bagus tuh..
    sori balesnya lama…
    kerjaan numpuk terus nih…:((

    lagipula ini lagi proses migrasi pindah hosting..
    soalnya yang disini mau habis

  18. Yudi says:

    Bagus ato Jelek: Thumb up 0 Thumb down 0

    Thanks om atas tutorialnya :)

  19. Bagus ato Jelek: Thumb up 0 Thumb down 0

    mas,
    pertanyaan saya di milis terjawab disini :D

    Hatur Nuhun,,

  20. admin says:

    Bagus ato Jelek: Thumb up 0 Thumb down 0

    sama2 …:D

  21. mbahsomo says:

    Bagus ato Jelek: Thumb up 0 Thumb down 0

    Wah ketinggalan nih, murid baru satu bulan ini bergelut dengan CI, terimakasih pren atas ilmunya

  22. admin says:

    Bagus ato Jelek: Thumb up 0 Thumb down 0

    sama2 mas… disini aku juga lagi belajar kok ..

  23. Citra says:

    Bagus ato Jelek: Thumb up 0 Thumb down 0

    Wah banyak ilmu disini. Numpang kulakan ya…. semoga website ini dipenuhi keberkahan.

    Trims

  24. admin says:

    Bagus ato Jelek: Thumb up 0 Thumb down 0

    Amin .. thanks bos

  25. yoze says:

    Bagus ato Jelek: Thumb up 0 Thumb down 0

    wahh thanks bnget infonya bro,, gw mang lagi butuh banget source reporting di codeigniter.

    btw kalo seandainya maw melempar parameter gmana ya dengan menggunakan r&os?, soalnya gw butuh reporting yang dinamis, contoh: ketika si A login maka dalam reportnya akan tertera namanya begitu juga untuk member yang lain…

    thanks a lot sebelumnya..

  26. deka says:

    Bagus ato Jelek: Thumb up 0 Thumb down 0

    @yoze…

    kalo mau nambahin kayak “printed by A”.. tinggal ditambah di footer atau header aja mas.
    tergantung kebutuhan.

    mungkin bisa di diutak atik fungsi prep_pdf nya..

    gudlak

  27. cahyo says:

    Bagus ato Jelek: Thumb up 0 Thumb down 0

    mas. kalo yang mau saya tampilin itu halaman gimana?. mohon bantuannya. masih nubie.

  28. aboy says:

    Bagus ato Jelek: Thumb up 0 Thumb down 0

    ahahahaha, akibat tidak membaca keseluruhan, berakhir dengan nasib yang sama dengan om digos. setelah baca keseluruhan, baru deh ngerti kenapa begitu.
    salut bwt yang bikin ni catetan.
    dan, arigato gozaimashita….

  29. Nico says:

    Bagus ato Jelek: Thumb up 0 Thumb down 0

    Mas, mau tanya ni. Gimana jika yang di tampilkan dalam laporan pdf adalah gabungan dari field type teks dan gambar yang telah disimpan dalam tabel…

    Misal:
    Tabel Mahasiswa (Nama, Alamat, Foto)

    saya sudah coba tapi gagal terus. mohon bantuannya. Sebelumnya, terima kasih banyak…

  30. qorianku says:

    Bagus ato Jelek: Thumb up 0 Thumb down 0

    @nico.. sebenernya nyimpen image di dalam database sangat tidak dianjurkan, karena hanya membebani database, dan proses insert, update nya pun juga lebih susah,

    saran saya file image disimpan di folder tertentu, dan yang disimpan dalam database cuma string namafile atau pathnya.
    trus mas nya bisa pake perintah addImage, atau addJpegFromFile

    semoga berhasil..

  31. sloth says:

    Bagus ato Jelek: Thumb up 0 Thumb down 0

    cool….

    di comot ya gan…

    ane mo belajar bikin pdf-pdf-an

  32. deka says:

    Bagus ato Jelek: Thumb up 0 Thumb down 0

    silakan mas/mbak sloth …:)

  33. Ari says:

    Bagus ato Jelek: Thumb up 0 Thumb down 0

    mantaps,.. gw blm lama kena CI tp udah jatuh cinta,. ditambah epdf nya. keren juga,. coz, gw selama ini pake fpdf n ga pake freamwork,..

    Thanks Bro,

  34. Ratna says:

    Bagus ato Jelek: Thumb up 0 Thumb down 0

    saya mau tanya nich…? saya udah nyoba pake ezpdf nya. Nah permasalahannya klo ada tabel yang kolomnya harus dimerge gimana caranya ya mas…?mohon bantuannya.

  35. deka says:

    Bagus ato Jelek: Thumb up 0 Thumb down 0

    @ratna.. merge? maksudnya header nya dimerge gitu? 1 header isinya 2 kolom nilai ?
    hmm blom nyoba tuh mbak, soalnya reportku disini masih standar2 aja, nti ta coba2 dulu..

    trims masukannya

  36. dama says:

    Bagus ato Jelek: Thumb up 0 Thumb down 0

    Mzdeka, aku dah nyobain source codenya, koq masih g bisa ya..
    Maaf masih belajar..
    Yang da di linknya mz deka tu tinggal dipindahin ke htdocs aja khan?!?
    Apa perlu diubah – ubah lagi?!
    aq pake code igniter 1.7.2, apa ada pengaruhnya?!?!

    error nya kaya gini maz??

    Warning: require(C:\xampp\htdocs\pdfci/system/../application/config/constants.php) [function.require]: failed to open stream: No such file or directory in C:\xampp\htdocs\pdfci\system\codeigniter\CodeIgniter.php on line 52

    Fatal error: require() [function.require]: Failed opening required ‘C:\xampp\htdocs\pdfci/system/../application/config/constants.php’ (include_path=’.;C:\xampp\php\pear\’) in C:\xampp\htdocs\pdfci\system\codeigniter\CodeIgniter.php on line 52

  37. qorianku says:

    Bagus ato Jelek: Thumb up 0 Thumb down 0

    error ada pada CI yang di zip
    silakan donlod lagi link nya
    ato langsung ke sini
    http://masdeka.web.id/wp-content/uploads/2008/12/tutorial-pdf-ci-fixed.rar

  38. yanto says:

    Bagus ato Jelek: Thumb up 0 Thumb down 0

    pak kalo mau melewatkan Query-String misalkan
    http://localhost/anniversary/fci/?month=2
    bagaimana

    terima kasih

  39. qorianku says:

    Bagus ato Jelek: Thumb up 0 Thumb down 0

    @yanto…
    kalo query string di CI sih bisa aja.. tinggal rubah di config.php bagian ini

    /*
    |————————————————————————–
    | Enable Query Strings
    |————————————————————————–
    |
    | By default CodeIgniter uses search-engine friendly segment based URLs:
    | example.com/who/what/where/
    |
    | You can optionally enable standard query string based URLs:
    | example.com?who=me&what=something&where=here
    |
    | Options are: TRUE or FALSE (boolean)
    |
    | The other items let you set the query string “words” that will
    | invoke your controllers and its functions:
    | example.com/index.php?c=controller&m=function
    |
    | Please note that some of the helpers won’t work as expected when
    | this feature is enabled, since CodeIgniter is designed primarily to
    | use segment based URLs.
    |
    */
    $config['enable_query_strings'] = FALSE;
    $config['directory_trigger'] = ‘d’; // experimental not currently in use
    $config['controller_trigger'] = ‘c’;
    $config['function_trigger'] = ‘m’;

    pribadi sih.. belum pernah coba..
    jadi belum tau hasil nya seperti apa..

  40. idoramones says:

    Bagus ato Jelek: Thumb up 0 Thumb down 0

    C:\xampp\php\PEAR\fpdf.php on line 550…soluisinya kira2 pa ya..:)

  41. yudi vitrian says:

    Bagus ato Jelek: Thumb up 0 Thumb down 0

    wah…akhirnya ketemu nih ekspor pdf…tapi lom ane coba ne bro…ntar lagi..hehe..pusing nyari di forum ci nga ketemu juga solusinya…user ane minta format pdf lagi buat report nya..puyeng…mudah2an bisa ne..pake trik di atas..makasi banget bro..

  42. yudi vitrian says:

    Bagus ato Jelek: Thumb up 0 Thumb down 0

    ane ada problem ne bro…ngambil data dari table…yang muncul bukannya data seperti nama dan alamat malah keluar nya bentuk int

    padahal dah ak rubah string array

    load->library(‘cezpdf’);
    $this->dn->select(‘*’);
    $this->db->where(‘user_id’,$user_id);
    $hasil = $this->db->get(‘user’);
    if($hasil->num_rows() > 0)
    {
    $db_data = array()
    foreach ($hasil->row_array() as $data)
    {
    $db_data[] = $data['nama'];
    $db_data[] = $data['alama'];

    $col_names = array(
    ‘nama’ => ‘Nama’,
    ‘kerja’ => ‘Mulai Kerja’,

    );
    $this->cezpdf->ezTable($db_data, $col_names, ‘Data User’, array(‘width’=>550));
    $this->cezpdf->ezStream();
    }
    }
    }

    ada solusi nga dari contoh coding di atas…thx b4

  43. yudi vitrian says:

    Bagus ato Jelek: Thumb up 0 Thumb down 0

    Problem Solve bro…thx…is working lib…thx a lott…

Leave a Reply

(required)

(required)

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

© 2010 Catatan (PHP) Suffusion WordPress theme by Sayontan Sinha