Kamis, 27 Agustus 2015

Membuat Laporan PDF Dengan FPDF Pada PHP

Pernahkah kalian merasa kesulitan membuat laporan pada aplikasi yang berbasis web? Karena biasanya, laporan yang ditunjukkan hanyalah halaman html yang otomatis di print. Tentu saja, ada banyak kelemahan membuat laporan dengan cara itu. Salah satunya adalah penomoran halaman. Di html kita tidak bisa memecah halaman dan memberi nomor halaman. Selain itu, tidak semua browser memberikan fitur print preview sehingga kita tidak bisa melihat apakah hasil yang akan dicetak sesuai atau tidak. Berbeda dengan Visual Basic atau Delphi yang memiliki Cristal Report.

Untuk mengatasi masalah tersebut, kita bisa membuat laporan dalam bentuk pdf menggunakan library php. Tentunya ini cukup memudahkan bagi para programmer web untuk membuat laporan yang lebih rapi, dan sesuai dengan kebutuhan dari aplikasi web yang sedang dibuat.

Ada banyak sekali library php yang bisa digunakan untuk membuat laporan dalam bentuk pdf. Tapi di sini kita akan sama-sama belajar membuat laporan menggunakan library FPDF.

Untuk mengawalinya, mari kita berkenalan dengan FPDF terlebih dahulu.

FPDF adalah PHP class yang memungkinkan untuk menghasilkan file PDF dengan PHP murni, artinya tanpa menggunakan library PDFLib. F dari FPDF singkatan Free. Anda dapat menggunakannya untuk setiap jenis penggunaan dan memodifikasi sesuai kebutuhan Anda.

FPDF memiliki keuntungan lain: fungsi tingkat tinggi. Berikut adalah daftar fitur utama:
  • Pilihan ukuran Unit, format halaman dan margin
  • Halaman header dan footer manajemen
  • Halaman otomatis istirahat
  • Otomatis istirahat garis dan teks pembenaran
  • Dukungan gambar (JPEG, PNG dan GIF)
  • Warna
  • Link
  • TrueType, Type1 dan dukungan encoding
  • Kompresi halaman
FPDF tidak memerlukan ekstensi (kecuali zlib untuk mengaktifkan kompresi dan GD untuk dukungan GIF). Ia bekerja dengan PHP 4 dan PHP 5 (versi terbaru membutuhkan setidaknya PHP 4.3.10).

Baiklah. Setelah kita kenalan dengan FPDF sekarang kita akan memasang FPDF itu pada projek aplikasi web kita. Tapi, sebelum itu unduh dulu FPDF di http://fpdf.org/en/download.php. Pilih versi yang ingin kalian unduh, kemudian tekan link ZIP yang ada di bawahnya. Versi terbaru dari FPDF ketika saya menulis ini adalah v1.7.



Sebenarnya, di dalam file yang kita unduh tadi sudah ada referensi perintah-perintah yang digunakan dalam FPDF dan juga tutorialnya. Tentu saja berbahasa inggris. Kalau mau referensi yang berbahasa indonesia, ada juga kok. Tinggal tekan link seperti dalam gambar.


Memasang FPDF

Setelah kita mengunduh FPDF, ektrak file zip itu dan salin hasil ekstak itu ke dalam folder projek kita. Oh, iya. Pastikan komputer atau laptop yang kita gunakan sudah terinstall aplikasi untuk membaca file PDF seperti Foxit Reader atau Adobe Acrobat agar browser bisa menampilkan dokumen PDF dengan baik.

Menggunakan FPDF 

Untuk sampel pertama, kita akan membuat sebuah kalimat sederhana menggunakan FPDF.

<?php
require('FPDF/fpdf.php');  //pastikan path atau alamat FPDF sesuai
$pdf = new FPDF();
$pdf->AddPage();  //membuat halaman baru
$pdf->SetFont('Arial','B',16);  //memilih font Arial Bold dengan ukuran 16pt
$pdf->Cell(40,10,'Selamat Datang di FPDF!'); //membuat sebuah cell dengan panjang 40 dan tinggi 10
                                             //yang berisi tulisan 'Selamat Datang di FPDF'

$pdf->Output();  //hasilnya dicetak
?>

Dan hasilnya sebagai berikut.


Membuat Header, Footer, Penomoran Halaman dan Gambar

Perhatikan script berikut :

<?php
require('FPDF/fpdf.php');

// kita akan membuat class baru yang mewarisi sifat dari class FPDF
// tujuannya agar lebih memudahkan editing
class PDF extends FPDF{
// function Header dan Footer akan otomatis dipanggil untuk membuat header dan footer

  function Header()
  {
      // logo atau gambar, 
      // 'logo.php' di bawah berarti path atau alamat gambar
      // dengan panjang posisi X = 10, Y = 6, dan panjang 30 
      $this->Image('logo.png',10,6,30);
      // arial bold 15
      $this->SetFont('Arial','B',15);
      // membuat cell kosong dengan panjang 80
      $this->Cell(80);
      // judul
      $this->Cell(30,10,'Ini Judul',1,0,'C');
      // line break dengan tinggi 20
      $this->Ln(20);
  }

  function Footer()
  {
      // mengatur posisi 1,5 cm ke bawah
      $this->SetY(-15);
      // arial italic 8
      $this->SetFont('Arial','I',8);
      // penomoran halaman
      $this->Cell(0,10,'Page '.$this->PageNo().'/{nb}',0,0,'C');
  }
}

