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



Thanks dek, You are the best
sami2…. smoga berguna
Klo dicontent yang ditampilkan ada html table, kebaca langsung ga…
apa maksudnya inputanya berupa html table ?
ndak bisa bos.. inputnya harus berupa array php.
dia bacanya per elemen array.
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
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
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
hehehe
aku masih baru kok bro..
dimana ada kemauan dan kebutuhan disitu ada modifikasi
numpang belajar bos….:)
[...] saya ‘terpaksa’ mencari cara agar bisa generate on the fly. Dan menemukan di blog masdeka. Terimakasih [...]
monggo silahkan
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
error nya itu pas apa ya?
yakin file constants.php nya ada dan bisa di baca?
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 …
mas udah bisa sekarang …… saya coba pindah pake codeigniter 1.7.1 makasih yah
mas kasih contoh yang ambil dari Model(data base) kan udah umum kalau data itu dari data base …
sip sip… masukan bagus tuh..
sori balesnya lama…
kerjaan numpuk terus nih…:((
lagipula ini lagi proses migrasi pindah hosting..
soalnya yang disini mau habis
Thanks om atas tutorialnya
mas,
pertanyaan saya di milis terjawab disini
Hatur Nuhun,,
sama2 …:D
Wah ketinggalan nih, murid baru satu bulan ini bergelut dengan CI, terimakasih pren atas ilmunya
sama2 mas… disini aku juga lagi belajar kok ..
Wah banyak ilmu disini. Numpang kulakan ya…. semoga website ini dipenuhi keberkahan.
Trims
Amin .. thanks bos
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..
@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
mas. kalo yang mau saya tampilin itu halaman gimana?. mohon bantuannya. masih nubie.
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….
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…