Rabu, 19 Mei 2010

pdf dan php

PDF? Pakai PHP saja!
________________________________________
Oleh: Ivan Irawan
Saya yakin jika Anda cukup bergaul dan melek internet, pasti pernah mendengar, membaca, juga barangkali membuat dokumen dalam bentuk format PDF (Portable Document Format). Ketika Anda membaca artikel ini secara online, saya semakin yakin bahwa tidak mungkin Anda tidak pernah mendengar mengenai PDF. Paling tidak Anda telah mendengar mengenai PDF judul dari judul artikel ini :)
Bisa beli PDF-nya, Pak?
Format dokumen PDF pertama kali dikenalkan oleh Adobe System (http://www.adobe.com), hasil dari pengembangan Dr. John Warnock di awal tahun 90-an. Proyek PDF dimaksudkan membuat format file untuk distribusi dokumen di dalam perusahaan yang dapat ditampilkan di berbagai platform komputasi.
PDF akhirnya menjadi format dokumen yang universal dan lintas platform, karena tersedia di berbagai platform komputasi. Program untuk membaca dokumen PDF dalam berbagai platform disediakan secara gratis untuk didownload oleh Adobe System. Plug-in program pembaca untuk browser populer juga tersedia, sehingga dokumen PDF dapat dibaca langsung secara online dari situs internet tanpa perlu mendownload dokumen dan membacanya denga program yang terpisah dari browser web.
PDF memiliki beberapa fitur keunggulan antara lain:
• Universal dan Lintas Platform.
Dokumen PDF dapat dibaca di berbagai platform, bahkan dapat dibaca secara online melalui browser yang telah dilengkapi dengan plug-in pembaca PDF. Tools dan printer driver untuk membuat dokumen PDF pun banyak tersedia. Keunggulan ini menyebabkan dokumen PDF dapat digunakan secara luas di seluruh dunia.
• Yang Anda Lihat, Yang Anda Dapatkan.
Berbeda dengan format HTML/SGML, PDF lebih dapat menjamin apa yang ditampilkan pada monitor, maka serupa itu pula yang akan kita dapatkan jika dokumen dicetak. Dengan format HTML/SGML, maka hasil cetakan bisa jadi akan berbeda dengan yang tampak di monitor, bahkan dokumen yang tampak di monitor pun bisa jadi berbeda-beda tergantung dari browser yang digunakan. Hasilnya, PDF sangat sesuai digunakan untuk menampilkan informasi kritis yang tidak memperbolehkan variasi dalam presentasinya, misalnya invoice, tanda terima, dan laporan-laporan baku lainnya.
• Hemat Ukurannya.
Secara native file PDF telah dikompresi sedemikian rupa, sehingga ukuran filenya akan lebih kecil daripada jika file tersebut dalam format HTML, misalnya. Kecilnya ukuran file PDF ini menyebabkan PDF populer digunakan untuk tukar-menukar dokumen lewat internet karena tidak memboroskan bandwidth data.
• Pengamanan Dokumen Dapat Diandalkan.
PDF juga memiliki fitur pengamanan dokumen dari kemungkinan pencurian isi, duplikasi, dan pencetakan dokumen oleh yang tidak berhak. Sebuah dokumen PDF dapat pula diberikan tanda tangan digital (digital signature) sehingga penyebaran dokumen dapat lebih dikendalikan. Fitur ini tidak dimiliki oleh format dokumen universal seperti HTML/SGML.
Benarkah Perlu PDF?
Kecuali jika Anda hanya ingin bekerja dengan dokumen-dokumen non presisi dan tidak menginginkan kemudahan bertukar dokumen, maka Anda kemungkinan besar membutuhkan format dokumen PDF.
Jika Anda ingin:
• membuat invoice, order pembelian, surat pengangkutan, tanda terima, dan dokumen komersial untuk situs e-commerce atau aplikasi berbasis web
• membuat laporan dari aplikasi berbasis web dengan format yang presisi yang tidak memperkenankan variasi hasil cetakan
• membuat cetakan form isian dari web dengan hasil yang seragam
• membuat dokumen lain yang membutuhkan pengendalian baik terhadap distribusi dokumen maupun presisi dan kualitas cetakan, serta dapat dipertukarkan secara mudah,
Saya berani memberi saran kepada Anda untuk menghindari kerja keras memformat dokumen dalam bentuk HTML dengan menggunakan format dokumen PDF.
Sebagai pecinta PHP, Anda benar-benar dimanjakan karena PHP memiliki kemampuan untuk membuat dokumen PDF. Pada artikel ini kita akan coba mempelajarinya.
Pilih Yang Mana...
Cukup banyak ekstensi PHP tersedia yang memungkinkan Anda membuat dokumen PDF melalui PHP. Beberapa yang dapat Anda pilih:
• PDFLib. Aladdin Free Public License memperkenankan penggunaan PDFLib untuk penggunaan non komersial. Untuk lisensi komersial, termasuk penggunaan dalam layanan web komersial, dikenakan harga lisensi yang dapat dilihat pada http://pdflib.com.
• FreePDFlib oleh Thomas Szadel (open source).
• ClibPDF menggunakan model lisensi yang sama dengan PDFLib.
Dalam tulisan ini, kita akan menggunakan fungsi-fungsi yang ada pada PDFLib. Sebelum memulai semuanya, sebaiknya Anda pastikan dulu ekstensi PDFLib telah terpasang pada sistem PHP Anda. Jangan lupa juga, Anda juga harus memastikan browser Anda telah terinstalasi plug-in untuk membaca dokumen PDF.
Untuk lebih memudahkan Anda, maka telah tersedia source code dan hasilnya (dalam dokumen PDF) dalam bentuk file .zip. Anda tinggal download saja file artpdf.zip ini.
Jika Anda telah siap, mari kita lanjutkan dengan membuat dokumen PDF paling sederhana.
PDF Pertamaku, Tak Terlupakan...
Sesungguhnya saya tidak menyukai memulai sesuatu dengan rutinitas. Ketika Anda belajar bahasa pemrograman apa pun, selalu kita dipaksa untuk mengucapkan, "Hello, World!" dalam bahasa pemrograman baru. Saya juga akan mengajak Anda untuk melakukannya lagi saat ini, namun untuk sedikit mengurangi kejenuhan, mari kita ubah program ini menjadi program "PDF Pertamaku".
Coba Anda buat skrip seperti di bawah ini, dan coba jalankan di PHP melalui browser favorit Anda.
$halaman = pdf_new();
pdf_open_file($halaman);
pdf_set_info($halaman,"Creator","pdf-ku.php");
pdf_set_info($halaman,"Author","Mr. Dodol");
pdf_set_info($halaman,"Title","PDF Pertamaku");
pdf_begin_page($halaman,595,842);
$huruf = pdf_findfont($halaman,"Helvetica-Bold","host",0);
pdf_setfont($halaman,$huruf,38.0);
pdf_show_xy($halaman,"Inilah PDF Pertamaku!",50,700);
pdf_end_page($halaman);
pdf_close($halaman);
$buf = pdf_get_buffer($halaman);
$panjangbuffer = strlen($buf);
Header("Content-type: application/pdf");
Header("Content-Length: $panjangbuffer");
Header("Content-Disposition: inline; filename=pdf-ku.pdf");
echo $buf;
pdf_delete($halaman);
?>
Tentukan Letak Bintang di Langit
Membuat dokumen PDF, sebenarnya mirip dengan proses menggambar pada kanvas. Agar Anda mampu menempatkan gambar maupun tulisan di tempat yang sesuai dengan keinginan Anda, maka Anda perlu mengetahui cara penentuan letak pada dokumen PDF.
Pada dokumen PHP berlaku sistem koordinat dua dimensi (x,y), dimana titik asal atau koordinat (0,0) ada di pojok kiri bawah dokumen. Arah koordinat x adalah arah horisontal (dari kiri ke kanan) dan arah koordinat y adalah arah vertikal (dari bawah ke atas). Sistem ukuran dasar/skala yang digunakan adalah point atau disingkat pt, dengan konversinya:
1 pt = 1/72 inch = 0.35277777778 mm, atau dengan kata lain
1 inch = 72 pt.
Pembuatan dokumen PHP, dikerjakan per halaman. Pada saat awal membuat halaman, Anda harus menentukan terlebih dahulu lebar dan panjang kertas yang akan digunakan dalam satuan pt. Tabel berikut ini akan memberikan informasi ukuran jenis kertas dalam satuan pt.
Jenis Ukuran Kertas Horisontal Vertikal
US Letter 612 792
US Legal 612 1008
US Ledger 1224 792
11x17 792 1224
A0 2380 3368
A1 1684 2380
A2 1190 1648
A3 842 1190
A4 595 842
A5 421 595
A6 297 421
B5 501 709
Mari Anda coba skrip di bawah ini untuk belajar bermain dalam koordinat halaman berukuran A4.
$halaman = pdf_new();
pdf_open_file($halaman);
pdf_set_info($halaman,"Creator","koord.php");
pdf_set_info($halaman,"Author","Mr. Dodol");
pdf_set_info($halaman,"Title","Test Koordinat PDF");
pdf_begin_page($halaman,595,842); //ukuran kertas A4

//membuat tulisan pada halaman
$huruf = pdf_findfont($halaman,"Helvetica-Bold","host",0);
pdf_setfont($halaman,$huruf,38.0);
pdf_show_xy($halaman, "Kiri Bawah", 10, 10);
pdf_show_xy($halaman, "Kanan Bawah", 335, 10);
pdf_show_xy($halaman, "Kiri Atas", 10, 802);
pdf_show_xy($halaman, "Kanan Atas", 375, 802);
pdf_show_xy($halaman, "Tengah",595/2-60,842/2-20);

// membuat garis di pinggir halaman
pdf_setrgbcolor_stroke($halaman,1,0,0);
pdf_moveto($halaman,10,10);
pdf_lineto($halaman,10,832);
pdf_lineto($halaman,585,832);
pdf_lineto($halaman,585,10);
pdf_lineto($halaman,10,10);
pdf_stroke($halaman);
pdf_setrgbcolor_stroke($halaman,0,0,0);

pdf_end_page($halaman);
pdf_set_parameter($halaman, "openaction", "fitpage");
pdf_close($halaman);
$buf = pdf_get_buffer($halaman);
$panjangbuffer = strlen($buf);
Header("Content-type:application/pdf");
Header("Content-Length:$panjangbuffer");
Header("Content-Disposition:inline; filename=koord.pdf");
echo $buf;
pdf_delete($halaman);
?>
Skrip di atas akan menghasilkan dokumen PDF serupa ini.

Anda memiliki kemungkinan untuk mengubah titik asal (0,0) dan membalik arah koordinat, sebagai contoh, Anda dapat membuat pojok kiri atas sebagai titik asal koordinat dan memiliki nilai positif untuk arah dari atas ke bawah dan dari kiri ke kanan. Anda dapat mencoba skrip berikut ini.
$halaman = pdf_new();
pdf_open_file($halaman);
pdf_set_info($halaman,"Creator","koordbalik.php");
pdf_set_info($halaman,"Author","Mr. Dodol");
pdf_set_info($halaman,"Title","Mengubah Titik Asal dan Arah Koordinat (PHP)");
pdf_begin_page($halaman,595,842);

// Mengubah Titik Asal
pdf_translate($halaman,0,842);

// Membalik Arah Sumbu Mendatar
pdf_scale($halaman, 1, -1);

// Mencerminkan skala horisontal
pdf_set_value($halaman,"horizscaling",-100);

$huruf = pdf_findfont($halaman,"Helvetica-Bold","host",0);
pdf_setfont($halaman,$huruf,-38.0);
pdf_show_xy($halaman, "Top Left", 10, 40);

pdf_end_page($halaman);
pdf_set_parameter($halaman, "openaction", "fitpage");
pdf_close($halaman);
$buf = pdf_get_buffer($halaman);
$panjangbuffer = strlen($buf);
Header("Content-type:application/pdf");
Header("Content-Length:$panjangbuffer");
Header("Content-Disposition:inline; filename=koordbalik.pdf");
echo $buf;
pdf_delete($halaman);
?>
Bicara dengan Tulisan
Dalam contoh-contoh skrip di atas, Anda telah mencoba menulis pada halaman PDF. Kali ini Anda akan mendapatkan penjelasan mengenai fungsi-fungsi dasar yang digunakan untuk membuat tulisan pada dokumen PDF. Sebagian dari fungsi-fungsi ini telah pernah Anda gunakan.
pdf_show_xy()
Fungsi ini digunakan untuk menuliskan text pada posisi tertentu yang diberikan. Contoh:

Contoh di atas akan menuliskan text "Tulisan Saya" mulai pada koordinat (50,100) pada halaman PDF yang didefinisikan oleh variabel $halaman.
pdf_show()
Fungsi ini digunakan untuk menuliskan text pada posisi tertentu yang telah diset terlebih dahulu dengan fungsi pdf_set_text_pos(). Contoh:
pdf_show($halaman,"Text"); ?>
pdf_continue_text()
Fungsi ini digunakan untuk menuliskan text pada posisi baris berikutnya.
pdf_show_boxed()
Fungsi ini digunakan untuk memformat text dalam suatu box/kotak tertentu. Contoh skrip berikut ini akan memberi kesempatan bagi Anda untuk mengerti maksud penggunaan fungsi pdf_show_boxed().
$halaman = pdf_new();
pdf_open_file($halaman);
pdf_begin_page($halaman,595,842);
$font = pdf_findfont($halaman,"Helvetica-Bold","host",0);
pdf_setfont($halaman,$font,24.0);

$text = <<Contoh beberapa text di dalam kotak text pada dokumen PDF.
TEKS;

pdf_show_boxed($halaman, $text, 50, 630, 300, 200, "left");
pdf_rect($halaman,50,630,300,200); pdf_stroke($halaman);
pdf_show_boxed($halaman, $text, 50, 420, 300, 200, "right");
pdf_rect($halaman,50,420,300,200); pdf_stroke($halaman);
pdf_show_boxed($halaman, $text, 50, 210, 300, 200, "justify");
pdf_rect($halaman,50,210,300,200);
pdf_stroke($halaman);
pdf_show_boxed($halaman, $text, 50, 0, 300, 200, "fulljustify");
pdf_rect($halaman,50,0,300,200);
pdf_stroke($halaman);
pdf_show_boxed($halaman, $text, 375, 250, 200, 300, "center");
pdf_rect($halaman,375,250,200,300);
pdf_stroke($halaman);

pdf_end_page($halaman);
pdf_set_parameter($halaman, "openaction", "fitpage");
pdf_close($halaman);
$buf = pdf_get_buffer($halaman);
$panjangbuffer = strlen($buf);
Header("Content-type:application/pdf");
Header("Content-Length:$panjangbuffer");
Header("Content-Disposition:inline; filename=kotakteks.pdf");
echo $buf;
pdf_delete($halaman);
?>
Skrip di atas jika dijalankan, akan menghasilkan dokumen PDF seperti gambar berikut ini.

Kusuka Bentuknya
PDFLib yang Anda gunakan menyediakan 14 pilihan huruf built-in, yaitu:
• Courier
• Courier-Bold
• Courier-Oblique
• Courier-BoldOblique
• Helvetica
• Helvetica-Bold
• Helvetica-Oblique
• Helvetica-BoldOblique
• Times-Roman
• Times-Bold
• Times-Italic
• Times-BoldItalic
• Symbol
• ZapfDingbats.
Berikut beberapa contoh dari jenis huruf standar tersebut di atas.

Anda juga dapat menggunakan jenis huruf AFM, Postscript Type-1, dan TTF. Mari kita coba lihat cara menggunakan jenis huruf TTF atau True Type Font.
pdf_set_parameter($halaman,"FontOutline",
"Arial==/usr/fonts/arial.ttf");
$font = pdf_findfont($halaman,"Arial","host",1);
?>
Jenis huruf (font) dapat pula didefinisikan pada file pdflib.upr. Contoh berikut ini menunjukkan caranya.
// Ubah nilai variabel ini sesuai dengan path file pdflib.upr
// di sistem PHP Anda.
$file_upr = "/usr/share/fonts/pdflib/pdflib.upr";

$halaman = pdf_new();
pdf_open_file($halaman);
pdf_set_info($halaman,"Creator","hurufttf.php");
pdf_set_info($halaman,"Author","Mr. Dodol");
pdf_set_info($halaman,"Title","Test Jenis Huruf (PHP)");
pdf_set_parameter($halaman, "resourcefile", $file_upr);
pdf_begin_page($halaman,595,842);
pdf_set_text_pos($halaman,25,800);

// Buat Array Nama Font dan jenisnya
$fonts = array('Arial'=>1,'Comic Sans MS'=>1,'Impact'=>1);

// Cetak Font ke Dokumen PDF
foreach($fonts as $f=>$embed) {
$font = pdf_findfont($halaman,$f,"host",$embed);
pdf_setfont($halaman,$font,25.0);
pdf_continue_text($halaman,"$f (".chr(128)." Ç à á â ã ç è é ê)");
}
pdf_end_page($halaman);
pdf_close($halaman);
$buf = pdf_get_buffer($halaman);
$len = strlen($buf);
Header("Content-type:application/pdf");
Header("Content-Length:$len");
Header("Content-Disposition:inline; filename=hurufttf.pdf");
echo $buf;
pdf_delete($halaman);
?>
File pdflib.upr harus terisi dengan entri sebagai berikut.
FontOutline
Arial=arial.ttf
Comic Sans MS=comic.ttf
Impact=IMPACT.ttf
.
Jika muncul pesan kesalahan, kemungkinan Anda harus mengisikan entri nama file pada FontOutline lengkap dengan path dari file .ttf. Jika berhasil, Anda akan memperoleh hasil sebagai berikut.

Enkonding karakter yang tersedia pada PDFLib yaitu
• winansi (superset dari ISO 8859-1)
• macroman (Enkoding standar Macintosh)
• ebcdic (Digunakan pada IBM AS/400 dan S/390)
• biltin (Enkoding asli yang digunakan oleh huruf teks non latin)
• host (macroman di Mac, ebcdic di sistem EBCDIC, dan winasi di windows)
Gambar Bermakna Seribu Kata...
Anda telah mendapatkan dasar yang cukup mengenai cara menulis teks pada halaman dokumen PDF. Kali ini kita akan mempelajari cara penempatan gambar pada dokumen PHP. PDFLib mampu menangani beberapa format gambar untuk dijadikan dokumen PDF, antara lain:
• PNG (tanpa alpha-channel)
• JPEG (Progressive jpegs didukung mulai versi Acrobat 4)
• GIF (non-interlacing diperbolehkan, untuk animasi GIF hanya gambar pertama yang ditampilkan)
• TIFF
• CCITT compressed image data
• Raw image data
Anda dapat menyisipkan gambar pada dokumen PDF dengan perintah pdf_open_jpeg() untuk membuka file gambar dan diikuti dengan perintah pdf_place_image() untuk meletakkan gambarnya pada dokumen PDF. Untuk menutup file gambar, digunakan perintah pdf_close_image(). Kode berikut ini adalah contohnya.
$halaman = pdf_new();
pdf_open_file($halaman);
pdf_begin_page($halaman,595,842);

// Load file gambar php-big.jpg
$im = pdf_open_jpeg($halaman, "php-big.jpg");
pdf_place_image($halaman, $im, 200, 700, 1.0);
pdf_place_image($halaman, $im, 200, 600, 0.75);
pdf_place_image($halaman, $im, 200, 535, 0.50);
pdf_place_image($halaman, $im, 200, 501, 0.25);
pdf_place_image($halaman, $im, 200, 486, 0.10);
$x = pdf_get_value($halaman, "imagewidth", $im);
$y = pdf_get_value($halaman, "imageheight", $im);
pdf_close_image ($halaman,$im);

$huruf = pdf_findfont($halaman,"Helvetica-Bold","host",0);
pdf_setfont($halaman,$huruf,14.0);
pdf_show_xy($halaman,"$x X $y"." (100%)",25,750);
pdf_show_xy($halaman, $x*0.75 . " X " . $y*0.75 . " (75%)",25,650);
pdf_show_xy($halaman, $x*0.50 . " X " . $y*0.50 . " (50%)",25,570);
pdf_show_xy($halaman, $x*0.25 . " X " . $y*0.25 . " (25%)",25,525);
pdf_show_xy($halaman, $x*0.10 . " X " . $y*0.10 . " (10%)",25,490);

pdf_end_page($halaman);
pdf_set_parameter($halaman, "openaction", "fitpage");
pdf_close($halaman);
$buf = pdf_get_buffer($halaman);
$panjangbuffer = strlen($buf);
Header("Content-type:application/pdf");
Header("Content-Length:$panjangbuffer");
Header("Content-Disposition:inline; filename=sisipgambar.pdf");
echo $buf;
pdf_delete($halaman);
?>
Hasil tampilan program di atas kurang lebih seperti gambar berikut.

Kita dapat pula menerapkan skala non linier kepada gambar yang akan kita sisipkan pada dokumen PDF. Untuk melakukan itu, kita harus mengatur skala koordinat.
$halaman = pdf_new();
pdf_open_file($halaman);
pdf_begin_page($halaman,595,842);

$im = pdf_open_jpeg($halaman, "php-big.jpg");
pdf_place_image($halaman, $im, 200, 700, 1.0);
pdf_save($halaman); // Simpan Setting Sistem Koordinat yang ada
$nx = 50/pdf_get_value($halaman,"imagewidth",$im);
$ny = 100/pdf_get_value($halaman,"imageheight",$im);
pdf_scale($halaman, $nx, $ny);
pdf_place_image($halaman, $im, 200/$nx, 600/$ny, 1.0);
pdf_restore($halaman); // Kembalikan ke sebelumnya
pdf_close_image ($halaman,$im);

pdf_end_page($halaman);
pdf_set_parameter($halaman, "openaction", "fitpage");
pdf_close($halaman);
$buf = pdf_get_buffer($halaman);
$panjangbuffer = strlen($buf);
Header("Content-type:application/pdf");
Header("Content-Length:$panjangbuffer");
Header("Content-Disposition:inline; filename=sisipgambar2.pdf");
echo $buf;
pdf_delete($halaman);
?>
Program di atas akan memberikan hasil kurang lebih seperti gambar berikut.

Mari Menggambar Bersama
Selain menggunakan gambar yang telah ada untuk disisipkan ke dokumen PDF, Anda dapat juga langsung menggambar pada dokumen PDF dengan beberapa perintah gambar sederhana. Pada dasarnya, menggambar di dokumen PDF adalah menentukan atau mendefinisikan path untuk kemudian ditampilkan pada dokumen PDF. Sebuah path terdiri dari bentuk-bentuk dasar grafis sepeti garis, kurva, persegi panjang, lingkaran, elips, dan lain-lain. Sebagai contoh:
$halaman = pdf_new();
pdf_open_file($halaman);
pdf_begin_page($halaman,595,342);

// Menggambar path garis diikuti kurva
pdf_moveto($halaman,150,250);
pdf_lineto($halaman,450,250);
pdf_lineto($halaman,100,300);
pdf_curveto($halaman,80,50,70,50,250,150);

// Menggambar lingkaran
pdf_circle($halaman,450,100,50);

// Menggambar persegi panjang
pdf_rect($halaman,350,25,200,150);

// Memplot semua path/kurva yang telah dibuat
// pada dokumen PDF
pdf_stroke($halaman);

pdf_end_page($halaman);
pdf_close($halaman);
$buf = pdf_get_buffer($halaman);
$panjangbuffer = strlen($buf);
Header("Content-type:application/pdf");
Header("Content-Length:$panjangbuffer");
Header("Content-Disposition:inline; filename=menggambar1.pdf");
echo $buf;
pdf_delete($halaman);
?>
Jika skrip di atas dijalankan, maka akan terlihat hasil sebagai berikut.

Anda dapat menggunakan perintah pdf_closepath() untuk menutup path secara otomatis dan pdf_fill_stroke() untuk mengisi kurva tertutup tersebut dengan warna isian.
$halaman = pdf_new();
pdf_open_file($halaman);
pdf_begin_page($halaman,595,342);

// Set warna isian
pdf_setcolor($halaman,"fill","rgb", 1.0, 0.8, 0.1);

// Menggambar path garis diikuti kurva
pdf_moveto($halaman,150,250);
pdf_lineto($halaman,450,250);
pdf_lineto($halaman,100,300);
pdf_curveto($halaman,80,50,70,50,250,150);

// Menutup kurva/path
pdf_closepath($halaman);

// Memplot dengan isian warna
pdf_fill_stroke($halaman);

// Set warna isian
pdf_setcolor($halaman,"fill","rgb", 1.0, 0.0, 0.0);

// Menggambar lingkaran
pdf_circle($halaman,450,100,50);

// Memplot dengan isian warna
pdf_fill_stroke($halaman);

// Menggambar persegi panjang
pdf_rect($halaman,350,25,200,150);

// Memplot tanpa isian warna
pdf_stroke($halaman);

pdf_end_page($halaman);
pdf_close($halaman);
$buf = pdf_get_buffer($halaman);
$panjangbuffer = strlen($buf);
Header("Content-type:application/pdf");
Header("Content-Length:$panjangbuffer");
Header("Content-Disposition:inline; filename=menggambar2.pdf");
echo $buf;
pdf_delete($halaman);
?>
Hasil dari skrip di atas adalah dokumen PDF seperti berikut ini.

Mari kita coba contoh menggambar berikutnya. Anda dapat membuat garis putus-putus dengan perintah pdf_setdash().
$halaman = pdf_new();
pdf_open_file($halaman);
pdf_begin_page($halaman,595,342);

// Lingkaran
pdf_setcolor($halaman,"fill","rgb", 0.8, 0.5, 0.8);
pdf_circle($halaman,400,150,75);
pdf_fill_stroke($halaman);

// Funky Arc
pdf_setcolor($halaman,"fill","rgb", 0.8, 0.5, 0.5);
pdf_moveto($halaman,200,150);
pdf_arc($halaman,300,150,50,0,120);
pdf_closepath($halaman);
pdf_fill_stroke($halaman);

// kotak dengan garis putus-putus
pdf_setcolor($halaman,"stroke","rgb", 0.3, 0.8, 0.3);
pdf_setdash($halaman,4,6);
pdf_rect($halaman,50,50,500,250);
pdf_stroke($halaman);

pdf_end_page($halaman);
pdf_close($halaman);
$buf = pdf_get_buffer($halaman);
$panjangbuffer = strlen($buf);
Header("Content-type:application/pdf");
Header("Content-Length:$panjangbuffer");
Header("Content-Disposition:inline; filename=menggambar3.pdf");
echo $buf;
pdf_delete($halaman);
?>
Inilah hasil gambar dari skrip di atas.

Satu Untuk Semua, Semuanya Dari Satu
Adakalanya kita ingin mencetak bentuk, gambar atau tulisan secara berulang pada beberapa halaman PDF yang kita akan buat. Naluri kepemalasan kita akan berontak. Bisa tidak semua perulangan ini dibuat lebih ringkas dan mudah?
Pada kondisi ini maka kita membutuhkan pola baku alias template. Dalam dunia PDF, template dikenal sebagai form XObjects. Dokumen PDF yang dibuat akan menjadi lebih kecil ukurannya dengan memanfaatkan template. Contoh skrip berikut ini dapat coba Anda pahami.
$halaman = pdf_new();
pdf_open_file($halaman);

// Muat Gambar/Logo PHP
$gambar = pdf_open_jpeg($halaman, "php-big.jpg");

// Memulai Template
$template = pdf_begin_template($halaman,595,442);
pdf_save($halaman);

pdf_place_image($halaman, $gambar, 4, 403, 0.25);
pdf_place_image($halaman, $gambar, 525, 403, 0.25);

pdf_moveto($halaman,10,395);
pdf_lineto($halaman,585,395);
pdf_lineto($halaman,585,10);
pdf_lineto($halaman,10,10);
pdf_closepath($halaman);
pdf_stroke($halaman);
pdf_moveto($halaman,10,375);
pdf_lineto($halaman,585,375);
pdf_stroke($halaman);

$font = pdf_findfont($halaman,"Times-Bold","host",0);
pdf_setfont($halaman,$font,38.0);
pdf_show_xy($halaman,"Contoh Template PDF",100,407);
pdf_restore($halaman);
pdf_end_template($halaman);

// Tutup Gambar/Logo PHP
pdf_close_image ($halaman,$gambar);

// Halaman Pertama
pdf_begin_page($halaman,595,442);
pdf_place_image($halaman, $template, 0, 0, 1.0);
pdf_setfont($halaman,$font,14.0);
pdf_show_xy($halaman,"Contoh Template PDF Halaman 1",15,380);
pdf_end_page($halaman);

// Halaman Kedua
pdf_begin_page($halaman,595,442);
pdf_place_image($halaman, $template, 0, 0, 1.0);
pdf_setfont($halaman,$font,14.0);
pdf_show_xy($halaman,"Contoh Template PDF Halaman 2",15,380);
pdf_end_page($halaman);

pdf_close($halaman);
$buf = pdf_get_buffer($halaman);
$panjangbuffer = strlen($buf);
Header("Content-type:application/pdf");
Header("Content-Length:$panjangbuffer");
Header("Content-Disposition:inline; filename=template.pdf");
echo $buf;
pdf_delete($halaman);
?>
Dokumen PDF dua halaman akan terbentuk sebagai berikut.

Contoh aplikasi dalam dunia nyata adalah untuk dokumen atau pencetakan invoice, kuitansi, packing list, dan dokumen-dokumen lain yang berbentuk form baku.
Mewarnai dengan Pola
Pola isian mirip dengan pola baku/templates, hanya saja pola isian digunakan untuk pengganti warna isian. Anda dapat menggambar kurva/path, garis atau bentuk primitif kurva lainnya (stroke), dan mengisi warna kurva/path tersebut dengan sebuah pola isian. Contoh berikut ini akan mengobarkan kembali semangat PHP kita.
$halaman = pdf_new();
pdf_open_file($halaman);

// Muat gambar untuk pola isian

$gambar = pdf_open_jpeg($halaman, "php-big.jpg");

// Membuat pola
$pola = pdf_begin_pattern($halaman,21,14,25,18,1);
pdf_save($halaman);
pdf_place_image($halaman, $gambar, 0,0,0.08);
pdf_restore($halaman);
pdf_end_pattern($halaman);

// Tutup gambar
pdf_close_image ($halaman,$gambar);

pdf_begin_page($halaman,595,842);

// Gunakan pola untuk isian dan garis gambar
pdf_setcolor($halaman, "fill", "pattern", $pola);
pdf_setcolor($halaman, "stroke", "pattern", $pola);

pdf_setlinewidth($halaman, 60.0);
pdf_circle($halaman,200,680,100);
pdf_stroke($halaman);

pdf_end_page($halaman);

pdf_close($halaman);
$buf = pdf_get_buffer($halaman);
$panjangbuffer = strlen($buf);
Header("Content-type:application/pdf");
Header("Content-Length:$panjangbuffer");
Header("Content-Disposition:inline; filename=polaisian.pdf");
echo $buf;
pdf_delete($halaman);
?>
Tandai Yang Penting
Anda dapat menandai bagian-bagian yang penting dalam dokumen PDF dengan bookmark, sehingga navigasi dokumen menjadi lebih mudah. Bookmark ini bisa berbentuk struktur pohon (tree structure) menyerupai daftar isi. Selain berupa bookmark, Anda dapat juga mempermudah navigasi dokumen dengan membuat daftar thumbnail halaman-halaman yang ada pada dokumen PDF. Contoh berikut ini akan membantu untuk mempelajari caranya.
$halaman = pdf_new();
pdf_open_file($halaman);

// Halaman Pertama
pdf_begin_page($halaman,595,842);

// Set Bookmark Awal dan Jenis Huruf
$top = pdf_add_bookmark($halaman, "Sistem Operasi");
$font = pdf_findfont($halaman,"Helvetica-Bold","host",0);

$gambar = pdf_open_jpeg($halaman, "freebsd.jpg");
pdf_add_thumbnail($halaman, $gambar);
pdf_setfont($halaman, $font, 20);
pdf_add_bookmark($halaman, "FreeBSD", $top);
pdf_show_xy($halaman, "Ini adalah halaman tentang FreeBSD", 50, 670);
pdf_place_image($halaman, $gambar, 50, 700, 1);
pdf_close_image($halaman,$gambar);
pdf_end_page($halaman);

// Halaman Kedua
pdf_begin_page($halaman,595,842);
$gambar = pdf_open_jpeg($halaman, "linux.jpg");
pdf_add_thumbnail($halaman, $gambar);
pdf_setfont($halaman, $font, 20);
pdf_add_bookmark($halaman, "Linux", $top);
pdf_show_xy($halaman, "Ini adalah halaman tentang Linux", 50, 670);
pdf_place_image($halaman, $gambar, 50, 700, 1);
pdf_close_image($halaman,$gambar);
pdf_end_page($halaman);

// Halaman Ketiga
pdf_begin_page($halaman,595,842);
$gambar = pdf_open_jpeg($halaman, "mac.jpg");
pdf_add_thumbnail($halaman, $gambar);
pdf_setfont($halaman, $font, 20);
pdf_add_bookmark($halaman, "Mac", $top);
pdf_show_xy($halaman, "Ini adalah halaman tentang Mac", 50, 670);
pdf_place_image($halaman, $gambar, 50, 700, 1);
pdf_close_image($halaman,$gambar);
pdf_end_page($halaman);

pdf_close($halaman);
$buf = pdf_get_buffer($halaman);
$panjangbuffer = strlen($buf);
Header("Content-type:application/pdf");
Header("Content-Length:$panjangbuffer");
Header("Content-Disposition:inline; filename=tandabuku.pdf");
echo $buf;
pdf_delete($halaman);
?>
Habis Ini, Terus...
Jika Anda telah mempelajari artikel ini sampai pada tahap ini, maka Anda telah memiliki dasar yang cukup untuk membuat dokumen PDF dengan PHP dan PDFLib. Keterangan mengenai fungsi-fungsi PDF yang digunakan dalam skrip contoh di artikel ini dapat Anda pelajari lebih detil pada Manual PHP yang tersedia di http://www.php.net. Selamat menjadi PDF Maker!

Fr33 Z0n3


ShoutMix chat widget