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

Bagus ato Jelek:
1
0
Thanks dek, You are the best
Bagus ato Jelek:
0
0
sami2…. smoga berguna
Bagus ato Jelek:
0
0
Klo dicontent yang ditampilkan ada html table, kebaca langsung ga…
Bagus ato Jelek:
0
0
apa maksudnya inputanya berupa html table ?
ndak bisa bos.. inputnya harus berupa array php.
dia bacanya per elemen array.
Bagus ato Jelek:
0
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
Bagus ato Jelek:
0
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
Bagus ato Jelek:
0
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
Bagus ato Jelek:
0
0
hehehe
aku masih baru kok bro..
dimana ada kemauan dan kebutuhan disitu ada modifikasi
Bagus ato Jelek:
0
0
numpang belajar bos….:)
Bagus ato Jelek:
1
0
[...] saya ‘terpaksa’ mencari cara agar bisa generate on the fly. Dan menemukan di blog masdeka. Terimakasih [...]
Bagus ato Jelek:
0
0
monggo silahkan
Bagus ato Jelek:
0
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
Bagus ato Jelek:
0
0
error nya itu pas apa ya?
yakin file constants.php nya ada dan bisa di baca?
Bagus ato Jelek:
0
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 …
Bagus ato Jelek:
0
0
mas udah bisa sekarang …… saya coba pindah pake codeigniter 1.7.1 makasih yah
Bagus ato Jelek:
0
0
mas kasih contoh yang ambil dari Model(data base) kan udah umum kalau data itu dari data base …
Bagus ato Jelek:
0
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
Bagus ato Jelek:
0
0
Thanks om atas tutorialnya
Bagus ato Jelek:
0
0
mas,
pertanyaan saya di milis terjawab disini
Hatur Nuhun,,
Bagus ato Jelek:
0
0
sama2 …:D
Bagus ato Jelek:
0
0
Wah ketinggalan nih, murid baru satu bulan ini bergelut dengan CI, terimakasih pren atas ilmunya
Bagus ato Jelek:
0
0
sama2 mas… disini aku juga lagi belajar kok ..
Bagus ato Jelek:
0
0
Wah banyak ilmu disini. Numpang kulakan ya…. semoga website ini dipenuhi keberkahan.
Trims
Bagus ato Jelek:
0
0
Amin .. thanks bos
Bagus ato Jelek:
0
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..
Bagus ato Jelek:
0
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
Bagus ato Jelek:
0
0
mas. kalo yang mau saya tampilin itu halaman gimana?. mohon bantuannya. masih nubie.
Bagus ato Jelek:
0
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….
Bagus ato Jelek:
0
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…
Bagus ato Jelek:
0
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..
Bagus ato Jelek:
0
0
cool….
di comot ya gan…
ane mo belajar bikin pdf-pdf-an
Bagus ato Jelek:
0
0
silakan mas/mbak sloth …:)
Bagus ato Jelek:
0
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,
Bagus ato Jelek:
0
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.
Bagus ato Jelek:
0
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
Bagus ato Jelek:
0
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
Bagus ato Jelek:
0
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
Bagus ato Jelek:
0
0
pak kalo mau melewatkan Query-String misalkan
http://localhost/anniversary/fci/?month=2
bagaimana
terima kasih
Bagus ato Jelek:
0
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..
Bagus ato Jelek:
0
0
C:\xampp\php\PEAR\fpdf.php on line 550…soluisinya kira2 pa ya..:)
Bagus ato Jelek:
0
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..
Bagus ato Jelek:
0
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
Bagus ato Jelek:
0
0
Problem Solve bro…thx…is working lib…thx a lott…
Bagus ato Jelek:
0
0
nice info..
keep posting !!!
recomemnded..
see us at :
http://uii.ac.id/
nitip ya.. :
http://fit.uii.ac.id/berita-magister-informatika/linked-open-data-lod-internet-tidak-lagi-hanya-web-of-document-tapi-menjadi-web-of-data.html