PDF (Portable Document Format) adalah format file yang
dikembangkan oleh Adobe Systems yang ditujukan untuk pendistribusian dokumen
yang tidak bergantung pada platform dan aplikasi asal pembuatnya. Dengan kata lain
format yang disimpan dengan format PDF tidak akan berubah walaupun dilihat
ataupun dicetak pada sistem dan platform yang berbeda.
Dalam aplikasi bisnis misalnya, kita sering harus menyajikan
laporan dinamik yang merupakan hasil query database. Jika Anda dapat membuat
dokumen PDF secara on-the-fly, tentunya ini akan sangat mengasyikkan karena
tampilan laporan dapat menjadi menarik dibandingkan format teks polos atau HTML
biasa. Untuk dapat membuat dokumen PDF secara on-the-fly Anda membutuhkan
library khusus untuk menangani proses tersebut. Paket aplikasi PHP sudah
menyediakan 2 library yang menangani proses pembuatan dokumen PDF ini yaitu
CPDF dan PDFLib. Pada artikel ini penulis akan membahas penggunaan library
PDFLib untuk pembuatan dokumen PDF.
Instalasi
Berikut adalah aplikasi yang dibutuhkan: Apache
(webserver) dan PHP 4.1.1 ke atas. Sistem operasi yang digunakan oleh penulis
adalah Windows 2000. Untuk webserver Anda dapat menggunakan IIS tapi setting
yang harus dilakukan akan berbeda dengan yang disajikan pada artikel ini.
Setelah webserver Apache terinstal pada komputer Anda, maka
selanjutnya lakukanlah ektraksi file paket PHP ke suatu direktori—sebaiknya
letakkan PHP dengan nama direktori sesederhana mungkin, misalnya e:\php.
Agar Apache dapat mengenali file berekstensi .php sebagai skrip PHP maka lakukan
langkah berikut. Pertama, bukalah file httpd.conf
di direktori <apache
webserver>/conf/httpd.conf, di mana <apache webserver> adalah direktori root Apache Anda.
Setelah itu, pada bagian LoadModule
tambahkan baris berikut:
LoadModule php4_module e:/php/sapi/php4apache.dll
Ganti e:/php dengan direktori tempat Anda mengekstraksi PHP
sebelumnya. Lalu pada bagian AddType
tambahkan baris berikut:
AddType application/x-httpd-php .php
Selanjutnya lakukan
setup pada PHP. Pada direktori PHP ubah file php.ini-dist
menjadi php.ini kemudian
pindahkan ke direktori Windows (mis: c:\winnt).
Pindahkan juga file php4ts.dll
dan pdflib.dll yang ada di subdirektori
dlls ke direktori <Windows>/System pada Win9x atau <Windows>/System32 pada WinNT/2000,
di mana <Windows> adalah
direktori Windows Anda.
Setelah itu bukalah file php.ini (yang sebelumnya telah Anda pindahkan ke diretori Windows). Ubah variabel extension_dir seperti berikut:
Setelah itu bukalah file php.ini (yang sebelumnya telah Anda pindahkan ke diretori Windows). Ubah variabel extension_dir seperti berikut:
extension_dir = e:/php/extensions
Seperti biasa, ganti e:/php dengan direktori PHP Anda. Carilah
baris di bawah lalu hilangkan komen (titik koma yang terletak di awal baris),
sehingga tampak menjadi:
extension=php_pdf.dll
Instalasi selesai dan service
Apache Webserver dapat dijalankan. Apache dapat distart melalui link dari Start > Programs > Apache http Server
atau melalui fasilitas Services dari
Windows NT/2000.
Bila perlu Anda dapat mengetes
apakah modul PDFLib telah diload baik dengan cara membuat sebuah file PHP seperti
berikut:
<? phpinfo(); ?>
Lihat Gambar 1 untuk melihat bagian
output dari phpinfo() yang
menunjukkan bahwa modul pdf
telah terinstal dengan baik.
Hello World
Untuk mengenal pembuatan dokumen
PDF kita akan membuat sebuah dokumen sederhana yang dapat menggambarkan proses
dasar yang harus dilakukan dalam pembuatannya.
<?php $p =PDF_new(); PDF_open_file($p,""); PDF_begin_page($p,595,842); $font =PDF_findfont($p,"Helvetica-Bold","host",0); PDF_setfont($p,$font,18.0); PDF_set_text_pos($p,50,700); PDF_show($p,"Hello world!"); PDF_continue_text($p,"Hello World Line 2"); PDF_end_page($p); PDF_close($p); $buf =PDF_get_buffer($p); $len =strlen($buf); header("Content-type:application/pdf"); header("Content-Length:$len"); header("Content-Disposition:inline;filename=hello_php.pdf"); print $buf; PDF_delete($p); ?>
Pada awal program fungsi PDF_new akan membuat objek dokumen PDF
dengan setting default. Nilai kembali dari fungsi ini yang disimpan pada
variable $p akan digunakan terus
oleh semua fungsi PDFLib lain yang berhubungan dengan pembuatan dokumen PDF.
Setelah objek dokumen PDF dibentuk
maka pembuatan file PDF dapat dimulai dengan memanggil fungsi PDF_open_file. Argumen kedua diisi dengan
dengan string kosong karena dokumennya hanya akan disimpan sebagai stream dalam
memori yang nantinya diteruskan ke browser. Bila Anda ingin menyimpannya
sebagai file argumen kedua diisi nama file hasil akhir.
Pada tahap ini Anda telah memiliki
dokumen blank yang siap dibentuk halaman-halamannya. Untuk pembuatan tiap
halaman Anda harus menggunakan fungsi PDF_begin_page
pada awal halaman dan PDF_end_page
pada akhir halaman. Argumen kedua dan ketiga merupakan resolusi halaman, lihat
Tabel 1 untuk mengetahui padanannya dalam ukuran kertas yang lazim kita
gunakan.
Sebelum Anda dapat menulis teks,
perlu diset terlebih dahulu font yang akan digunakan. Font yang akan digunakan
perlu dicari terlebih dahulu dengan fungsi PDF_findfont.
Argumen kedua adalah nama font yang akan Anda gunakan, PDFLib dapat pula
mengambil font TrueType dengan memasukkan nama font resminya. Untuk mengetahui
nama resmi font Anda dapat melihatnya pada bagian atas dari utiliti Fonts pada
Control Panel (lihat Gambar 2 untuk contohnya). Argumen kedua adalah 8-bit Encoding, gunakan string host agar
PDFLib menentukan secara otomatis sesuai dengan platform OS yang digunakan.
Argumen ketiga adalah pengontrolan proses font apakah akan diembed dalam
dokumen PDF atau tidak. Bila Anda mengisikan 1 maka Anda harus menyediakan pula
informasi font tersebut pada file upr.
Baca manual PDFlib untuk keterangan lebih lanjut.
Setelah memilih font, kemudian Anda
menentukan posisi di mana teks akan ditempatkan. Titik (0, 0) pada dokumen PDF terletak pada
bagian kiri bawah kertas. Setelah titiknya ditentukan, untuk memasukkan teks
gunakan fungsi PDF_show dan
untuk meneruskan ke baris selanjutnya gunakan fungsi PDF_continue_text.
Setelah proses pembuatan dokumen
PDF berakhir, maka fungsi PDF_close
harus dipanggil.
Langkah selanjutnya adalah
mengirimkan stream biner dokumen PDF yang telah dibuat ini ke browser. Data
dari objek yang dibuat oleh PDFLib diambil terlebih dahulu dengan fungsi PDF_get_buffer. Kemudian panjang dokumen
dihitung; panjang dokumen ini diperlukan karena browser IE akan menampilkan
layar kosong bila tidak disertakan besar ukuran dokumen PDF-nya. Selanjutnya
isi buffer data dapat dikirimkan langsung dengan mencetak streamnya dengan
fungsi print. Lihat hasil skrip
Hello World kita di Gambar 3.
Terakhir Anda memanggil fungsi PDF_delete untuk menghapus memori yang
telah dialokasikan dalam pembuatan dokumen PDF ini.
Bekerja Dengan Gambar
PDFLib menyediakan fungsi untuk
meletakkan gambar raster ke dokumen Anda. Format gambar yang didukung oleh
PDFLib adalah: PNG (Portable Network Graphics), JPEG, GIF (harus memiliki
minimal 218 color palette, bila kurang Anda perlu melakukan konversi dengan
image editor), TIFF, CCITT, atau Raw Data.
Untuk menampilkan gambar ke dokumen
Anda membutuhkan tiga fungsi. Tabel 2 mendaftarkan ketiga fungsi tersebut.
Fungsi PDF_place_image dapat
Anda gunakan berkali-kali dalam dokumen selama fungsi PDF_close_image belum dipanggil.
Berikut adalah contoh kode program
untuk meletakkan gambar di dokumen. Hasilnya bisa dilihat di Gambar 4.
<? $p =PDF_new(); PDF_open_file($p,""); PDF_begin_page($p,595,842); $logo = PDF_open_image_file($p, "png", "image.png", "", 0); PDF_place_image($p, $logo, 0, 0, 0.5); PDF_close_image($p, $logo); PDF_end_page($p); PDF_close($p); $buf =PDF_get_buffer($p); $len =strlen($buf); header("Content-type:application/pdf"); header("Content-Length:$len"); header("Content-Disposition:inline;filename=image_php.pdf"); print $buf; PDF_delete($p); ?>
Membuat Tabel
Untuk membuat tabel Anda harus
melakukannya secara manual dengan menggambar tiap garis-garis tabel. Berikut
contoh kodenya.
<? $p =PDF_new(); PDF_open_file($p,""); $font_verdana = PDF_findfont($p, "Verdana Bold", "host", 0); PDF_begin_page($p,595,842); PDF_setcolor($p, "fill", "cmyk", 0, 0, 0.4,0.5); PDF_rect($p, 75,700, 430, 25); PDF_fill_stroke($p); $totalrow=10; for($rownum=0; $rownum<$totalrow; $rownum++){ $number=675-($rownum*25); PDF_rect($p, 75,$number, 430, 25); PDF_stroke($p); } PDF_moveto($p, 200, 675-(($totalrow-1)*25)); PDF_lineto($p, 200, 725); PDF_stroke($p); PDF_setcolor($p, "fill", "cmyk", 0, 0, 0, 0); PDF_setfont($p, $font_verdana, 12.0); PDF_set_text_pos($p, 115, 708); PDF_show($p, "Key"); PDF_set_text_pos($p, 315, 708); PDF_show($p, "Desription"); PDF_end_page($p); PDF_close($p); $buf =PDF_get_buffer($p); $len =strlen($buf); header("Content-type:application/pdf"); header("Content-Length:$len"); header("Content-Disposition:inline;filename=table_php.pdf"); print $buf; PDF_delete($p); ?>
Pada listing di atas dibuat tabel
sebanyak 11 baris dengan baris pertama sebagai headernya. Seperti bisa dilihat
pada kode, proses pembuatan tabel dilakukan secara manual dengan menggambar
masing-masing garis satu persatu.
Fungsi-fungsi grafik—yang dapat
dilihat pada manual PDFlib—merupakan fungsi pembuat path. Untuk mendapatkan
hasil akhirnya Anda harus memanggil fungsi stroke (PDF_stroke), fill (PDF_fill)
atau gabungan keduanya (PDF_fill_stroke).
Stroke akan menggambar garis pada path, sedangkan fill akan mengisi ruang yang
dibuat oleh path.
Untuk memberikan warna pada stroke
ataupun fill digunakan fungsi PDF_setcolor.
Argumen kedua diisi “fill”, “stroke” atau “both”. Argumen ketiga diisi tipe warna yang digunakan
apakah “cmyk”, “rgb”, “gray”,
“spot” atau “pattern”. Untuk 4 argumen terakhir
merupakan komposisi warna dalam rentang 0–1, untuk mengkonversi dari skala
0–255 warnanya dibagi saja dengan 255. Kemudian untuk RGB yang hanya
membutuhkan 3 warna argumen ke-4 yang tidak digunakan diisi dengan 0, demikian
pula bila “gray” maka 3 argumen
terakhir diisi 0.
Hasil skrip pembuat tabel dapat
dilihat di Gambar 5.
Menambahkan Informasi ke PDF
Informasi dokumen PDF dapat
dilihat bila Anda membuka dokumen PDF melalui Acrobat Reader pada menu File > Document Info > General.
Untuk mengisikan informasi ini gunakan fungsi PDF_set_info(PDF,
key, value). Tabel 3 menjelaskan makna dari nilai-nilai key yang tersedia.
Tip
Pesan error yang biasanya muncul
akan terhalang bila browser sudah pernah meload plugin Adobe Acrobat
sebelumnya. Untuk dapat melihat pesan error yang dihasilkan oleh parser PHP
Anda sebaiknya membuka browser baru kemudian membuka file PHP yang sama, maka
sekarang pesan error akan muncul karena browser belum meload plugin Adobe
Acrobat sebelumnya. Kasus ini hanya penulis temui pada browser Microsoft
Internet Explorer.
PDF selama ini merupakan dokumen
yang tidak terstruktur, artinya format ini tidak memiliki konsep paragraf,
indentasi, dll. Adobe baru memperkenalkan tag struktur dokumen pada Acrobat 5.
Karena itulah pada proses pembuatan dokumen PDF di sini, Anda bekerja seperti
membuat gambar pada bidang kertas.
Sumber : http://www.master.web.id/mwmag/issue/05/content/pemrograman-pdf_dengan_php/pemrograman-pdf_dengan_php.html
Tidak ada komentar:
Posting Komentar