Kita pasti sering menggunakan file PDF untuk membuat laporan, surat, ataupun kwitansi di aplikasi berbasis web. FPDF merupakan salah satu fungsi yang digunakan untuk membuat file PDF di aplikasi web. Sekarang kita coba menggunakan FPDF di dalam framework Codeigniter.

Pertama, kita harus simpan dulu paket FPDF ke dalam folder helpers yang berada di folder application. Untuk mendapatkan paket FDPF, silahkan download di sini : FPDF

Kita buat database untuk menyimpan data yang akan kita tampilkan di file pdf. Di database tersebut kita buat tabel dengan nama “barang”. 

CREATE TABLE `demo`.`barang` (
`kodebarang` VARCHAR( 20 ) NOT NULL ,
`namabarang` VARCHAR( 50 ) NOT NULL ,
`hargasatuan` INT NOT NULL ,
PRIMARY KEY ( `kodebarang` )
) ENGINE = MYISAM ;

Lalu tambahkan satu record data :

INSERT INTO `demo`.`barang` (
`kodebarang` ,
`namabarang` ,
`hargasatuan`
)
VALUES (
'A001', 'Printer', '700000'
);

Setelah ini, kita buat lagi satu tabel dengan nama “transaksi”.

CREATE TABLE `demo`.`transaksi` (
`kodetransaksi` VARCHAR( 10 ) NOT NULL ,
`kodebarang` VARCHAR( 20 ) NOT NULL ,
`quantity` INT( 5 ) NOT NULL ,
`harga` INT( 10 ) NOT NULL ,
`tanggal` DATE NOT NULL ,
PRIMARY KEY ( `kodetransaksi` )
) ENGINE = MYISAM ;

Kita inputkan datanya untuk tabel transaksi :

INSERT INTO `demo`.`transaksi` (
`kodetransaksi` ,
`kodebarang` ,
`quantity` ,
`harga` ,
`tanggal`
)
VALUES (
'TR01', 'A001', '2', '1400000', '2012-02-08'
), (
'TR02', 'A001', '1', '700000', '2011-03-16'
);

Setelah kita buat databasenya dan menyimpan fpdf di folder helpers. Sekarang kita buat view dengan nama file transaksi_view.php, dimana untuk demo ini, kita cukup buat sebuah button yang akan menampilkan report pdf-nya.

<html>
<head>
<title>Report dengan FPDF</title>
</head>
<body>
<input type="button" name="btn_report" value="Report" onclick=location.href="<?php echo $onclick_report; ?>" />
</body>
</html>

Lalu kita buat file controllers dengan nama file report.php.

<?php

class Report extends Controller
{
  function Report()
  {
    parent::Controller();
    $this->load->model("report_model","",true);
  }

  function index()
  {
    $data['onclick_report'] = site_url()."report/cetak/"; // button report
    $this->load->view('transaksi_view', $data);
  }

  function cetak()
  {
    $kodebarang = "A001";

    // ambil data dengan memanggil fungsi di model
    $temp_rec = $this->report_model->transaksi($kodebarang);
    $num_rows = $temp_rec->num_rows();

    if($num_rows > 0) // jika data ada di database
    {
      // memanggil (instantiasi) class reportProduct di file print_rekap_helper.php
      $a=new reportProduct();
      // anda dapat membuat report lainnya dalam satu file print_rekap_helper.php
      // dengan cukup mengubah setKriteria dan membuat kondisi (elseif) di file print_rekap_helper.php
      $a->setKriteria("transaksi");
      // judul report
      $a->setNama("DATA TRANSAKSI UNTUK BARANG ".$kodebarang);
      // buat halaman
      $a->AliasNbPages();
      // Potrait ukuran A4
      $a->AddPage("P","A4");

      // ambil data dari database
      $data=$temp_rec->row();

      $a->Ln(2); // spasi enter
      $a->SetFont('Arial','B',8); // set font,size,dan properti (B=Bold)
      $a->Cell(0,4,'Kode Barang : '.$data->kodebarang,0,1,'L');
      $a->Cell(0,4,'Nama Barang : '.$data->namabarang,0,1,'L');
      $a->Cell(0,4,'Harga Satuan : '.number_format($data->hargasatuan,"2",",","."),0,1,'L');
      $a->Ln(2);

      $a->SetFont('Arial','',8);
      // set lebar tiap kolom tabel transaksi
      $a->SetWidths(array(7,15,130,15,10,10));
      // set align tiap kolom tabel transaksi
      $a->SetAligns(array("R","L","L","C","C","C"));
      $a->SetFont('Arial','B',7);
      $a->Ln(2);
      // set nama header tabel transaksi
      $a->Cell(7,7,'No.',1,0,'C');
      $a->Cell(15,7,'KODE TRANSAKSI',1,0,'C');
      $a->Cell(5,7,'QUANTITY',1,0,'C');
      $a->Cell(15,7,'HARGA',1,0,'C');
      $a->Cell(15,7,'TANGGAL',1,0,'C');
      $a->Ln(7);

      $a->SetFont('Arial','',8);

      $rec = $temp_rec->result();
      $n=0;
      foreach($rec as $r)
      {
        $n++;
        $a->Row(array(($n), $r->kodetransaksi, $r->quantity, $r->harga, date("d-m-Y", strtotime($r->tanggal))));
        $a->Ln(5);
      }

      $a->Output();
    }
    else // jika data kosong
    {
      redirect('report');
    }

    exit();
  }
}
?>

