FPDI : Manipulasi Dokumen PDF (Split Halaman PDF)

FPDI adalah kumpulan kelas PHP memfasilitasi para developer untuk membaca halaman dari dokumen PDF yang ada dan menggunakannya sebagai template dalam FPDF. Sedangkan FPDF adalah kelas PHP yang memungkinkan untuk menghasilkan file PDF dengan PHP murni. Pada tutorial kali ini kita akan memanipulasi layout file pdf dari 2 halaman per lembar menjadi 1 halaman per lembar dengan ukuran tertentu. Kasus ini saya temui pada saat saya ingin mencetak sebuah file pdf dengan layout halaman yang kurang sesuai jika di jilid menjadi sebuah buku yang elegan. Sebagai gambaran berikut ilustrasinya.

test

Dari ilustrasi di atas saya ingin mengubah layout ukuran A3 Lanscape yang berisi 2 halaman berurutan menjadi ukuran A4 Portrait yang berisi 1 halaman per lembar. Bagaimana caranya ? Sebelum memulai membuat script phpnya terlebih dahulu kita download class FPDF di http://fpdf.org/ dan class FPDI di http://www.setasign.com/products/fpdi/downloads/ . Ekstrak kedua file zip dari dua class diatas dan letakkaan dalam satu folder. Hirarki direktorinya kurang lebih seperti ini :

direktori_fpdi

Sekarang kita akan coba untuk menyusun kode programnya dengan memanggil 2 file class utama dengan yaitu fpdf.php dan fpdi.php dalam folder masing-masing dengan script berikut : require_once(‘fpdf/fpdf.php’); require_once(‘fpdi/fpdi.php’); Setelah itu kita akan panggil kelas FPDI ke dalam objek baru dengan variable $pdf berikut :

$pdf = new FPDI();

Untuk menghitung jumlah halaman dalam file pdf yang akan kita manipulasi kita bisa menggunakan fungsi setSourceFile(nama_file.pdf). Sebagai contoh kita akan menggunakan file contoh.php dengan script dibawah ini :

$jumlah_halaman = $pdf->setSourceFile('contoh.pdf');

Setelah mendapatkan total jumlah halaman, kita akan menggunakan looping for dengan batas sebanyak halaman yang dihitung. Kita akan membuat halaman baru sebanyak dua kali lipat dari jumlah halaman semula. Sehingga dalam satu looping kita membuat 2 halaman baru dari satu halaman asli. Dimana halaman pertama adalah setengah halaman awal dan halaman kedua adalah setengah halaman sisanya. Untuk mengimpor tiap halaman kita bisa menggunakan fungsi importPage(halaman_ke) sesuai dengan nilai perulangan looping for yang kita buat. Misalnya nilai dalam for adalah 1 maka kita impor halaman 1 dan seterusnya hingga sampai batas akhir total halaman. Yang tidak kalah penting adalah mengatur ukuran halaman baru dengan referensi ukuran halaman template (halaman file asli). Untuk mendapatkan ukuran file template kita bisa menggunakan fungsi getTemplateSize(file_impor). Fungsi tersebut akan menhasilkan array dengan nila lebar, tinggi, posisi horizontal, maupun posisi vertical. Dengan demikian untuk mendapatkan lebar dokumen asli kita bisa menggunakan array [w] dan tinggi dengan array[h]. Kemudian kita akan mengatur ukuran dokumen baru dengan lebar dokumen baru sebesar setengah dari lebar dokumen asli dan tinggi dokumen baru dengan nilai sama dengan tinggi dokumen asli. Sehingga bisa di tuliskan dalam kode :

$ukuran = $pdf->getTemplateSize($template);
$lebar = $ukuran['w'];
$tinggi = $ukuran ['h'];
$lebar_baru = $lebar/2;
$tinggi_baru = $tinggi;

Jangan lupa untuk membuat halaman baru pada dokumen manipulasi dengan fungsi addPage(‘orintasi_halamana(P/L)’,array(ukuran_lebar_baru,ukuran_tinggi_baru)), dilanjutkan dengan impor halaman lama ke halaman baru dengan fungsi useTemplate(halaman_impor,posisi_horizontal,posisi_vertikal,lebar_dokumen,tinggi dokumen). Dalam hal ini kita akan mengatur untuk halaman baru pertama kita letakkan halaman 1 dokumen lama dengan ukuran template tetap A3 ke dalam ukuran dokumen A4 dalam posisi horizontal x di 0 dan vertical y di 0 juga sehingga yang tercetak adalah setengah halaman awal A3 dokumen lama bagian kanan. Selanjutnya buat halaman baru lagi dengan ukuran seperti halaman baru pertama dengan mengimpor halaman 1 dokumen lama dengan ukuran template tetap A3 ke dalam ukuran A4 dengan posisi digeser ke samping sejauh setengah lebar dokumen lama. Lebih lengkapnya lihat script berikut :

$pdf->addPage('P',array($lebar_baru,$tinggi_baru));
$pdf->useTemplate($template,0,0,$lebar,$tinggi);
$pdf->addPage('P',array($lebar_baru,$tinggi_baru));
$pdf->useTemplate($template,-$lebar_baru,0,$lebar,$tinggi);

Terakhir kita panggil fungsi Output(); untuk menampilkan manipulasi dokumen pdf yang baru. Dan kita dapati kalau halaman pdf berubah ukuran dan berubah layoutnya. Silakan download file lengkap tutorialnya dan pelajari. Jika di rangkai maka keseluruhan kodenya dapat dituliskan sebagai berikut :

<!--?php
require_once('fpdf/fpdf.php');
require_once('fpdi/fpdi.php');

// panggil kelas FPDI
$pdf = new FPDI();

// mendapatkan jumlah halaman pdf
$jumlah_halaman = $pdf--->setSourceFile('contoh.pdf');
// iterasi seluruh halaman pdf
for ($hal = 1; $hal <= $jumlah_halaman; $hal++) {
    // impor halaman pdf
    $template = $pdf->importPage($hal);
    // mendapatkan ukuran template pdf
    $ukuran = $pdf->getTemplateSize($template);
    $lebar = $ukuran['w'];
    $tinggi = $ukuran ['h'];
    $lebar_baru = $lebar/2;
    $tinggi_baru = $tinggi;
  
    $pdf->addPage('P',array($lebar_baru,$tinggi_baru));
    // meletakkan setengah halaman impor kiri ke halaman baru:
    $pdf->useTemplate($template,0,0,$lebar,$tinggi);

    $pdf->addPage('P',array($lebar_baru,$tinggi_baru));
    // meletakkan setengah halaman impor kanan ke halaman baru:
    $pdf->useTemplate($template,-$lebar_baru,0,$lebar,$tinggi);
}

$pdf->Output();

?>