[Contoh] Membuat Laporan PDF dengan PHP dan Database MySQL

Jika pada posting lalu (https://blogit.bimosaurus.com/2012/04/08/contoh-membuat-laporan-pdf-dengan-php/) telah terpaparkan tentang pembuatan laporan download PDF dengan menggunakan PHP, kali ini akan dibahas bagaimana menyusun reporting dengan PHP dalam format PDF yang susunan datanya diambil dari database MySQL. Tentu saja hal ini akan sangat berguna bagi para developer sistem informasi, karena pada umumnya sistem informasi harus memiliki proses reporting data. Proses pembuatan reporting PDF dengan menggunakan PHP ini dapat dilakukan dengan menggunakan FPDF seperti posting sebelumnya. Hanya saja prosesnya akan ditambah dengan proses pengambilan data dari database server MySQL. Proses ini tidak sulit, karena hanya menggabungkan pengambilan data, dan selanjutnya menampilkannya dalam bentuk PDF. Itu saja. Berikut contoh pengambilan data.
Katakan, kita memiliki tabel data pegawai dengan format seperti berikut:

nip nama honor status_ambil
10001 Susanto Rp. 1000000 Belum
10002 Susanti Rp. 1000000 Sudah
10003 Marwoto Rp. 2000000 Sudah
10004 Gunadi Rp. 1500000 Belum
10005 Nur Eko Rp. 1000000 Belum

Dengan format data demikian, maka pengambilan data dari dalam tabel dapat dilakukan dengan sintaks MySQL demikian :

SELECT * FROM `pegawai`

Begitu pula, sintaks ini akan dijadikan Query yang akan dieksekusi oleh PHP. Perkiraan Commandnya adalah sebagai berikut:

$sql      = "SELECT * FROM `pegawai`";
$query  = mysql_query( $sql );
while( $result=mysql_fetch_array( $query ) ){

//tampilkan

}
//telah diedit, hasil koreksi dari mas boyan_13@yahoo.co.id... tx

 

Dengan melakukan kombinasi perintah dengan pembuatan reporting PDF, maka dapat dibuat script seperti berikut:


ob_start();
define('FPDF_FONTPATH','libs/fpdf/font/');
require('libs/fpdf/fpdf.php');

if( mysql_connect( "localhost","reporting","reporting" ) ){
   mysql_select_db( "kepegawaian" );
}else{
   echo "maaf, data gagal";
}

class PDF extends FPDF {

function Header() {
$this->Image('logo_print.jpg',2,1,2);

	$this->SetFont('Arial','B',11);

	$this->Cell(0,0.75,' TUKANG HRD ',0,0,'C');

	$this->Ln();

	$this->SetFont('Arial','B',14);

	$this->Cell(0,0.75,'TOKO X',0,0,'C');

	$this->Ln();

	$this->SetFont('Arial','',9);

	$this->Cell(0,0.5,'Jl. Soekarno Hatta KM 100 Antar Bermuntah Telp (01234)123456',0,0,'C');

	$this->Ln();

	$this->Ln();
	$this->SetFont('Arial','',14);
	$this->Line(1, 4, 21, 4);

   $this->Ln();
	$this->SetFont('Arial','B',11);
   $this->Cell(0,0.75,'HRD',0,0,'C');

	$this->Ln();
}

}

	

$pdf=new PDF('P','cm','Letter');

$pdf->Open();

$pdf->AliasNbPages();

$pdf->AddPage();

$pdf->SetMargins(1.5,1,1.5);

$pdf->SetFont('Arial','B',12);


//membuat kop tabel
$x=$pdf->GetY();

$pdf->SetY($x+1);

$pdf->SetFont('Courier','B',10);

$pdf->Cell(5,0.5,'NIP',1,0,'L');
$pdf->Cell(5,0.5,'Nama',1,0,'L');
$pdf->Cell(5,0.5,'Honor',1,0,'L');
$pdf->Cell(5,0.5,'Status Ambil',1,0,'L');

//query dan arraying
$sql   ="SELECT * FROM `pegawai`";

$query = mysql_query( $sql );



while( $result= mysql_fetch_array( $query )){

   $nip = $result['nip'];
   $nama = $result['nama'];
   $honor = $result['honor'];
   $status_ambil = $result['status_ambil'];

   $pdf->SetFont('Courier','B',10);

   $pdf->Cell(5,0.5,'$nip',1,0,'L');
   $pdf->Cell(5,0.5,'$nama',1,0,'L');
   $pdf->Cell(5,0.5,'$honor',1,0,'L');
   $pdf->Cell(5,0.5,'$status_ambil',1,0,'L');
}


$pdf->Output();

Berikut kira-kira hasilnya akan seperti demikian : https://blogit.bimosaurus.com/demo/reporting.php

Semoga berguna

52 thoughts on “[Contoh] Membuat Laporan PDF dengan PHP dan Database MySQL

    1. Terimakasih mas, niat saya membuat contoh, ternyata saya salah tanda di sini $while. Harusnya adalah while saja

      while( $result=mysql_fetch_array( $query ) ){
      
      //tampilkan
      
      }
      

      Terimakasih sekali mas koreksinya, saya edit postingnya

  1. bebrapa tutorial pembuatan pdf dengan php, namun hasilnya ketika data yang ditampilkan dalam pdf banyak (bisa lebih dari satu lembar) hasil di pdf lembar pertama bagus menampung beberapa array sampai margin bawah, namun pada page pdf berikutnya hanya menampilkan 1 array tiap page-nya, kira2 apa yang salah

    1. Mas Tady, mohon maaf, menunggu ya, karena saya perlu melakukan percobaan. Beberapa project yang pernah saya kerjakan menggunakan halaman lebih dari satu juga. Namun sepertinya tidak apa apa, atau karena saya kurang teliti. Mungkin saya coba siang ini, hingga bertemu dengan kasus yang anda temui.

    1. Bisa memanfaatkan RELATIONSHIP.. Relationship bisa terbangun dengan Foreign Key. Namun secara sederhana akan saya jelaskan disini dan sekaligus nanti akan saya buat posting. Teknik yang biasa digunakan adalah:
      1. Memanfaatkan SUBQUERY.
      2. Memanfaatkan perintah JOIN.

      Sebut saja saya punya dua tabel : biodata, dan gaji. Kira-kira isinya sebagai berikut:

      biodata

      nip nama_pegawai
      10001 bimo
      10002 candra
      10003 dani

      gaji

      nip jumlah
      10001 10000000
      10002 5000000
      10003 7000000

      Dua tabel tersebut berhubungan dengan nip. Tabel gaji tidak membawa nama_pegawai. Cara mengambil isi tabel dengan subquery adalah dengan cara :

      $sql = "SELECT *, `gaji`.`jumlah` FROM `pegawai`";
      

      atau dengan cara

      $sql = "SELECT * FROM `pegawai` LEFT JOIN `gaji` ON `pegawai`.`nip`=`gaji`.`nip`";
      

      Semoga bisa dipahami.. selamat mencoba semoga bermanfaat

  2. Warning: include(helveticab.php) [function.include]: failed to open stream: No such file or directory in C:\xampp\php\PEAR\fpdf.php on line 541

    Warning: include() [function.include]: Failed opening ‘helveticab.php’ for inclusion (include_path=’.;C:\xampp\php\PEAR’) in C:\xampp\php\PEAR\fpdf.php on line 541
    FPDF error: Could not include font metric file

    Mas klo ada tulisan spt itu, ngebenerinnya gmn?
    Sangat ditunggu jawabannya

    1. Sepertinya anda menggunakan XAMPP dengan PEAR. Dalam PEAR memang telah ada fitur-fitur untuk pengolahan pdf xls dan image. Namun jika include direktori anda tepat php dapat dipaksa menggunakan source dari yang kita download. Bisakah saya mendapatkan sedikit source, agar dapat ikut memetakan masalah anda?

      1. Pada kasus ini coba pada :

        define(‘FPDF_FONTPATH’,’font’);

        folder font nya terletak dimana … itu sahaja

        1. Untuk FPDF_FONTPATH adalah letak direktori FONT, jadi tergantung kita menempatkan direktori FPDF itu dimana. Misal saya meletakkan script saya di

          – data.php
          – lib
          – fpdf

          Maka JIKA script pembentuk PDF saya ada di ‘data.php’ maka definisi fontpath adalah

          define('FPDF_FONTPATH','./lib/fpdf');
          

          Selamat mencoba

  3. Selamat sore, mohon petunjuknya bagaimana cara menampilkan 2 tabel yang berbeda dalam 1 file pdf menggunakan fpdf,
    Misal saya punya tabel a dan b.
    Saya ingin menampilkan tabel a kemudian tabel b dalam 1 file pdf.
    Please give me a favour.
    Thanx before..

  4. 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.
    Please give me a favour.
    Thanx before..

  5. sama semeprti mas tady kasus saya juga seperti ini “ketika data yang ditampilkan dalam pdf banyak (bisa lebih dari satu lembar) hasil di pdf lembar pertama bagus menampung beberapa array sampai margin bawah, namun pada page pdf berikutnya hanya menampilkan 1 array tiap page-nya, kira2 apa yang salah?”
    sudah ada solusinya???

  6. mas bimo… saya sudah mengikuti tutorial di atas dan cuma menyesuaikan dengan database punya saya, tapi anehnya, kok data yg ditampilkan kosong.
    ini contoh script saya

    $pdf->Cell(2,0.5,’TAHUN’,1,0,’C’);
    $pdf->Cell(2,0.5,’ANGKATAN’,1,0,’C’);
    $pdf->Cell(3,0.5,’KODE BIMTEK’,1,0,’C’);
    $pdf->Cell(5,0.5,’NAMA BIMTEK’,1,0,’C’);
    $pdf->Cell(6,0.5,’JUDUL BIMTEK’,1,0,’C’);
    $pdf->Cell(5,0.5,’TANGGAL’,1,0,’C’);
    $pdf->Cell(6,0.5,’PENGAJAR’,1,0,’C’);
    //query dan arraying
    $sql = mysql_query(“SELECT * FROM bimbingan LEFT JOIN pengajar ON bimbingan.id_bimbingan = pengajar.id order by id_bimbingan DESC”);

    while( $result= mysql_fetch_array( $sql )){

    $tahun = $result[‘tahun’];
    $angkatan = $result[‘angkatan’];
    $bimtek = $result[‘bimtek’];
    $id_namabimtek = $result[‘id_namabimtek’];
    $id_judul = $result[‘id_judul’];
    $tgl = $result[‘tgl_mulai’];
    $pengajar = $result[‘nama_pengajar’];

    $pdf->SetFont(‘Courier’,’B’,10);

    $pdf->Cell(2,0.5,’$tahun’,1,0,’L’);
    $pdf->Cell(2,0.5,’$angkatan’,1,0,’L’);
    $pdf->Cell(3,0.5,’$bimtek’,1,0,’L’);
    $pdf->Cell(5,0.5,’$id_namabimtek’,1,0,’L’);
    $pdf->Cell(6,0.5,’$id_judul’,1,0,’L’);
    $pdf->Cell(5,0.5,’$tgl’,1,0,’L’);
    $pdf->Cell(6,0.5,’$pengajar’,1,0,’L’);
    }

    1. Kode yg ini:
      $pdf->Cell(2,0.5,’$tahun’,1,0,’L’);
      $pdf->Cell(2,0.5,’$angkatan’,1,0,’L’);
      $pdf->Cell(3,0.5,’$bimtek’,1,0,’L’);
      $pdf->Cell(5,0.5,’$id_namabimtek’,1,0,’L’);
      $pdf->Cell(6,0.5,’$id_judul’,1,0,’L’);
      $pdf->Cell(5,0.5,’$tgl’,1,0,’L’);
      $pdf->Cell(6,0.5,’$pengajar’,1,0,’L’);

      Ganti dengan yg ini:
      $pdf->Cell(2,0.5,$tahun,1,0,’L’);
      $pdf->Cell(2,0.5,$angkatan,1,0,’L’);
      $pdf->Cell(3,0.5,$bimtek,1,0,’L’);
      $pdf->Cell(5,0.5,$id_namabimtek,1,0,’L’);
      $pdf->Cell(6,0.5,$id_judul,1,0,’L’);
      $pdf->Cell(5,0.5,$tgl,1,0,’L’);
      $pdf->Cell(6,0.5,$pengajar,1,0,’L’);

      tanda petik satu dihilangkan CMIIW

      1. Benar mas, dan saya berterimakasih sekali tambahannya, dan maaf belum membantu banyak kemarin. Petik memang sebenarnya hanya digunakan untuk string bebas. Kalau variabel tidak perlu lagi, dan saya tidak teliti 🙂
        Terimakasih tambahannya ya mas, agar bisa dibaca oleh yang lain

  7. Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\AppServ\www\Inventory\report_armatur.php on line 4

    Warning: require(libs/fpdf/fpdf.php) [function.require]: failed to open stream: No such file or directory in C:\AppServ\www\Inventory\report_armatur.php on line 13

    Fatal error: require() [function.require]: Failed opening required ‘libs/fpdf/fpdf.php’ (include_path=’.;C:\php5\pear’) in C:\AppServ\www\Inventory\report_armatur.php on line 13

    mas kalo msalahnya seperti ini bagaimana ya?

  8. Mas broo saya mau tanya klo saya mau menampilkan database saya secara baris itu gmana yah?? jadi contonhnya
    nama:$result[‘nama’];
    tahun:$result[‘tahun’];
    jadi outputnya nanti
    1.nama:abdul
    tahun:1998
    2.nama:ahamad
    tahun:1997
    2.nama:jupri
    tahun:1999

  9. mas.. saya punya masalah ni untuk mendownload file pdf. mohon bantuaannya. berikut saya kirimkan databases-nya beserta script-nya.

    — phpMyAdmin SQL Dump
    — version 3.4.5
    http://www.phpmyadmin.net

    — Host: localhost
    — Generation Time: Nov 14, 2012 at 06:10 AM
    — Server version: 5.5.16
    — PHP Version: 5.3.8

    SET SQL_MODE=”NO_AUTO_VALUE_ON_ZERO”;
    SET time_zone = “+00:00”;

    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8 */;


    — Database: `mumet`

    — ——————————————————–


    — Table structure for table `diklat`

    CREATE TABLE IF NOT EXISTS `diklat` (
    `id_peg` int(4) NOT NULL AUTO_INCREMENT,
    `no_ser` varchar(40) NOT NULL,
    `nama` varchar(40) NOT NULL,
    `instansi` varchar(100) NOT NULL,
    `berkas` varchar(50) NOT NULL,
    PRIMARY KEY (`id_peg`),
    UNIQUE KEY `no_ser` (`no_ser`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=15 ;


    — Dumping data for table `diklat`

    INSERT INTO `diklat` (`id_peg`, `no_ser`, `nama`, `instansi`, `berkas`) VALUES
    (10, ‘098/2012/DDN/01’, ‘tes pdf’, ‘tse’, ‘berkas/DEVI NATALIA, S.Pd.pdf’),
    (11, ‘090000000’, ‘Tes Aja’, ‘DINKLIK’, ‘berkas/YANA FEBRIANTI, ST.pdf’),
    (12, ‘1980’, ‘huuuuuuuuuuuuuuuuuuuuuuuuuuuu’, ‘huuuuuuuuuuuuuu’, ‘berkas/UTAMI, S. Sos.pdf’),
    (13, ‘000002323’, ‘wewqeqwe’, ‘qweweqw’, ‘berkas/A. RAFIK, S.Pd.I.pdf’),
    (14, ‘teas/01/’, ‘teas’, ‘teas’, ‘berkas/HAMIDI,S.Pd.pdf’);

    /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
    /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
    /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

    index.php

    Belajar Buat Aplikasi Sertifikat Diklat

    Form Input Data

    <?php
    if (!empty($_GET['message']) && $_GET['message'] == 'success') {
    echo 'Berhasil menambah data!’;
    }
    ?>

    Nomor Sertifikat
    :

    Nama
    :

    Instansi
    :

    Berkas
    :

    Lihat Data

    config.php

    simpan.php
    0)
    { die(“Nomor Sertifikat telah Terdaftar!”); }
    else
    {
    if (!empty($_FILES[“berkas”][“tmp_name”]))
    //if (isset($_POST[‘submit’])&& isset($_FILES[‘berkas’]))
    {
    $namafolder=”berkas/”; //tempat menyimpan file
    $jenis_berkas=$_FILES[‘berkas’][‘type’];
    if($jenis_berkas==”application/pdf” || $jenis_berkas==”application/rar” || $jenis_berkas==”application/zip”)
    {
    $berkas = $namafolder . basename($_FILES[‘berkas’][‘name’]);
    if (!move_uploaded_file($_FILES[‘berkas’][‘tmp_name’], $berkas))
    {
    die(“berkas gagal dikirim”);
    }
    }
    else { die(“Jenis berkas yang anda kirim salah. Harus .pdf.rar .zip”); }
    } //end if cek file upload

    mysql_query(“insert into diklat(no_ser,nama,instansi,berkas)” .
    “values(‘$no_ser’,’$nama’,’$instansi’,’$berkas’)”) or die(mysql_error());

    echo “Berhasil”;
    header(“location:view.php”);
    } //end if terdaftar
    }
    ?>

    view.php

    Data Pegawai

    function cetakhalaman()
    {
    window.print();
    }

    Data Pegawai

    + Tambah Data

    Nomor
    Nomor Sertifikat
    Nama
    Instansi
    berkas
    Opsi

    Edit || Hapus || Download

    ——————————–
    folder untuk menyimpan file .pdf bernama berkas.
    masalahnya : file yang diinputkan sudah masuk di folder berkas, waktu mau didownload tidak bisa. mohon bantuaannya. sudah mentok di download mas. mohon untuk di kirimkan ke fadixz123@gmail.com
    terima kasih

    1. ada beberapa library lagi selain FPDF yang bisa digunakan untuk itu. Untuk FPDF sepertinya saya belum menemukan solusi praktisnya. Tapi untuk hal itu menunggu dulu ya mas. 🙂

  10. Tanya mas, mengapa fpdf saya page 1 isa menampilkan 53 data dari mysql, tapi page selanjutnya hanya menampilkan 1 data saja, berulang trus sampai data habis ( page 2 data ke 54, page 3 data ke 55, page 4 data ke 56 dst

    1. mas, bolehkan saya melihat sebagian script untuk men-generate PDF tersebut? bagian yang perlu diperhatikan adalah tentang ukuran kertas, kemudian berarti kita juga memfungsikan halaman tersebut seperti konsep paging dalam menampilkan data

  11. maksud dari error tersebut :
    Warning: include(libs/fpdf/font/helveticab.php) [function.include]: failed to open stream: No such file or directory in C:\xampp\htdocs\tony\pdf\fpdf.php on line 1145

    Warning: include() [function.include]: Failed opening ‘libs/fpdf/font/helveticab.php’ for inclusion (include_path=’.;\xampp\php\PEAR’) in C:\xampp\htdocs\tony\pdf\fpdf.php on line 1145
    FPDF error: Could not include font definition file

  12. _dochecks();
    // Initialization of properties
    $this->page = 0;
    $this->n = 2;
    $this->buffer = ”;
    $this->pages = array();
    $this->PageSizes = array();
    $this->state = 0;
    $this->fonts = array();
    $this->FontFiles = array();
    $this->diffs = array();
    $this->images = array();
    $this->links = array();
    $this->InHeader = false;
    $this->InFooter = false;
    $this->lasth = 0;
    $this->FontFamily = ”;
    $this->FontStyle = ”;
    $this->FontSizePt = 12;
    $this->underline = false;
    $this->DrawColor = ‘0 G’;
    $this->FillColor = ‘0 g’;
    $this->TextColor = ‘0 g’;
    $this->ColorFlag = false;
    $this->ws = 0;
    // Font path
    if(defined(‘FPDF_FONTPATH’))
    {
    $this->fontpath = FPDF_FONTPATH;
    if(substr($this->fontpath,-1)!=’/’ && substr($this->fontpath,-1)!=’\\’)
    $this->fontpath .= ‘/’;
    }
    elseif(is_dir(dirname(__FILE__).’/font’))
    $this->fontpath = dirname(__FILE__).’/font/’;
    else
    $this->fontpath = ”;
    // Core fonts
    $this->CoreFonts = array(‘courier’, ‘helvetica’, ‘times’, ‘symbol’, ‘zapfdingbats’);
    // Scale factor
    if($unit==’pt’)
    $this->k = 1;
    elseif($unit==’mm’)
    $this->k = 72/25.4;
    elseif($unit==’cm’)
    $this->k = 72/2.54;
    elseif($unit==’in’)
    $this->k = 72;
    else
    $this->Error(‘Incorrect unit: ‘.$unit);
    // Page sizes
    $this->StdPageSizes = array(‘a3’=>array(841.89,1190.55), ‘a4’=>array(595.28,841.89), ‘a5’=>array(420.94,595.28),
    ‘letter’=>array(612,792), ‘legal’=>array(612,1008));
    $size = $this->_getpagesize($size);
    $this->DefPageSize = $size;
    $this->CurPageSize = $size;
    // Page orientation
    $orientation = strtolower($orientation);
    if($orientation==’p’ || $orientation==’portrait’)
    {
    $this->DefOrientation = ‘P’;
    $this->w = $size[0];
    $this->h = $size[1];
    }
    elseif($orientation==’l’ || $orientation==’landscape’)
    {
    $this->DefOrientation = ‘L’;
    $this->w = $size[1];
    $this->h = $size[0];
    }
    else
    $this->Error(‘Incorrect orientation: ‘.$orientation);
    $this->CurOrientation = $this->DefOrientation;
    $this->wPt = $this->w*$this->k;
    $this->hPt = $this->h*$this->k;
    // Page margins (1 cm)
    $margin = 28.35/$this->k;
    $this->SetMargins($margin,$margin);
    // Interior cell margin (1 mm)
    $this->cMargin = $margin/10;
    // Line width (0.2 mm)
    $this->LineWidth = .567/$this->k;
    // Automatic page break
    $this->SetAutoPageBreak(true,2*$margin);
    // Default display mode
    $this->SetDisplayMode(‘default’);
    // Enable compression
    $this->SetCompression(true);
    // Set default PDF version number
    $this->PDFVersion = ‘1.3’;
    }

    function SetMargins($left, $top, $right=null)
    {
    // Set left, top and right margins
    $this->lMargin = $left;
    $this->tMargin = $top;
    if($right===null)
    $right = $left;
    $this->rMargin = $right;
    }

    function SetLeftMargin($margin)
    {
    // Set left margin
    $this->lMargin = $margin;
    if($this->page>0 && $this->xx = $margin;
    }

    function SetTopMargin($margin)
    {
    // Set top margin
    $this->tMargin = $margin;
    }

    function SetRightMargin($margin)
    {
    // Set right margin
    $this->rMargin = $margin;
    }

    function SetAutoPageBreak($auto, $margin=0)
    {
    // Set auto page break mode and triggering margin
    $this->AutoPageBreak = $auto;
    $this->bMargin = $margin;
    $this->PageBreakTrigger = $this->h-$margin;
    }

    function SetDisplayMode($zoom, $layout=’default’)
    {
    // Set display mode in viewer
    if($zoom==’fullpage’ || $zoom==’fullwidth’ || $zoom==’real’ || $zoom==’default’ || !is_string($zoom))
    $this->ZoomMode = $zoom;
    else
    $this->Error(‘Incorrect zoom display mode: ‘.$zoom);
    if($layout==’single’ || $layout==’continuous’ || $layout==’two’ || $layout==’default’)
    $this->LayoutMode = $layout;
    else
    $this->Error(‘Incorrect layout display mode: ‘.$layout);
    }

    function SetCompression($compress)
    {
    // Set page compression
    if(function_exists(‘gzcompress’))
    $this->compress = $compress;
    else
    $this->compress = false;
    }

    function SetTitle($title, $isUTF8=false)
    {
    // Title of document
    if($isUTF8)
    $title = $this->_UTF8toUTF16($title);
    $this->title = $title;
    }

    function SetSubject($subject, $isUTF8=false)
    {
    // Subject of document
    if($isUTF8)
    $subject = $this->_UTF8toUTF16($subject);
    $this->subject = $subject;
    }

    function SetAuthor($author, $isUTF8=false)
    {
    // Author of document
    if($isUTF8)
    $author = $this->_UTF8toUTF16($author);
    $this->author = $author;
    }

    function SetKeywords($keywords, $isUTF8=false)
    {
    // Keywords of document
    if($isUTF8)
    $keywords = $this->_UTF8toUTF16($keywords);
    $this->keywords = $keywords;
    }

    function SetCreator($creator, $isUTF8=false)
    {
    // Creator of document
    if($isUTF8)
    $creator = $this->_UTF8toUTF16($creator);
    $this->creator = $creator;
    }

    function AliasNbPages($alias='{nb}’)
    {
    // Define an alias for total number of pages
    $this->AliasNbPages = $alias;
    }

    function Error($msg)
    {
    // Fatal error
    die(‘FPDF error: ‘.$msg);
    }

    function Open()
    {
    // Begin document
    $this->state = 1;
    }

    function Close()
    {
    // Terminate document
    if($this->state==3)
    return;
    if($this->page==0)
    $this->AddPage();
    // Page footer
    $this->InFooter = true;
    $this->Footer();
    $this->InFooter = false;
    // Close page
    $this->_endpage();
    // Close document
    $this->_enddoc();
    }

    function AddPage($orientation=”, $size=”)
    {
    // Start a new page
    if($this->state==0)
    $this->Open();
    $family = $this->FontFamily;
    $style = $this->FontStyle.($this->underline ? ‘U’ : ”);
    $fontsize = $this->FontSizePt;
    $lw = $this->LineWidth;
    $dc = $this->DrawColor;
    $fc = $this->FillColor;
    $tc = $this->TextColor;
    $cf = $this->ColorFlag;
    if($this->page>0)
    {
    // Page footer
    $this->InFooter = true;
    $this->Footer();
    $this->InFooter = false;
    // Close page
    $this->_endpage();
    }
    // Start new page
    $this->_beginpage($orientation,$size);
    // Set line cap style to square
    $this->_out(‘2 J’);
    // Set line width
    $this->LineWidth = $lw;
    $this->_out(sprintf(‘%.2F w’,$lw*$this->k));
    // Set font
    if($family)
    $this->SetFont($family,$style,$fontsize);
    // Set colors
    $this->DrawColor = $dc;
    if($dc!=’0 G’)
    $this->_out($dc);
    $this->FillColor = $fc;
    if($fc!=’0 g’)
    $this->_out($fc);
    $this->TextColor = $tc;
    $this->ColorFlag = $cf;
    // Page header
    $this->InHeader = true;
    $this->Header();
    $this->InHeader = false;
    // Restore line width
    if($this->LineWidth!=$lw)
    {
    $this->LineWidth = $lw;
    $this->_out(sprintf(‘%.2F w’,$lw*$this->k));
    }
    // Restore font
    if($family)
    $this->SetFont($family,$style,$fontsize);
    // Restore colors
    if($this->DrawColor!=$dc)
    {
    $this->DrawColor = $dc;
    $this->_out($dc);
    }
    if($this->FillColor!=$fc)
    {
    $this->FillColor = $fc;
    $this->_out($fc);
    }
    $this->TextColor = $tc;
    $this->ColorFlag = $cf;
    }

    function Header()
    {
    // To be implemented in your own inherited class
    }

    function Footer()
    {
    // To be implemented in your own inherited class
    }

    function PageNo()
    {
    // Get current page number
    return $this->page;
    }

    function SetDrawColor($r, $g=null, $b=null)
    {
    // Set color for all stroking operations
    if(($r==0 && $g==0 && $b==0) || $g===null)
    $this->DrawColor = sprintf(‘%.3F G’,$r/255);
    else
    $this->DrawColor = sprintf(‘%.3F %.3F %.3F RG’,$r/255,$g/255,$b/255);
    if($this->page>0)
    $this->_out($this->DrawColor);
    }

    function SetFillColor($r, $g=null, $b=null)
    {
    // Set color for all filling operations
    if(($r==0 && $g==0 && $b==0) || $g===null)
    $this->FillColor = sprintf(‘%.3F g’,$r/255);
    else
    $this->FillColor = sprintf(‘%.3F %.3F %.3F rg’,$r/255,$g/255,$b/255);
    $this->ColorFlag = ($this->FillColor!=$this->TextColor);
    if($this->page>0)
    $this->_out($this->FillColor);
    }

    function SetTextColor($r, $g=null, $b=null)
    {
    // Set color for text
    if(($r==0 && $g==0 && $b==0) || $g===null)
    $this->TextColor = sprintf(‘%.3F g’,$r/255);
    else
    $this->TextColor = sprintf(‘%.3F %.3F %.3F rg’,$r/255,$g/255,$b/255);
    $this->ColorFlag = ($this->FillColor!=$this->TextColor);
    }

    function GetStringWidth($s)
    {
    // Get width of a string in the current font
    $s = (string)$s;
    $cw = &$this->CurrentFont[‘cw’];
    $w = 0;
    $l = strlen($s);
    for($i=0;$iFontSize/1000;
    }

    function SetLineWidth($width)
    {
    // Set line width
    $this->LineWidth = $width;
    if($this->page>0)
    $this->_out(sprintf(‘%.2F w’,$width*$this->k));
    }

    function Line($x1, $y1, $x2, $y2)
    {
    // Draw a line
    $this->_out(sprintf(‘%.2F %.2F m %.2F %.2F l S’,$x1*$this->k,($this->h-$y1)*$this->k,$x2*$this->k,($this->h-$y2)*$this->k));
    }

    function Rect($x, $y, $w, $h, $style=”)
    {
    // Draw a rectangle
    if($style==’F’)
    $op = ‘f’;
    elseif($style==’FD’ || $style==’DF’)
    $op = ‘B’;
    else
    $op = ‘S’;
    $this->_out(sprintf(‘%.2F %.2F %.2F %.2F re %s’,$x*$this->k,($this->h-$y)*$this->k,$w*$this->k,-$h*$this->k,$op));
    }

    function AddFont($family, $style=”, $file=”)
    {
    // Add a TrueType, OpenType or Type1 font
    $family = strtolower($family);
    if($file==”)
    $file = str_replace(‘ ‘,”,$family).strtolower($style).’.php’;
    $style = strtoupper($style);
    if($style==’IB’)
    $style = ‘BI’;
    $fontkey = $family.$style;
    if(isset($this->fonts[$fontkey]))
    return;
    $info = $this->_loadfont($file);
    $info[‘i’] = count($this->fonts)+1;
    if(!empty($info[‘diff’]))
    {
    // Search existing encodings
    $n = array_search($info[‘diff’],$this->diffs);
    if(!$n)
    {
    $n = count($this->diffs)+1;
    $this->diffs[$n] = $info[‘diff’];
    }
    $info[‘diffn’] = $n;
    }
    if(!empty($info[‘file’]))
    {
    // Embedded font
    if($info[‘type’]==’TrueType’)
    $this->FontFiles[$info[‘file’]] = array(‘length1’=>$info[‘originalsize’]);
    else
    $this->FontFiles[$info[‘file’]] = array(‘length1’=>$info[‘size1’], ‘length2’=>$info[‘size2′]);
    }
    $this->fonts[$fontkey] = $info;
    }

    function SetFont($family, $style=”, $size=0)
    {
    // Select a font; size given in points
    if($family==”)
    $family = $this->FontFamily;
    else
    $family = strtolower($family);
    $style = strtoupper($style);
    if(strpos($style,’U’)!==false)
    {
    $this->underline = true;
    $style = str_replace(‘U’,”,$style);
    }
    else
    $this->underline = false;
    if($style==’IB’)
    $style = ‘BI’;
    if($size==0)
    $size = $this->FontSizePt;
    // Test if font is already selected
    if($this->FontFamily==$family && $this->FontStyle==$style && $this->FontSizePt==$size)
    return;
    // Test if font is already loaded
    $fontkey = $family.$style;
    if(!isset($this->fonts[$fontkey]))
    {
    // Test if one of the core fonts
    if($family==’arial’)
    $family = ‘helvetica’;
    if(in_array($family,$this->CoreFonts))
    {
    if($family==’symbol’ || $family==’zapfdingbats’)
    $style = ”;
    $fontkey = $family.$style;
    if(!isset($this->fonts[$fontkey]))
    $this->AddFont($family,$style);
    }
    else
    $this->Error(‘Undefined font: ‘.$family.’ ‘.$style);
    }
    // Select it
    $this->FontFamily = $family;
    $this->FontStyle = $style;
    $this->FontSizePt = $size;
    $this->FontSize = $size/$this->k;
    $this->CurrentFont = &$this->fonts[$fontkey];
    if($this->page>0)
    $this->_out(sprintf(‘BT /F%d %.2F Tf ET’,$this->CurrentFont[‘i’],$this->FontSizePt));
    }

    function SetFontSize($size)
    {
    // Set font size in points
    if($this->FontSizePt==$size)
    return;
    $this->FontSizePt = $size;
    $this->FontSize = $size/$this->k;
    if($this->page>0)
    $this->_out(sprintf(‘BT /F%d %.2F Tf ET’,$this->CurrentFont[‘i’],$this->FontSizePt));
    }

    function AddLink()
    {
    // Create a new internal link
    $n = count($this->links)+1;
    $this->links[$n] = array(0, 0);
    return $n;
    }

    function SetLink($link, $y=0, $page=-1)
    {
    // Set destination of internal link
    if($y==-1)
    $y = $this->y;
    if($page==-1)
    $page = $this->page;
    $this->links[$link] = array($page, $y);
    }

    function Link($x, $y, $w, $h, $link)
    {
    // Put a link on the page
    $this->PageLinks[$this->page][] = array($x*$this->k, $this->hPt-$y*$this->k, $w*$this->k, $h*$this->k, $link);
    }

    function Text($x, $y, $txt)
    {
    // Output a string
    $s = sprintf(‘BT %.2F %.2F Td (%s) Tj ET’,$x*$this->k,($this->h-$y)*$this->k,$this->_escape($txt));
    if($this->underline && $txt!=”)
    $s .= ‘ ‘.$this->_dounderline($x,$y,$txt);
    if($this->ColorFlag)
    $s = ‘q ‘.$this->TextColor.’ ‘.$s.’ Q’;
    $this->_out($s);
    }

    function AcceptPageBreak()
    {
    // Accept automatic page break or not
    return $this->AutoPageBreak;
    }

    function Cell($w, $h=0, $txt=”, $border=0, $ln=0, $align=”, $fill=false, $link=”)
    {
    // Output a cell
    $k = $this->k;
    if($this->y+$h>$this->PageBreakTrigger && !$this->InHeader && !$this->InFooter && $this->AcceptPageBreak())
    {
    // Automatic page break
    $x = $this->x;
    $ws = $this->ws;
    if($ws>0)
    {
    $this->ws = 0;
    $this->_out(‘0 Tw’);
    }
    $this->AddPage($this->CurOrientation,$this->CurPageSize);
    $this->x = $x;
    if($ws>0)
    {
    $this->ws = $ws;
    $this->_out(sprintf(‘%.3F Tw’,$ws*$k));
    }
    }
    if($w==0)
    $w = $this->w-$this->rMargin-$this->x;
    $s = ”;
    if($fill || $border==1)
    {
    if($fill)
    $op = ($border==1) ? ‘B’ : ‘f’;
    else
    $op = ‘S’;
    $s = sprintf(‘%.2F %.2F %.2F %.2F re %s ‘,$this->x*$k,($this->h-$this->y)*$k,$w*$k,-$h*$k,$op);
    }
    if(is_string($border))
    {
    $x = $this->x;
    $y = $this->y;
    if(strpos($border,’L’)!==false)
    $s .= sprintf(‘%.2F %.2F m %.2F %.2F l S ‘,$x*$k,($this->h-$y)*$k,$x*$k,($this->h-($y+$h))*$k);
    if(strpos($border,’T’)!==false)
    $s .= sprintf(‘%.2F %.2F m %.2F %.2F l S ‘,$x*$k,($this->h-$y)*$k,($x+$w)*$k,($this->h-$y)*$k);
    if(strpos($border,’R’)!==false)
    $s .= sprintf(‘%.2F %.2F m %.2F %.2F l S ‘,($x+$w)*$k,($this->h-$y)*$k,($x+$w)*$k,($this->h-($y+$h))*$k);
    if(strpos($border,’B’)!==false)
    $s .= sprintf(‘%.2F %.2F m %.2F %.2F l S ‘,$x*$k,($this->h-($y+$h))*$k,($x+$w)*$k,($this->h-($y+$h))*$k);
    }
    if($txt!==”)
    {
    if($align==’R’)
    $dx = $w-$this->cMargin-$this->GetStringWidth($txt);
    elseif($align==’C’)
    $dx = ($w-$this->GetStringWidth($txt))/2;
    else
    $dx = $this->cMargin;
    if($this->ColorFlag)
    $s .= ‘q ‘.$this->TextColor.’ ‘;
    $txt2 = str_replace(‘)’,’\\)’,str_replace(‘(‘,’\\(‘,str_replace(‘\\’,’\\\\’,$txt)));
    $s .= sprintf(‘BT %.2F %.2F Td (%s) Tj ET’,($this->x+$dx)*$k,($this->h-($this->y+.5*$h+.3*$this->FontSize))*$k,$txt2);
    if($this->underline)
    $s .= ‘ ‘.$this->_dounderline($this->x+$dx,$this->y+.5*$h+.3*$this->FontSize,$txt);
    if($this->ColorFlag)
    $s .= ‘ Q’;
    if($link)
    $this->Link($this->x+$dx,$this->y+.5*$h-.5*$this->FontSize,$this->GetStringWidth($txt),$this->FontSize,$link);
    }
    if($s)
    $this->_out($s);
    $this->lasth = $h;
    if($ln>0)
    {
    // Go to next line
    $this->y += $h;
    if($ln==1)
    $this->x = $this->lMargin;
    }
    else
    $this->x += $w;
    }

    function MultiCell($w, $h, $txt, $border=0, $align=’J’, $fill=false)
    {
    // Output text with automatic or explicit line breaks
    $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 && $s[$nb-1]==”\n”)
    $nb–;
    $b = 0;
    if($border)
    {
    if($border==1)
    {
    $border = ‘LTRB’;
    $b = ‘LRT’;
    $b2 = ‘LR’;
    }
    else
    {
    $b2 = ”;
    if(strpos($border,’L’)!==false)
    $b2 .= ‘L’;
    if(strpos($border,’R’)!==false)
    $b2 .= ‘R’;
    $b = (strpos($border,’T’)!==false) ? $b2.’T’ : $b2;
    }
    }
    $sep = -1;
    $i = 0;
    $j = 0;
    $l = 0;
    $ns = 0;
    $nl = 1;
    while($iws>0)
    {
    $this->ws = 0;
    $this->_out(‘0 Tw’);
    }
    $this->Cell($w,$h,substr($s,$j,$i-$j),$b,2,$align,$fill);
    $i++;
    $sep = -1;
    $j = $i;
    $l = 0;
    $ns = 0;
    $nl++;
    if($border && $nl==2)
    $b = $b2;
    continue;
    }
    if($c==’ ‘)
    {
    $sep = $i;
    $ls = $l;
    $ns++;
    }
    $l += $cw[$c];
    if($l>$wmax)
    {
    // Automatic line break
    if($sep==-1)
    {
    if($i==$j)
    $i++;
    if($this->ws>0)
    {
    $this->ws = 0;
    $this->_out(‘0 Tw’);
    }
    $this->Cell($w,$h,substr($s,$j,$i-$j),$b,2,$align,$fill);
    }
    else
    {
    if($align==’J’)
    {
    $this->ws = ($ns>1) ? ($wmax-$ls)/1000*$this->FontSize/($ns-1) : 0;
    $this->_out(sprintf(‘%.3F Tw’,$this->ws*$this->k));
    }
    $this->Cell($w,$h,substr($s,$j,$sep-$j),$b,2,$align,$fill);
    $i = $sep+1;
    }
    $sep = -1;
    $j = $i;
    $l = 0;
    $ns = 0;
    $nl++;
    if($border && $nl==2)
    $b = $b2;
    }
    else
    $i++;
    }
    // Last chunk
    if($this->ws>0)
    {
    $this->ws = 0;
    $this->_out(‘0 Tw’);
    }
    if($border && strpos($border,’B’)!==false)
    $b .= ‘B’;
    $this->Cell($w,$h,substr($s,$j,$i-$j),$b,2,$align,$fill);
    $this->x = $this->lMargin;
    }

    function Write($h, $txt, $link=”)
    {
    // Output text in flowing mode
    $cw = &$this->CurrentFont[‘cw’];
    $w = $this->w-$this->rMargin-$this->x;
    $wmax = ($w-2*$this->cMargin)*1000/$this->FontSize;
    $s = str_replace(“\r”,”,$txt);
    $nb = strlen($s);
    $sep = -1;
    $i = 0;
    $j = 0;
    $l = 0;
    $nl = 1;
    while($iCell($w,$h,substr($s,$j,$i-$j),0,2,”,0,$link);
    $i++;
    $sep = -1;
    $j = $i;
    $l = 0;
    if($nl==1)
    {
    $this->x = $this->lMargin;
    $w = $this->w-$this->rMargin-$this->x;
    $wmax = ($w-2*$this->cMargin)*1000/$this->FontSize;
    }
    $nl++;
    continue;
    }
    if($c==’ ‘)
    $sep = $i;
    $l += $cw[$c];
    if($l>$wmax)
    {
    // Automatic line break
    if($sep==-1)
    {
    if($this->x>$this->lMargin)
    {
    // Move to next line
    $this->x = $this->lMargin;
    $this->y += $h;
    $w = $this->w-$this->rMargin-$this->x;
    $wmax = ($w-2*$this->cMargin)*1000/$this->FontSize;
    $i++;
    $nl++;
    continue;
    }
    if($i==$j)
    $i++;
    $this->Cell($w,$h,substr($s,$j,$i-$j),0,2,”,0,$link);
    }
    else
    {
    $this->Cell($w,$h,substr($s,$j,$sep-$j),0,2,”,0,$link);
    $i = $sep+1;
    }
    $sep = -1;
    $j = $i;
    $l = 0;
    if($nl==1)
    {
    $this->x = $this->lMargin;
    $w = $this->w-$this->rMargin-$this->x;
    $wmax = ($w-2*$this->cMargin)*1000/$this->FontSize;
    }
    $nl++;
    }
    else
    $i++;
    }
    // Last chunk
    if($i!=$j)
    $this->Cell($l/1000*$this->FontSize,$h,substr($s,$j),0,0,”,0,$link);
    }

    function Ln($h=null)
    {
    // Line feed; default value is last cell height
    $this->x = $this->lMargin;
    if($h===null)
    $this->y += $this->lasth;
    else
    $this->y += $h;
    }

    function Image($file, $x=null, $y=null, $w=0, $h=0, $type=”, $link=”)
    {
    // Put an image on the page
    if(!isset($this->images[$file]))
    {
    // First use of this image, get info
    if($type==”)
    {
    $pos = strrpos($file,’.’);
    if(!$pos)
    $this->Error(‘Image file has no extension and no type was specified: ‘.$file);
    $type = substr($file,$pos+1);
    }
    $type = strtolower($type);
    if($type==’jpeg’)
    $type = ‘jpg’;
    $mtd = ‘_parse’.$type;
    if(!method_exists($this,$mtd))
    $this->Error(‘Unsupported image type: ‘.$type);
    $info = $this->$mtd($file);
    $info[‘i’] = count($this->images)+1;
    $this->images[$file] = $info;
    }
    else
    $info = $this->images[$file];

    // Automatic width and height calculation if needed
    if($w==0 && $h==0)
    {
    // Put image at 96 dpi
    $w = -96;
    $h = -96;
    }
    if($wk;
    if($hk;
    if($w==0)
    $w = $h*$info[‘w’]/$info[‘h’];
    if($h==0)
    $h = $w*$info[‘h’]/$info[‘w’];

    // Flowing mode
    if($y===null)
    {
    if($this->y+$h>$this->PageBreakTrigger && !$this->InHeader && !$this->InFooter && $this->AcceptPageBreak())
    {
    // Automatic page break
    $x2 = $this->x;
    $this->AddPage($this->CurOrientation,$this->CurPageSize);
    $this->x = $x2;
    }
    $y = $this->y;
    $this->y += $h;
    }

    if($x===null)
    $x = $this->x;
    $this->_out(sprintf(‘q %.2F 0 0 %.2F %.2F %.2F cm /I%d Do Q’,$w*$this->k,$h*$this->k,$x*$this->k,($this->h-($y+$h))*$this->k,$info[‘i’]));
    if($link)
    $this->Link($x,$y,$w,$h,$link);
    }

    function GetX()
    {
    // Get x position
    return $this->x;
    }

    function SetX($x)
    {
    // Set x position
    if($x>=0)
    $this->x = $x;
    else
    $this->x = $this->w+$x;
    }

    function GetY()
    {
    // Get y position
    return $this->y;
    }

    function SetY($y)
    {
    // Set y position and reset x
    $this->x = $this->lMargin;
    if($y>=0)
    $this->y = $y;
    else
    $this->y = $this->h+$y;
    }

    function SetXY($x, $y)
    {
    // Set x and y positions
    $this->SetY($y);
    $this->SetX($x);
    }

    function Output($name=”, $dest=”)
    {
    // Output PDF to some destination
    if($this->stateClose();
    $dest = strtoupper($dest);
    if($dest==”)
    {
    if($name==”)
    {
    $name = ‘doc.pdf’;
    $dest = ‘I’;
    }
    else
    $dest = ‘F’;
    }
    switch($dest)
    {
    case ‘I’:
    // Send to standard output
    $this->_checkoutput();
    if(PHP_SAPI!=’cli’)
    {
    // We send to a browser
    header(‘Content-Type: application/pdf’);
    header(‘Content-Disposition: inline; filename=”‘.$name.'”‘);
    header(‘Cache-Control: private, max-age=0, must-revalidate’);
    header(‘Pragma: public’);
    }
    echo $this->buffer;
    break;
    case ‘D’:
    // Download file
    $this->_checkoutput();
    header(‘Content-Type: application/x-download’);
    header(‘Content-Disposition: attachment; filename=”‘.$name.'”‘);
    header(‘Cache-Control: private, max-age=0, must-revalidate’);
    header(‘Pragma: public’);
    echo $this->buffer;
    break;
    case ‘F’:
    // Save to local file
    $f = fopen($name,’wb’);
    if(!$f)
    $this->Error(‘Unable to create output file: ‘.$name);
    fwrite($f,$this->buffer,strlen($this->buffer));
    fclose($f);
    break;
    case ‘S’:
    // Return as a string
    return $this->buffer;
    default:
    $this->Error(‘Incorrect output destination: ‘.$dest);
    }
    return ”;
    }

    /*******************************************************************************
    * *
    * Protected methods *
    * *
    *******************************************************************************/
    function _dochecks()
    {
    // Check availability of %F
    if(sprintf(‘%.1F’,1.0)!=’1.0′)
    $this->Error(‘This version of PHP is not supported’);
    // Check mbstring overloading
    if(ini_get(‘mbstring.func_overload’) & 2)
    $this->Error(‘mbstring overloading must be disabled’);
    // Ensure runtime magic quotes are disabled
    if(get_magic_quotes_runtime())
    @set_magic_quotes_runtime(0);
    }

    function _checkoutput()
    {
    if(PHP_SAPI!=’cli’)
    {
    if(headers_sent($file,$line))
    $this->Error(“Some data has already been output, can’t send PDF file (output started at $file:$line)”);
    }
    if(ob_get_length())
    {
    // The output buffer is not empty
    if(preg_match(‘/^(\xEF\xBB\xBF)?\s*$/’,ob_get_contents()))
    {
    // It contains only a UTF-8 BOM and/or whitespace, let’s clean it
    ob_clean();
    }
    else
    $this->Error(“Some data has already been output, can’t send PDF file”);
    }
    }

    function _getpagesize($size)
    {
    if(is_string($size))
    {
    $size = strtolower($size);
    if(!isset($this->StdPageSizes[$size]))
    $this->Error(‘Unknown page size: ‘.$size);
    $a = $this->StdPageSizes[$size];
    return array($a[0]/$this->k, $a[1]/$this->k);
    }
    else
    {
    if($size[0]>$size[1])
    return array($size[1], $size[0]);
    else
    return $size;
    }
    }

    function _beginpage($orientation, $size)
    {
    $this->page++;
    $this->pages[$this->page] = ”;
    $this->state = 2;
    $this->x = $this->lMargin;
    $this->y = $this->tMargin;
    $this->FontFamily = ”;
    // Check page size and orientation
    if($orientation==”)
    $orientation = $this->DefOrientation;
    else
    $orientation = strtoupper($orientation[0]);
    if($size==”)
    $size = $this->DefPageSize;
    else
    $size = $this->_getpagesize($size);
    if($orientation!=$this->CurOrientation || $size[0]!=$this->CurPageSize[0] || $size[1]!=$this->CurPageSize[1])
    {
    // New size or orientation
    if($orientation==’P’)
    {
    $this->w = $size[0];
    $this->h = $size[1];
    }
    else
    {
    $this->w = $size[1];
    $this->h = $size[0];
    }
    $this->wPt = $this->w*$this->k;
    $this->hPt = $this->h*$this->k;
    $this->PageBreakTrigger = $this->h-$this->bMargin;
    $this->CurOrientation = $orientation;
    $this->CurPageSize = $size;
    }
    if($orientation!=$this->DefOrientation || $size[0]!=$this->DefPageSize[0] || $size[1]!=$this->DefPageSize[1])
    $this->PageSizes[$this->page] = array($this->wPt, $this->hPt);
    }

    function _endpage()
    {
    $this->state = 1;
    }

    function _loadfont($font)
    {
    // Load a font definition file from the font directory
    include($this->fontpath.$font);
    $a = get_defined_vars();
    if(!isset($a[‘name’]))
    $this->Error(‘Could not include font definition file’);
    return $a;
    }

    function _escape($s)
    {
    // Escape special characters in strings
    $s = str_replace(‘\\’,’\\\\’,$s);
    $s = str_replace(‘(‘,’\\(‘,$s);
    $s = str_replace(‘)’,’\\)’,$s);
    $s = str_replace(“\r”,’\\r’,$s);
    return $s;
    }

    function _textstring($s)
    {
    // Format a text string
    return ‘(‘.$this->_escape($s).’)’;
    }

    function _UTF8toUTF16($s)
    {
    // Convert UTF-8 to UTF-16BE with BOM
    $res = “\xFE\xFF”;
    $nb = strlen($s);
    $i = 0;
    while($i=224)
    {
    // 3-byte character
    $c2 = ord($s[$i++]);
    $c3 = ord($s[$i++]);
    $res .= chr((($c1 & 0x0F)<>2));
    $res .= chr((($c2 & 0x03)<=192)
    {
    // 2-byte character
    $c2 = ord($s[$i++]);
    $res .= chr(($c1 & 0x1C)>>2);
    $res .= chr((($c1 & 0x03)<CurrentFont[‘up’];
    $ut = $this->CurrentFont[‘ut’];
    $w = $this->GetStringWidth($txt)+$this->ws*substr_count($txt,’ ‘);
    return sprintf(‘%.2F %.2F %.2F %.2F re f’,$x*$this->k,($this->h-($y-$up/1000*$this->FontSize))*$this->k,$w*$this->k,-$ut/1000*$this->FontSizePt);
    }

    function _parsejpg($file)
    {
    // Extract info from a JPEG file
    $a = getimagesize($file);
    if(!$a)
    $this->Error(‘Missing or incorrect image file: ‘.$file);
    if($a[2]!=2)
    $this->Error(‘Not a JPEG file: ‘.$file);
    if(!isset($a[‘channels’]) || $a[‘channels’]==3)
    $colspace = ‘DeviceRGB’;
    elseif($a[‘channels’]==4)
    $colspace = ‘DeviceCMYK’;
    else
    $colspace = ‘DeviceGray’;
    $bpc = isset($a[‘bits’]) ? $a[‘bits’] : 8;
    $data = file_get_contents($file);
    return array(‘w’=>$a[0], ‘h’=>$a[1], ‘cs’=>$colspace, ‘bpc’=>$bpc, ‘f’=>’DCTDecode’, ‘data’=>$data);
    }

    function _parsepng($file)
    {
    // Extract info from a PNG file
    $f = fopen($file,’rb’);
    if(!$f)
    $this->Error(‘Can\’t open image file: ‘.$file);
    $info = $this->_parsepngstream($f,$file);
    fclose($f);
    return $info;
    }

    function _parsepngstream($f, $file)
    {
    // Check signature
    if($this->_readstream($f,8)!=chr(137).’PNG’.chr(13).chr(10).chr(26).chr(10))
    $this->Error(‘Not a PNG file: ‘.$file);

    // Read header chunk
    $this->_readstream($f,4);
    if($this->_readstream($f,4)!=’IHDR’)
    $this->Error(‘Incorrect PNG file: ‘.$file);
    $w = $this->_readint($f);
    $h = $this->_readint($f);
    $bpc = ord($this->_readstream($f,1));
    if($bpc>8)
    $this->Error(’16-bit depth not supported: ‘.$file);
    $ct = ord($this->_readstream($f,1));
    if($ct==0 || $ct==4)
    $colspace = ‘DeviceGray’;
    elseif($ct==2 || $ct==6)
    $colspace = ‘DeviceRGB’;
    elseif($ct==3)
    $colspace = ‘Indexed’;
    else
    $this->Error(‘Unknown color type: ‘.$file);
    if(ord($this->_readstream($f,1))!=0)
    $this->Error(‘Unknown compression method: ‘.$file);
    if(ord($this->_readstream($f,1))!=0)
    $this->Error(‘Unknown filter method: ‘.$file);
    if(ord($this->_readstream($f,1))!=0)
    $this->Error(‘Interlacing not supported: ‘.$file);
    $this->_readstream($f,4);
    $dp = ‘/Predictor 15 /Colors ‘.($colspace==’DeviceRGB’ ? 3 : 1).’ /BitsPerComponent ‘.$bpc.’ /Columns ‘.$w;

    // Scan chunks looking for palette, transparency and image data
    $pal = ”;
    $trns = ”;
    $data = ”;
    do
    {
    $n = $this->_readint($f);
    $type = $this->_readstream($f,4);
    if($type==’PLTE’)
    {
    // Read palette
    $pal = $this->_readstream($f,$n);
    $this->_readstream($f,4);
    }
    elseif($type==’tRNS’)
    {
    // Read transparency info
    $t = $this->_readstream($f,$n);
    if($ct==0)
    $trns = array(ord(substr($t,1,1)));
    elseif($ct==2)
    $trns = array(ord(substr($t,1,1)), ord(substr($t,3,1)), ord(substr($t,5,1)));
    else
    {
    $pos = strpos($t,chr(0));
    if($pos!==false)
    $trns = array($pos);
    }
    $this->_readstream($f,4);
    }
    elseif($type==’IDAT’)
    {
    // Read image data block
    $data .= $this->_readstream($f,$n);
    $this->_readstream($f,4);
    }
    elseif($type==’IEND’)
    break;
    else
    $this->_readstream($f,$n+4);
    }
    while($n);

    if($colspace==’Indexed’ && empty($pal))
    $this->Error(‘Missing palette in ‘.$file);
    $info = array(‘w’=>$w, ‘h’=>$h, ‘cs’=>$colspace, ‘bpc’=>$bpc, ‘f’=>’FlateDecode’, ‘dp’=>$dp, ‘pal’=>$pal, ‘trns’=>$trns);
    if($ct>=4)
    {
    // Extract alpha channel
    if(!function_exists(‘gzuncompress’))
    $this->Error(‘Zlib not available, can\’t handle alpha channel: ‘.$file);
    $data = gzuncompress($data);
    $color = ”;
    $alpha = ”;
    if($ct==4)
    {
    // Gray image
    $len = 2*$w;
    for($i=0;$i<$h;$i++)
    {
    $pos = (1+$len)*$i;
    $color .= $data[$pos];
    $alpha .= $data[$pos];
    $line = substr($data,$pos+1,$len);
    $color .= preg_replace('/(.)./s','$1',$line);
    $alpha .= preg_replace('/.(.)/s','$1',$line);
    }
    }
    else
    {
    // RGB image
    $len = 4*$w;
    for($i=0;$iPDFVersionPDFVersion = ‘1.4’;
    }
    $info[‘data’] = $data;
    return $info;
    }

    function _readstream($f, $n)
    {
    // Read n bytes from stream
    $res = ”;
    while($n>0 && !feof($f))
    {
    $s = fread($f,$n);
    if($s===false)
    $this->Error(‘Error while reading stream’);
    $n -= strlen($s);
    $res .= $s;
    }
    if($n>0)
    $this->Error(‘Unexpected end of stream’);
    return $res;
    }

    function _readint($f)
    {
    // Read a 4-byte integer from stream
    $a = unpack(‘Ni’,$this->_readstream($f,4));
    return $a[‘i’];
    }

    function _parsegif($file)
    {
    // Extract info from a GIF file (via PNG conversion)
    if(!function_exists(‘imagepng’))
    $this->Error(‘GD extension is required for GIF support’);
    if(!function_exists(‘imagecreatefromgif’))
    $this->Error(‘GD has no GIF read support’);
    $im = imagecreatefromgif($file);
    if(!$im)
    $this->Error(‘Missing or incorrect image file: ‘.$file);
    imageinterlace($im,0);
    $f = @fopen(‘php://temp’,’rb+’);
    if($f)
    {
    // Perform conversion in memory
    ob_start();
    imagepng($im);
    $data = ob_get_clean();
    imagedestroy($im);
    fwrite($f,$data);
    rewind($f);
    $info = $this->_parsepngstream($f,$file);
    fclose($f);
    }
    else
    {
    // Use temporary file
    $tmp = tempnam(‘.’,’gif’);
    if(!$tmp)
    $this->Error(‘Unable to create a temporary file’);
    if(!imagepng($im,$tmp))
    $this->Error(‘Error while saving to temporary file’);
    imagedestroy($im);
    $info = $this->_parsepng($tmp);
    unlink($tmp);
    }
    return $info;
    }

    function _newobj()
    {
    // Begin a new object
    $this->n++;
    $this->offsets[$this->n] = strlen($this->buffer);
    $this->_out($this->n.’ 0 obj’);
    }

    function _putstream($s)
    {
    $this->_out(‘stream’);
    $this->_out($s);
    $this->_out(‘endstream’);
    }

    function _out($s)
    {
    // Add a line to the document
    if($this->state==2)
    $this->pages[$this->page] .= $s.”\n”;
    else
    $this->buffer .= $s.”\n”;
    }

    function _putpages()
    {
    $nb = $this->page;
    if(!empty($this->AliasNbPages))
    {
    // Replace number of pages
    for($n=1;$npages[$n] = str_replace($this->AliasNbPages,$nb,$this->pages[$n]);
    }
    if($this->DefOrientation==’P’)
    {
    $wPt = $this->DefPageSize[0]*$this->k;
    $hPt = $this->DefPageSize[1]*$this->k;
    }
    else
    {
    $wPt = $this->DefPageSize[1]*$this->k;
    $hPt = $this->DefPageSize[0]*$this->k;
    }
    $filter = ($this->compress) ? ‘/Filter /FlateDecode ‘ : ”;
    for($n=1;$n_newobj();
    $this->_out(‘<_out(‘/Parent 1 0 R’);
    if(isset($this->PageSizes[$n]))
    $this->_out(sprintf(‘/MediaBox [0 0 %.2F %.2F]’,$this->PageSizes[$n][0],$this->PageSizes[$n][1]));
    $this->_out(‘/Resources 2 0 R’);
    if(isset($this->PageLinks[$n]))
    {
    // Links
    $annots = ‘/Annots [‘;
    foreach($this->PageLinks[$n] as $pl)
    {
    $rect = sprintf(‘%.2F %.2F %.2F %.2F’,$pl[0],$pl[1],$pl[0]+$pl[2],$pl[1]-$pl[3]);
    $annots .= ‘<</Type /Annot /Subtype /Link /Rect ['.$rect.'] /Border [0 0 0] ';
    if(is_string($pl[4]))
    $annots .= '/A <_textstring($pl[4]).’>>>>’;
    else
    {
    $l = $this->links[$pl[4]];
    $h = isset($this->PageSizes[$l[0]]) ? $this->PageSizes[$l[0]][1] : $hPt;
    $annots .= sprintf(‘/Dest [%d 0 R /XYZ 0 %.2F null]>>’,1+2*$l[0],$h-$l[1]*$this->k);
    }
    }
    $this->_out($annots.’]’);
    }
    if($this->PDFVersion>’1.3′)
    $this->_out(‘/Group <>’);
    $this->_out(‘/Contents ‘.($this->n+1).’ 0 R>>’);
    $this->_out(‘endobj’);
    // Page content
    $p = ($this->compress) ? gzcompress($this->pages[$n]) : $this->pages[$n];
    $this->_newobj();
    $this->_out(‘<>’);
    $this->_putstream($p);
    $this->_out(‘endobj’);
    }
    // Pages root
    $this->offsets[1] = strlen($this->buffer);
    $this->_out(‘1 0 obj’);
    $this->_out(‘<</Type /Pages');
    $kids = '/Kids [';
    for($i=0;$i_out($kids.’]’);
    $this->_out(‘/Count ‘.$nb);
    $this->_out(sprintf(‘/MediaBox [0 0 %.2F %.2F]’,$wPt,$hPt));
    $this->_out(‘>>’);
    $this->_out(‘endobj’);
    }

    function _putfonts()
    {
    $nf = $this->n;
    foreach($this->diffs as $diff)
    {
    // Encodings
    $this->_newobj();
    $this->_out(‘<>’);
    $this->_out(‘endobj’);
    }
    foreach($this->FontFiles as $file=>$info)
    {
    // Font file embedding
    $this->_newobj();
    $this->FontFiles[$file][‘n’] = $this->n;
    $font = file_get_contents($this->fontpath.$file,true);
    if(!$font)
    $this->Error(‘Font file not found: ‘.$file);
    $compressed = (substr($file,-2)==’.z’);
    if(!$compressed && isset($info[‘length2’]))
    $font = substr($font,6,$info[‘length1’]).substr($font,6+$info[‘length1’]+6,$info[‘length2’]);
    $this->_out(‘<_out(‘/Filter /FlateDecode’);
    $this->_out(‘/Length1 ‘.$info[‘length1’]);
    if(isset($info[‘length2’]))
    $this->_out(‘/Length2 ‘.$info[‘length2′].’ /Length3 0′);
    $this->_out(‘>>’);
    $this->_putstream($font);
    $this->_out(‘endobj’);
    }
    foreach($this->fonts as $k=>$font)
    {
    // Font objects
    $this->fonts[$k][‘n’] = $this->n+1;
    $type = $font[‘type’];
    $name = $font[‘name’];
    if($type==’Core’)
    {
    // Core font
    $this->_newobj();
    $this->_out(‘<_out(‘/BaseFont /’.$name);
    $this->_out(‘/Subtype /Type1′);
    if($name!=’Symbol’ && $name!=’ZapfDingbats’)
    $this->_out(‘/Encoding /WinAnsiEncoding’);
    $this->_out(‘>>’);
    $this->_out(‘endobj’);
    }
    elseif($type==’Type1′ || $type==’TrueType’)
    {
    // Additional Type1 or TrueType/OpenType font
    $this->_newobj();
    $this->_out(‘<_out(‘/BaseFont /’.$name);
    $this->_out(‘/Subtype /’.$type);
    $this->_out(‘/FirstChar 32 /LastChar 255’);
    $this->_out(‘/Widths ‘.($this->n+1).’ 0 R’);
    $this->_out(‘/FontDescriptor ‘.($this->n+2).’ 0 R’);
    if(isset($font[‘diffn’]))
    $this->_out(‘/Encoding ‘.($nf+$font[‘diffn’]).’ 0 R’);
    else
    $this->_out(‘/Encoding /WinAnsiEncoding’);
    $this->_out(‘>>’);
    $this->_out(‘endobj’);
    // Widths
    $this->_newobj();
    $cw = &$font[‘cw’];
    $s = ‘[‘;
    for($i=32;$i_out($s.’]’);
    $this->_out(‘endobj’);
    // Descriptor
    $this->_newobj();
    $s = ‘<$v)
    $s .= ‘ /’.$k.’ ‘.$v;
    if(!empty($font[‘file’]))
    $s .= ‘ /FontFile’.($type==’Type1′ ? ” : ‘2’).’ ‘.$this->FontFiles[$font[‘file’]][‘n’].’ 0 R’;
    $this->_out($s.’>>’);
    $this->_out(‘endobj’);
    }
    else
    {
    // Allow for additional types
    $mtd = ‘_put’.strtolower($type);
    if(!method_exists($this,$mtd))
    $this->Error(‘Unsupported font type: ‘.$type);
    $this->$mtd($font);
    }
    }
    }

    function _putimages()
    {
    foreach(array_keys($this->images) as $file)
    {
    $this->_putimage($this->images[$file]);
    unset($this->images[$file][‘data’]);
    unset($this->images[$file][‘smask’]);
    }
    }

    function _putimage(&$info)
    {
    $this->_newobj();
    $info[‘n’] = $this->n;
    $this->_out(‘<_out(‘/Subtype /Image’);
    $this->_out(‘/Width ‘.$info[‘w’]);
    $this->_out(‘/Height ‘.$info[‘h’]);
    if($info[‘cs’]==’Indexed’)
    $this->_out(‘/ColorSpace [/Indexed /DeviceRGB ‘.(strlen($info[‘pal’])/3-1).’ ‘.($this->n+1).’ 0 R]’);
    else
    {
    $this->_out(‘/ColorSpace /’.$info[‘cs’]);
    if($info[‘cs’]==’DeviceCMYK’)
    $this->_out(‘/Decode [1 0 1 0 1 0 1 0]’);
    }
    $this->_out(‘/BitsPerComponent ‘.$info[‘bpc’]);
    if(isset($info[‘f’]))
    $this->_out(‘/Filter /’.$info[‘f’]);
    if(isset($info[‘dp’]))
    $this->_out(‘/DecodeParms <>’);
    if(isset($info[‘trns’]) && is_array($info[‘trns’]))
    {
    $trns = ”;
    for($i=0;$i_out(‘/Mask [‘.$trns.’]’);
    }
    if(isset($info[‘smask’]))
    $this->_out(‘/SMask ‘.($this->n+1).’ 0 R’);
    $this->_out(‘/Length ‘.strlen($info[‘data’]).’>>’);
    $this->_putstream($info[‘data’]);
    $this->_out(‘endobj’);
    // Soft mask
    if(isset($info[‘smask’]))
    {
    $dp = ‘/Predictor 15 /Colors 1 /BitsPerComponent 8 /Columns ‘.$info[‘w’];
    $smask = array(‘w’=>$info[‘w’], ‘h’=>$info[‘h’], ‘cs’=>’DeviceGray’, ‘bpc’=>8, ‘f’=>$info[‘f’], ‘dp’=>$dp, ‘data’=>$info[‘smask’]);
    $this->_putimage($smask);
    }
    // Palette
    if($info[‘cs’]==’Indexed’)
    {
    $filter = ($this->compress) ? ‘/Filter /FlateDecode ‘ : ”;
    $pal = ($this->compress) ? gzcompress($info[‘pal’]) : $info[‘pal’];
    $this->_newobj();
    $this->_out(‘<>’);
    $this->_putstream($pal);
    $this->_out(‘endobj’);
    }
    }

    function _putxobjectdict()
    {
    foreach($this->images as $image)
    $this->_out(‘/I’.$image[‘i’].’ ‘.$image[‘n’].’ 0 R’);
    }

    function _putresourcedict()
    {
    $this->_out(‘/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]’);
    $this->_out(‘/Font <fonts as $font)
    $this->_out(‘/F’.$font[‘i’].’ ‘.$font[‘n’].’ 0 R’);
    $this->_out(‘>>’);
    $this->_out(‘/XObject <_putxobjectdict();
    $this->_out(‘>>’);
    }

    function _putresources()
    {
    $this->_putfonts();
    $this->_putimages();
    // Resource dictionary
    $this->offsets[2] = strlen($this->buffer);
    $this->_out(‘2 0 obj’);
    $this->_out(‘<_putresourcedict();
    $this->_out(‘>>’);
    $this->_out(‘endobj’);
    }

    function _putinfo()
    {
    $this->_out(‘/Producer ‘.$this->_textstring(‘FPDF ‘.FPDF_VERSION));
    if(!empty($this->title))
    $this->_out(‘/Title ‘.$this->_textstring($this->title));
    if(!empty($this->subject))
    $this->_out(‘/Subject ‘.$this->_textstring($this->subject));
    if(!empty($this->author))
    $this->_out(‘/Author ‘.$this->_textstring($this->author));
    if(!empty($this->keywords))
    $this->_out(‘/Keywords ‘.$this->_textstring($this->keywords));
    if(!empty($this->creator))
    $this->_out(‘/Creator ‘.$this->_textstring($this->creator));
    $this->_out(‘/CreationDate ‘.$this->_textstring(‘D:’.@date(‘YmdHis’)));
    }

    function _putcatalog()
    {
    $this->_out(‘/Type /Catalog’);
    $this->_out(‘/Pages 1 0 R’);
    if($this->ZoomMode==’fullpage’)
    $this->_out(‘/OpenAction [3 0 R /Fit]’);
    elseif($this->ZoomMode==’fullwidth’)
    $this->_out(‘/OpenAction [3 0 R /FitH null]’);
    elseif($this->ZoomMode==’real’)
    $this->_out(‘/OpenAction [3 0 R /XYZ null null 1]’);
    elseif(!is_string($this->ZoomMode))
    $this->_out(‘/OpenAction [3 0 R /XYZ null null ‘.sprintf(‘%.2F’,$this->ZoomMode/100).’]’);
    if($this->LayoutMode==’single’)
    $this->_out(‘/PageLayout /SinglePage’);
    elseif($this->LayoutMode==’continuous’)
    $this->_out(‘/PageLayout /OneColumn’);
    elseif($this->LayoutMode==’two’)
    $this->_out(‘/PageLayout /TwoColumnLeft’);
    }

    function _putheader()
    {
    $this->_out(‘%PDF-‘.$this->PDFVersion);
    }

    function _puttrailer()
    {
    $this->_out(‘/Size ‘.($this->n+1));
    $this->_out(‘/Root ‘.$this->n.’ 0 R’);
    $this->_out(‘/Info ‘.($this->n-1).’ 0 R’);
    }

    function _enddoc()
    {
    $this->_putheader();
    $this->_putpages();
    $this->_putresources();
    // Info
    $this->_newobj();
    $this->_out(‘<_putinfo();
    $this->_out(‘>>’);
    $this->_out(‘endobj’);
    // Catalog
    $this->_newobj();
    $this->_out(‘<_putcatalog();
    $this->_out(‘>>’);
    $this->_out(‘endobj’);
    // Cross-ref
    $o = strlen($this->buffer);
    $this->_out(‘xref’);
    $this->_out(‘0 ‘.($this->n+1));
    $this->_out(‘0000000000 65535 f ‘);
    for($i=1;$in;$i++)
    $this->_out(sprintf(‘%010d 00000 n ‘,$this->offsets[$i]));
    // Trailer
    $this->_out(‘trailer’);
    $this->_out(‘<_puttrailer();
    $this->_out(‘>>’);
    $this->_out(‘startxref’);
    $this->_out($o);
    $this->_out(‘%%EOF’);
    $this->state = 3;
    }
    // End of class
    }

    // Handle special IE contype request
    if(isset($_SERVER[‘HTTP_USER_AGENT’]) && $_SERVER[‘HTTP_USER_AGENT’]==’contype’)
    {
    header(‘Content-Type: application/pdf’);
    exit;
    }

    ?>

  13. mau tanya gan,
    kalo misalkan aku mau buatnya lanscape bagaimana?
    soalnya di kantor saya data yang di tablenya banyak, maka dari itu harus lanscape.

    Thanks 🙂

  14. kayaknya ada yg salah sama kode ini deh:


    $sql ="SELECT * FROM `pegawai`";
    $query = mysql_query( $sql );

    while( $result= mysql_fetch_array( $query )){
    $nip = $result['nip'];
    $nama = $result['nama'];
    $honor = $result['honor'];
    $status_ambil = $result['status_ambil'];
    $pdf->SetFont('Courier','B',10);
    $pdf->Cell(5,0.5,'$nip',1,0,'L');
    $pdf->Cell(5,0.5,'$nama',1,0,'L');
    $pdf->Cell(5,0.5,'$honor',1,0,'L');
    $pdf->Cell(5,0.5,'$status_ambil',1,0,'L');
    }

    soalnya uda coba tapi data dari db gak muncul

  15. kayaknya ada yg salah sama kode ini deh:

    $sql ="SELECT * FROM `pegawai`";
    $query = mysql_query( $sql );

    while( $result= mysql_fetch_array( $query )){
    $nip = $result['nip'];
    $nama = $result['nama'];
    $honor = $result['honor'];
    $status_ambil = $result['status_ambil'];
    $pdf->SetFont('Courier','B',10);
    $pdf->Cell(5,0.5,'$nip',1,0,'L');
    $pdf->Cell(5,0.5,'$nama',1,0,'L');
    $pdf->Cell(5,0.5,'$honor',1,0,'L');
    $pdf->Cell(5,0.5,'$status_ambil',1,0,'L');
    }

    soalnya uda coba tapi data dari db gak muncul

    1. gw coba test:
      print_r($result);
      sih datanya keluar, tapi anehnya kok pas $pdf->Output(); datanya gak keluar di PDF
      nb: codenya gw sama persis sama postingan ini

      kira2 kenapa ya?

  16. terima kasih banyak pak. saya beberapa hari ini mencari cara memasukkan record dari MySQL ke PDF pakai FPDF. saya tercerahkan sekali ketika baca artikel ini.

  17. mau tanya gan, itu cara nampilin Rp. nya gimana ?
    soalnya pas di PHPnya saya tulisnya “Rp. $data[honor]”, tapi pas dibuat laporannya malah Rp.nya ga muncul
    kira kira gimana ya gan ?

  18. mas gimana caranya nampilkan gambar dari database? Ni koding saya, untuk gambar pada kolom [2]
    SetFont(‘Times’,’B’,14); //jenis font : Times New Romans, Bold, ukuran 14
    //untuk warna background Header
    $this->SetFillColor(255,255,255);
    //untuk warna text
    $this->SetTextColor(0,0,0);
    //Menampilkan tulisan di halaman
    $this->Cell(19,1,’Data Karyawan’,”,0,’C’,1); //TBLR (untuk garis)=> B = Bottom,
    // L = Left, R = Right
    //untuk garis, C = center
    }
    }
    //pengaturan ukuran kertas P = Portrait
    $pdf = new PDF(‘P’,’cm’,’A4′);
    $pdf->Open();
    $pdf->AddPage();
    //Ln() = untuk pindah baris
    $pdf->Ln();
    $pdf->SetFont(‘Times’,’B’,12);
    $pdf->Cell(1,1,’No’,’LRTB’,0,’C’);
    $pdf->Cell(2,1,’kode’,’LRTB’,0,’C’);
    $pdf->Cell(3,1,’nama’,’LRTB’,0,’C’);
    $pdf->Cell(4,1,’foto’,’LRTB’,0,’C’);
    $pdf->Cell(5,1,’alamat’,’LRTB’,0,’C’);
    $pdf->Cell(4,1,’hp’,’LRTB’,0,’C’);
    $pdf->Ln();
    $pdf->SetFont(‘Times’,””,10);
    for($j=0;$jCell(1,1,$j+1,’LBTR’,0,’C’);
    $pdf->Cell(2,1,$cell[$j][0],’LBTR’,0,’C’);
    $pdf->Cell(3,1,$cell[$j][1],’LBTR’,0,’C’);
    $pdf->Cell(4,1,$cell[$j][2],’LBTR’,0,’C’);
    $pdf->Cell(5,1,$cell[$j][3],’LBTR’,0,’C’);
    $pdf->Cell(4,1,$cell[$j][4],’LBTR’,0,’C’);
    $pdf->Ln();
    }
    //menampilkan output berupa halaman PDF
    $pdf->Output();
    ?>

Leave a Reply to husni Cancel reply

Your email address will not be published. Required fields are marked *