$pdf = new PDF();
$pdf->AliasNbPages(); // fungsi untuk mengitung jumlah total halaman
$pdf->AddPage(); // membuat halaman
$pdf->SetFont('Times','',12); // Times 12

// pengulangan agar dokumen ada isinya dan kelihatan penomorannya
for($i=1;$i<=40;$i++){
  $pdf->Cell(0,10,'Baris dalam dokumen yang ke '.$i,0,1);
}

$pdf->Output(); // menampilkan hasil...
?>
Silahkan perhatikan kode di atas. Sudah ada komentar yang saya sisipkan pada kode.

Hasilnya adalah:




FPDF Dengan MySQL

Saya memiliki tabel yang bernama tbl dalam database data, dan saya akan menampilkan seluruh data yang ada dalam tabel tbl. Perhatikan script berikut:

<?php
// pendefinisian folder font pada FPDF
define('FPDF_FONTPATH', 'FPDF/font/');
require('FPDF/fpdf.php');

// seperti sebelunya, kita membuat class anakan dari class FPDF
 class PDF extends FPDF{

  function Header(){
   $this->Image('logo.png',1,1,2.25); // logo
   $this->SetTextColor(128,0,0); // warna tulisan
   $this->SetFont('Arial','B','12'); // font yang digunakan
   // membuat cell dg panjang 19 dan align center 'C'
   $this->Cell(19,1,'LAPORAN SISWA',0,0,'C');
   $this->Ln();
   $this->Cell(19,1,'Sekolah Sementara',0,0,'C');
   $this->Ln();
   $this->SetFont('Arial','B','9');
   $this->SetFillColor(192,192,192); // warna isi
   $this->SetTextColor(0,0,0); // warna teks untuk th
   $this->Cell(6);
   $this->Cell(1,1,'No','TB',0,'L',1); // cell dengan panjang 1
   $this->Cell(1,1,'Kode','TB',0,'L',1); // cell dengan panjang 1
   $this->Cell(2,1,'Nama','TB',0,'L',1); // cell dengan panjang 2
   $this->Cell(3,1,'Alamat','TB',0,'L',1); // cell dengan panjang 3
   // panjang cell bisa disesuaikan
   $this->Ln();
  }

  function Footer(){
   $this->SetY(-2,5);
   $this->Cell(0,1,$this->PageNo(),0,0,'C');
  } 
 }

 $server = "localhost";
 $user = "root";
 $pass = "";
 $data = "data";

 $net = new mysqli($server, $user, $pass, $data);

 if($net->connect_error){
  die("Koneksi gagal: ".$net->connect_error);
 }

 $q = "select * from tbl";
 $h = $net->query($q) or die($net->error);
 $i = 0;
 
 while($d=$h->fetch_array()){
  $cell[$i][0]=$d[0];
  $cell[$i][1]=$d[1];
  $cell[$i][2]=$d[2];
  $i++;
 }
 // orientasi Potrait
 // ukuran cm
 // kertas A4
 $pdf = new PDF('P','cm','A4');
 $pdf->Open();
 $pdf->AliasNbPages();
 $pdf->AddPage();

 $pdf->SetFont('Arial','','8');
 //perulangan untuk membuat tabel
 for($j=0;$j<$i;$j++){
  $pdf->Cell(6);
  $pdf->Cell(1,1,$j+1,'B',0,'C');
  $pdf->Cell(1,1,$cell[$j][0],'B',0,'C');
  $pdf->Cell(2,1,$cell[$j][1],'B',0,'L');
  $pdf->Cell(3,1,$cell[$j][2],'B',0,'L');
  $pdf->Ln();
 }

 $pdf->Output(); // ditampilkan

?>
Dan hasilnya...




Saya rasa sudah cukup yang saya sampaikan. Tutorial lengkap silahkan kunjungi http://fpdf.org/en/tutorial/index.php, walaupun bahasa inggris ya. Tapi, jika ada pertanyaan jangan sungkan untuk bertanya atau komen.

15 komentar:

  1. Tutorial yang bagus gan.. Trimakasih


    kunjungi situs tutorial membuat website _www.onphpid.com

    BalasHapus
  2. gan kalo mau menampilkan datepicker gimana ya?

    BalasHapus
  3. gan kalau bikin total nya gimana ya gan.?

    BalasHapus
  4. Bagus dan sangat lengkap tutorial@ gan

    BalasHapus
  5. Maksih gan tutorialnya sangat membantu sekali....
    ^^

    BalasHapus
  6. gan.. bantuin ane buat ginian gan,, kok ane gabisa2.. help

    BalasHapus
  7. gan.. bantuin ane buat ginian gan,, kok ane gabisa2.. help

    BalasHapus
  8. Selamat sore, mohon petunjuknya bagaimana cara menampilkan 2 tabel yang berbeda dalam 1 file pdf menggunakan fpdf tanpa menggabungkan (join) 2 tabel tersebut.
    Misal saya punya tabel a dan b.
    Saya ingin menampilkan tabel a kemudian di bawahnya tabel b dalam 1 file pdf.

    BalasHapus
    Balasan
    1. Lebih mudah dan simple menggunakan mpdf,karena cara menampilkan tampilan dan data nya menggunakan html ,css dan php

      Hapus
  9. mas bayu untuk perintah untuk inputnya membuat form sendiri ya? sebab dari script diatas script untuk inserting ke databasenya tidak disertakan

    BalasHapus