Kita buat model dengan nama file report_model.php

<?PHP

class Report_model extends Model
{
  function Report_model()
  {
    parent::Model();
  }

  function transaksi($kodebarang)
  {
    $sql=" select *
    from barang as b
    inner join transaksi as t on b.kodebarang=t.kodebarang
    where b.kodebarang='".$kodebarang."'";

    return $this->db->query($sql);
  }
}
?>

Terakhir, kita buat file helper, dimana file ini sebagai perantara antara aplikasi (file controllers) dengan FPDF. kita buat file helpers dengan nama file print_rekap_helper.php yang nantinya kita simpan di folder helpers.

<?php
define('FPDF_FONTPATH', 'font/');
require('fpdf.php');

class reportProduct extends FPDF
{
  var $widths;
  var $aligns;

function SetWidths($w)
{
  $this->widths=$w;
}

function SetAligns($a)
{
  $this->aligns=$a;
}

function Row($data)
{
  $nb=0;
  for($i=0;$i<count($data);$i++)
    $nb=max($nb,$this->NbLines($this->widths[$i],$data[$i]));
  $h=(4*$nb);
  $this->CheckPageBreak($h);
  for($i=0;$i<count($data);$i++)
  {
   $w=$this->widths[$i];
   $a=isset($this->aligns[$i]) ? $this->aligns[$i] : 'L';
   $x=$this->GetX();
   $y=$this->GetY();
   $this->Rect($x,$y,$w,$h);
   $this->MultiCell($w,4,$data[$i],0,$a);
   $this->SetXY($x+$w,$y);
  }
  $this->Ln($h);
}

function CheckPageBreak($h)
{
  if($this->GetY()+$h>$this->PageBreakTrigger)
  $this->AddPage($this->CurOrientation);
}

function NbLines($w,$txt)
{
  $cw=&$this->CurrentFont['cw'];
  if($w==0)
   $w=$this->w-$this->rMargin-$this->x;
  $wmax=($w-2*$this->cMargin)*1000/$this->FontSize;
  $s=str_replace("r",'',$txt);
  $nb=strlen($s);
  if($nb>0 and $s[$nb-1]=="n")
   $nb--;
  $sep=-1;
  $i=0;
  $j=0;
  $l=0;
  $nl=1;
  while($i<$nb)
  {
   $c=$s[$i];
   if($c=="n")
   {
    $i++;
    $sep=-1;
    $j=$i;
    $l=0;
    $nl++;
    continue;
   }
   if($c==' ')
    $sep=$i;
   $l+=$cw[$c];
   if($l>$wmax)
   {
    if($sep==-1)
    {
     if($i==$j)
      $i++;
    }
    else
     $i=$sep+1;
    $sep=-1;
    $j=$i;
    $l=0;
    $nl++;
   }
   else
   $i++;
 }
 return $nl;
}

function Header()
{
  if($this->kriteria=="transkip")
  {
   $this->image('images/logo.jpg',12,14,25,25);

   $nm=$this->nama;

   $this->Ln(2);
   $this->SetFont('Arial','B',10);
   $this->MultiCell(0,4," TOKO ONLINE ELEKTRONIK",0,1,'C');
   $this->SetFont('Arial','B',12);
   $this->MultiCell(0,6," SUPERSTARS",0,1,'C');
   $this->SetFont('Arial','',8);
   $this->MultiCell(0,4," Jalan Pegangsaan No.21 Blok A4, Telp. 021-47626448, 2849622, 9337272, 8425273
   n Fax. 021-202   8986 Email : ssrvices@superstars.comn Jakarta Barat",0,1,'C');
   $this->Ln(5);
   $this->SetFont('Arial','B',10);
   $this->MultiCell(0,4,"===========================================================================================",0,1,'C');
   $this->Cell(0,10,$this->nama,2,1,'C');
  }
}

function Footer()
{
  //Position at 1.5 cm from bottom
  //$this->SetY(-15);
  //Arial italic 8
  //$this->SetFont('Arial','',6);
  //Page number
  //$this->Cell(0,10,'Report',0,0,'C');
}

public function setKriteria($i)
{
  $this->kriteria=$i;
}

public function getKriteria()
{
  return $this->kriteria;
}

public function setNama($n)
{
  $this->nama=$n;
}

public function getNama()
{
  return $this->nama;
}

public function setDataset($n)
{
  $this->dataset=$n;
}

public function getDataset()
{
  return $this->dataset;
}

}

?>

Untuk menampilkan logo,

$this->image('images/logo.jpg',12,14,25,25);

kita simpan file gambarnya di dalam folder images yang berada di dalam folder website.

Setelah itu, kita buka file autoload.php di dalam folder config dan menambahkan helper yang tadi kita buat.

$autoload['helper'] = array('print_rekap');

Selesai sudah program yang kita buat. Semoga bermanfaat.