Javaziez

All About Code

Menggunakan FPDF di Codeigniter

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.com\n 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.

Incoming search terms:

11 Responses so far.

  1. Nova says:

    Lagi seraching tentang FDPF.. eh malah nyampe kesini am mbah Google,, hehe
    keren Zis.

  2. javaziez says:

    mbah Google emang tukang ojek sejati :D

  3. Tri Harnanto says:

    mantab bro, cuma kalo bisa dikasih file download dong biar langsung bisa kita tessst, kira2 kalo pake CI 2.0 banyak berubah ga codenya bro?

    • javaziez says:

      makasih sarannya.
      saya juga belum mencoba di CI 2.0 tapi pakai CI 2.0 kemungkinan gak berubah kok kodenya, mungkin juga ada settingan lain yang diperlukan.

      • Dayane says:

        In application/labraries/fdf.php fixed:/*# oerdvire the default TCPDF config fileif(!defined( K_TCPDF_EXTERNAL_CONFIG’)) {define( K_TCPDF_EXTERNAL_CONFIG’, TRUE);}*/but not display the contents. Can you give examples of this section for CI 2.0.2

    • Andres says:

      hi, sorry to bother you, I relaly like your U extended comment plugin, works great only the reply function does not work. Commenting works but replying on a comment shows the editor but no cursor.hope you can help thanx

  4. fikryaoza says:

    adakah library sejenis selain fpdf?

    • javaziez says:

      library untuk buat pdf di php? banyak mas. diantaranya ezpdf.

    • Ossy says:

      Hi,I have installed your pliugn. It was not what I was looking for and deactivated it and deleted, but it is still there and re-formats my blog.Please can you tell me how to remove it.JamesP.S. I deleted the whole pliugn directory a0 a0u-more-recent-posts a0still no effect.

  5. Anda membuat beberapa poin yang baik di sana. Saya melakukan pencarian pada topik dan menemukan kebanyakan orang akan setuju.


*

Subscribe to email feed

  • RSS
  • Delicious
  • Digg
  • Facebook
  • Twitter
  • Linkedin
  • Youtube

Koneksi PHP 5.3 ke S

Ketika kita terbiasa menggunakan XAMPP, adakalanya ketika kita diharuskan membuat ...

SQLSRV di PHP 5.4

Sudah menggunakan PHP versi 5.4 keatas? Bagi pengembang aplikasi mungkin ...

WampServer 2.2 (WAMP

Sudah lama Wamp yang saya gunakan tidak diupdate, saya mencoba ...

Install Ubuntu 12.04

Install Ubuntu 12.04 menggunakan CD Sudah lama tidak update Ubuntu, saya ...

Membuat Template Web

Template atau kerangka wadah dalam sebuah website adalah sesuatu yang ...