Membuat Auto Wrap Content pada Tabel dengan FPDF dan PHP

Semalem saya dapet pertanyaan dari salah satu pengunjung website ini terkait dengan tutorial membuat laporan PDF dengan FPDF yang pernah saya posting. Dia sudah mencobanya namun saat isi data pada suatu kolom melebihi lebar dari kolom tersebut, maka tulisannya akan kepotong alias ga keliatan. Saya juga sering mendapatkan pertanyaan serupa baik dari beberapa mahasiswa, pengunjung website achmatim.net, kawan-kawan di facebook maupun follower di twitter. Sehingga saya mencoba untuk membuat contoh program PHP sederhana mengenai membuat auto wrap content pada tabel ini.

Bagi Anda yang belum pernah menggunakan library FPDF sebaiknya mencoba tutorial dasarnya terlebih dahulu sebelum mencoba tutorial ini. Dan untuk menyederhanakan tutorial, data yang ditampilkan diambil dari sebuah array. Anda dapat memodifikasinya dengan mudah jika ingin dikoneksikan dengan sebuah database. Contoh Program PHP pada tutorial ini menggunakan library FPDF versi 1.7 yang dapat Anda download di situs resminya.

Source Code Program

Berikut ini contoh program beserta penjelasan singkatnya:

  1. <?php
  2.  
  3. /**
  4.  * @author Achmad Solichin
  5.  * @website http://achmatim.net
  6.  * @email achmatim@gmail.com
  7.  */
  8. require_once("fpdf17/fpdf.php");
  9.  
  10. class FPDF_AutoWrapTable extends FPDF {
  11. private $data = array();
  12. private $options = array(
  13. 'filename' => '',
  14. 'destinationfile' => '',
  15. 'paper_size'=>'F4',
  16. 'orientation'=>'P'
  17. );
  18.  
  19. function __construct($data = array(), $options = array()) {
  20. parent::__construct();
  21. $this->data = $data;
  22. $this->options = $options;
  23. }
  24.  
  25. public function rptDetailData () {
  26. //
  27. $border = 0;
  28. $this->AddPage();
  29. $this->SetAutoPageBreak(true,60);
  30. $this->AliasNbPages();
  31. $left = 25;
  32.  
  33. //header
  34. $this->SetFont("", "B", 15);
  35. $this->MultiCell(0, 12, 'PT. ACHMATIM DOT NET');
  36. $this->Cell(0, 1, " ", "B");
  37. $this->Ln(10);
  38. $this->SetFont("", "B", 12);
  39. $this->SetX($left); $this->Cell(0, 10, 'LAPORAN DATA KARYAWAN', 0, 1,'C');
  40. $this->Ln(10);
  41.  
  42. $h = 13;
  43. $left = 40;
  44. $top = 80;
  45. #tableheader
  46. $this->SetFillColor(200,200,200);
  47. $left = $this->GetX();
  48. $this->Cell(20,$h,'NO',1,0,'L',true);
  49. $this->SetX($left += 20); $this->Cell(75, $h, 'NIP', 1, 0, 'C',true);
  50. $this->SetX($left += 75); $this->Cell(100, $h, 'NAMA', 1, 0, 'C',true);
  51. $this->SetX($left += 100); $this->Cell(150, $h, 'ALAMAT', 1, 0, 'C',true);
  52. $this->SetX($left += 150); $this->Cell(100, $h, 'EMAIL', 1, 0, 'C',true);
  53. $this->SetX($left += 100); $this->Cell(100, $h, 'WEBSITE', 1, 1, 'C',true);
  54. //$this->Ln(20);
  55.  
  56. $this->SetFont('Arial','',9);
  57. $this->SetWidths(array(20,75,100,150,100,100));
  58. $this->SetAligns(array('C','L','L','L','L','L'));
  59. $no = 1; $this->SetFillColor(255);
  60. foreach ($this->data as $baris) {
  61. $this->Row(
  62. array($no++,
  63. $baris['nip'],
  64. $baris['nama'],
  65. $baris['alamat'],
  66. $baris['email'],
  67. $baris['website']
  68. ));
  69. }
  70.  
  71. }
  72.  
  73. public function printPDF () {
  74.  
  75. if ($this->options['paper_size'] == "F4") {
  76. $a = 8.3 * 72; //1 inch = 72 pt
  77. $b = 13.0 * 72;
  78. $this->FPDF($this->options['orientation'], "pt", array($a,$b));
  79. } else {
  80. $this->FPDF($this->options['orientation'], "pt", $this->options['paper_size']);
  81. }
  82.  
  83. $this->SetAutoPageBreak(false);
  84. $this->AliasNbPages();
  85. $this->SetFont("helvetica", "B", 10);
  86. //$this->AddPage();
  87.  
  88. $this->rptDetailData();
  89.  
  90. $this->Output($this->options['filename'],$this->options['destinationfile']);
  91. }
  92.  
  93. private $widths;
  94. private $aligns;
  95.  
  96. function SetWidths($w)
  97. {
  98. //Set the array of column widths
  99. $this->widths=$w;
  100. }
  101.  
  102. function SetAligns($a)
  103. {
  104. //Set the array of column alignments
  105. $this->aligns=$a;
  106. }
  107.  
  108. function Row($data)
  109. {
  110. //Calculate the height of the row
  111. $nb=0;
  112. for($i=0;$i<count($data);$i++)
  113. $nb=max($nb,$this->NbLines($this->widths[$i],$data[$i]));
  114. $h=10*$nb;
  115. //Issue a page break first if needed
  116. $this->CheckPageBreak($h);
  117. //Draw the cells of the row
  118. for($i=0;$i<count($data);$i++)
  119. {
  120. $w=$this->widths[$i];
  121. $a=isset($this->aligns[$i]) ? $this->aligns[$i] : 'L';
  122. //Save the current position
  123. $x=$this->GetX();
  124. $y=$this->GetY();
  125. //Draw the border
  126. $this->Rect($x,$y,$w,$h);
  127. //Print the text
  128. $this->MultiCell($w,10,$data[$i],0,$a);
  129. //Put the position to the right of the cell
  130. $this->SetXY($x+$w,$y);
  131. }
  132. //Go to the next line
  133. $this->Ln($h);
  134. }
  135.  
  136. function CheckPageBreak($h)
  137. {
  138. //If the height h would cause an overflow, add a new page immediately
  139. if($this->GetY()+$h>$this->PageBreakTrigger)
  140. $this->AddPage($this->CurOrientation);
  141. }
  142.  
  143. function NbLines($w,$txt)
  144. {
  145. //Computes the number of lines a MultiCell of width w will take
  146. $cw=&$this->CurrentFont['cw'];
  147. if($w==0)
  148. $w=$this->w-$this->rMargin-$this->x;
  149. $wmax=($w-2*$this->cMargin)*1000/$this->FontSize;
  150. $s=str_replace("\r",'',$txt);
  151. $nb=strlen($s);
  152. if($nb>0 and $s[$nb-1]=="\n")
  153. $nb--;
  154. $sep=-1;
  155. $i=0;
  156. $j=0;
  157. $l=0;
  158. $nl=1;
  159. while($i<$nb)
  160. {
  161. $c=$s[$i];
  162. if($c=="\n")
  163. {
  164. $i++;
  165. $sep=-1;
  166. $j=$i;
  167. $l=0;
  168. $nl++;
  169. continue;
  170. }
  171. if($c==' ')
  172. $sep=$i;
  173. $l+=$cw[$c];
  174. if($l>$wmax)
  175. {
  176. if($sep==-1)
  177. {
  178. if($i==$j)
  179. $i++;
  180. }
  181. else
  182. $i=$sep+1;
  183. $sep=-1;
  184. $j=$i;
  185. $l=0;
  186. $nl++;
  187. }
  188. else
  189. $i++;
  190. }
  191. return $nl;
  192. }
  193. } //end of class
  194.  
  195. //contoh penggunaan
  196. $data = array(
  197. 'nip' => '0111500382',
  198. 'nama' => 'ACHMAD SOLICHIN',
  199. 'alamat' => 'Jalan Ciledug Raya No 99, Petukangan Utara, Jakarta Selatan 12260, DKI Jakarta',
  200. 'email' => 'achmatim@gmail.com',
  201. 'website' => 'http://achmatim.net'
  202. ),
  203. 'nip' => '0411500101',
  204. 'nama' => 'CHOTIMATUL MUSYAROFAH',
  205. 'alamat' => 'Komplek Japos RT 002/015 Kelurahan Peninggilan, Kec. Ciledug, Tangerang',
  206. 'email' => 'chotimatul.musyarofah@gmail.com',
  207. 'website' => 'http://contohprogram.info'
  208. ),
  209. 'nip' => '1111500200',
  210. 'nama' => 'MUHAMMAD LINTANG',
  211. 'alamat' => 'Jl. Raya Caplin, Kec. Ciledug, Tangerang, Banten',
  212. 'email' => 'achmatim@yahoo.com',
  213. 'website' => 'http://ebook.achmatim.net'
  214. )
  215. );
  216.  
  217. //pilihan
  218. $options = array(
  219. 'filename' => '', //nama file penyimpanan, kosongkan jika output ke browser
  220. 'destinationfile' => '', //I=inline browser (default), F=local file, D=download
  221. 'paper_size'=>'F4', //paper size: F4, A3, A4, A5, Letter, Legal
  222. 'orientation'=>'P' //orientation: P=portrait, L=landscape
  223. );
  224.  
  225. $tabel = new FPDF_AutoWrapTable($data, $options);
  226. $tabel->printPDF();
  227. ?>

Penjelasan singkat program:

  • Baris 8. Menyertakan library FPDF. Pada tutorial ini, menggunakan library FPDF versi 1.7 dan diletakkan di folder /fpdf17
  • Baris 10-197. Mendefinisikan class FPDF_AutoWrapTable yang merupakan turunan dari class FPDF.
  • Baris 11-17. Mendeklarasikan variabel $data berisi data yang akan ditampilkan dan $options berisi beberapa opsi tampilan PDF seperti ukuran kertas dan orientasi kertas.
  • Baris 19-23. Konstruktor dari class yang menangkap 2 parameter yaitu $data dan $options
  • Baris 34-40. Mengatur header / judul laporan, termasuk ukuran font (baris 35 dan 38)
  • Baris 43-54. Mengatur judul tabel (kolom-kolom tabel) termasuk teks judul, lebar kolom dan perataan kolom.
  • Baris 57-70. Menampilkan data tabel dengan memanggil fungsi Row(). Pada baris 58 diatur lebar untuk setiap kolom dan pada baris 59 diatur perataan untuk setiap kolom.
  • Baris 75-93. Fungsi untuk menggenerate output PDF.
  • Baris 200-222. Setting data yang akan ditampilkan. Jika ingin dikoneksikan dengan database, ganti baris ini dengan perintah untuk mengambil data.
  • Baris 232-233. Pembentukan object class FPDF_AutoWrapTable dan pemanggilan fungsi untuk meng-generate file PDF.

Hasil dari program tersebut kurang lebih sebagai berikut:

Download dan Demo Program

Menampilkan Data MySQL ke PDF

Pada contoh program di atas, saya menggunakan data berupa array yang diisikan di dalam program. Anda bisa saja menggantinya dengan data yang berasal dari database seperti MySQL. Dan berhubung cukup banyak pengunjung yang bertanya mengenai bagaimana jika ingin menampilkan data dari database ke PDF, saya buatkan contoh programnya di bawah ini. Jangan lupa, siapkan terlebih dahulu database dan tabel yang diperlukan (lihat penjelasan di code program).

  1. <?php
  2.  
  3. /**
  4.  * @author Achmad Solichin
  5.  * @website http://achmatim.net
  6.  * @email achmatim@gmail.com
  7.  */
  8. require_once("fpdf17/fpdf.php");
  9.  
  10. class FPDF_AutoWrapTable extends FPDF {
  11. private $data = array();
  12. private $options = array(
  13. 'filename' => '',
  14. 'destinationfile' => '',
  15. 'paper_size'=>'F4',
  16. 'orientation'=>'P'
  17. );
  18.  
  19. function __construct($data = array(), $options = array()) {
  20. parent::__construct();
  21. $this->data = $data;
  22. $this->options = $options;
  23. }
  24.  
  25. public function rptDetailData () {
  26. //
  27. $border = 0;
  28. $this->AddPage();
  29. $this->SetAutoPageBreak(true,60);
  30. $this->AliasNbPages();
  31. $left = 25;
  32.  
  33. //header
  34. $this->SetFont("", "B", 15);
  35. $this->MultiCell(0, 12, 'PT. ACHMATIM DOT NET');
  36. $this->Cell(0, 1, " ", "B");
  37. $this->Ln(10);
  38. $this->SetFont("", "B", 12);
  39. $this->SetX($left); $this->Cell(0, 10, 'LAPORAN DATA KARYAWAN', 0, 1,'C');
  40. $this->Ln(10);
  41.  
  42. $h = 13;
  43. $left = 40;
  44. $top = 80;
  45. #tableheader
  46. $this->SetFillColor(200,200,200);
  47. $left = $this->GetX();
  48. $this->Cell(20,$h,'NO',1,0,'L',true);
  49. $this->SetX($left += 20); $this->Cell(75, $h, 'NIP', 1, 0, 'C',true);
  50. $this->SetX($left += 75); $this->Cell(100, $h, 'NAMA', 1, 0, 'C',true);
  51. $this->SetX($left += 100); $this->Cell(150, $h, 'ALAMAT', 1, 0, 'C',true);
  52. $this->SetX($left += 150); $this->Cell(100, $h, 'EMAIL', 1, 0, 'C',true);
  53. $this->SetX($left += 100); $this->Cell(100, $h, 'WEBSITE', 1, 1, 'C',true);
  54. //$this->Ln(20);
  55.  
  56. $this->SetFont('Arial','',9);
  57. $this->SetWidths(array(20,75,100,150,100,100));
  58. $this->SetAligns(array('C','L','L','L','L','L'));
  59. $no = 1; $this->SetFillColor(255);
  60. foreach ($this->data as $baris) {
  61. $this->Row(
  62. array($no++,
  63. $baris['nip'],
  64. $baris['nama'],
  65. $baris['alamat'],
  66. $baris['email'],
  67. $baris['website']
  68. ));
  69. }
  70.  
  71. }
  72.  
  73. public function printPDF () {
  74.  
  75. if ($this->options['paper_size'] == "F4") {
  76. $a = 8.3 * 72; //1 inch = 72 pt
  77. $b = 13.0 * 72;
  78. $this->FPDF($this->options['orientation'], "pt", array($a,$b));
  79. } else {
  80. $this->FPDF($this->options['orientation'], "pt", $this->options['paper_size']);
  81. }
  82.  
  83. $this->SetAutoPageBreak(false);
  84. $this->AliasNbPages();
  85. $this->SetFont("helvetica", "B", 10);
  86. //$this->AddPage();
  87.  
  88. $this->rptDetailData();
  89.  
  90. $this->Output($this->options['filename'],$this->options['destinationfile']);
  91. }
  92.  
  93. private $widths;
  94. private $aligns;
  95.  
  96. function SetWidths($w)
  97. {
  98. //Set the array of column widths
  99. $this->widths=$w;
  100. }
  101.  
  102. function SetAligns($a)
  103. {
  104. //Set the array of column alignments
  105. $this->aligns=$a;
  106. }
  107.  
  108. function Row($data)
  109. {
  110. //Calculate the height of the row
  111. $nb=0;
  112. for($i=0;$i<count($data);$i++)
  113. $nb=max($nb,$this->NbLines($this->widths[$i],$data[$i]));
  114. $h=10*$nb;
  115. //Issue a page break first if needed
  116. $this->CheckPageBreak($h);
  117. //Draw the cells of the row
  118. for($i=0;$i<count($data);$i++)
  119. {
  120. $w=$this->widths[$i];
  121. $a=isset($this->aligns[$i]) ? $this->aligns[$i] : 'L';
  122. //Save the current position
  123. $x=$this->GetX();
  124. $y=$this->GetY();
  125. //Draw the border
  126. $this->Rect($x,$y,$w,$h);
  127. //Print the text
  128. $this->MultiCell($w,10,$data[$i],0,$a);
  129. //Put the position to the right of the cell
  130. $this->SetXY($x+$w,$y);
  131. }
  132. //Go to the next line
  133. $this->Ln($h);
  134. }
  135.  
  136. function CheckPageBreak($h)
  137. {
  138. //If the height h would cause an overflow, add a new page immediately
  139. if($this->GetY()+$h>$this->PageBreakTrigger)
  140. $this->AddPage($this->CurOrientation);
  141. }
  142.  
  143. function NbLines($w,$txt)
  144. {
  145. //Computes the number of lines a MultiCell of width w will take
  146. $cw=&$this->CurrentFont['cw'];
  147. if($w==0)
  148. $w=$this->w-$this->rMargin-$this->x;
  149. $wmax=($w-2*$this->cMargin)*1000/$this->FontSize;
  150. $s=str_replace("\r",'',$txt);
  151. $nb=strlen($s);
  152. if($nb>0 and $s[$nb-1]=="\n")
  153. $nb--;
  154. $sep=-1;
  155. $i=0;
  156. $j=0;
  157. $l=0;
  158. $nl=1;
  159. while($i<$nb)
  160. {
  161. $c=$s[$i];
  162. if($c=="\n")
  163. {
  164. $i++;
  165. $sep=-1;
  166. $j=$i;
  167. $l=0;
  168. $nl++;
  169. continue;
  170. }
  171. if($c==' ')
  172. $sep=$i;
  173. $l+=$cw[$c];
  174. if($l>$wmax)
  175. {
  176. if($sep==-1)
  177. {
  178. if($i==$j)
  179. $i++;
  180. }
  181. else
  182. $i=$sep+1;
  183. $sep=-1;
  184. $j=$i;
  185. $l=0;
  186. $nl++;
  187. }
  188. else
  189. $i++;
  190. }
  191. return $nl;
  192. }
  193. } //end of class
  194.  
  195. /* contoh penggunaan dengan data diambil dari database mysql
  196.  *
  197.  * 1. buatlah database di mysql
  198.  * 2. buatlah tabel 'pegawai' dengan field: nip, nama, alamat, email dan website
  199.  * 3. isikan beberapa contoh data ke tabel pegawai tersebut.
  200.  *
  201.  * */
  202.  
  203. #koneksi ke database (disederhanakan)
  204. mysql_connect ("localhost", "root", "");
  205. mysql_select_db ("demo");
  206.  
  207. #ambil data dari DB dan masukkan ke array
  208. $data = array();
  209. $query = "SELECT nip, nama, alamat, email, website FROM pegawai ORDER BY nama";
  210. $sql = mysql_query ($query);
  211. while ($row = mysql_fetch_assoc($sql)) {
  212. array_push($data, $row);
  213. }
  214.  
  215. //pilihan
  216. $options = array(
  217. 'filename' => '', //nama file penyimpanan, kosongkan jika output ke browser
  218. 'destinationfile' => '', //I=inline browser (default), F=local file, D=download
  219. 'paper_size'=>'F4', //paper size: F4, A3, A4, A5, Letter, Legal
  220. 'orientation'=>'P' //orientation: P=portrait, L=landscape
  221. );
  222.  
  223. $tabel = new FPDF_AutoWrapTable($data, $options);
  224. $tabel->printPDF();
  225. ?>

Referensi Tutorial

Jika tutorial ini bermanfaat, berbagilah ke sebanyak-banyaknya orang maka Anda akan mendapatkan manfaat yang lebih banyak. Semoga bermanfaat dan maju terus ilmu pengetahuan Indonesia.

Berbagi itu indah...Share on Facebook0Share on Google+0Tweet about this on TwitterShare on LinkedIn0Pin on Pinterest0Digg this

96 comments

  1. maaf pak, salam.

    saya zul dari malaysia, ingin bertanya macammana nak buat report fpdf ini connection dengan mysql…
    terima kasih.

  2. pak kalo data yang ditampilkan dari database lebih dari satu itu pake apa pak? while mysql_fetch_array nya di taruh d sebelah mana?
    maaf newbie ๐Ÿ™

  3. setelah pendeklarasian query dalam $sql, kemudian pemanggilan data dengan variabel $data=array(mysql_fetch_array($sql)); tapi yang muncul di tampilan cuma satu data, gimana biar datanya bisa muncul semua,
    mohon bantuannya ๐Ÿ™ terima kasih

  4. Sudah saya coba berhasil dan ternayata bisa page break juga,…
    ni apa pakai fungsi mc_table.php dari fpdf,..???
    Sekali lagi makasich atas tutorialnya,…

  5. Mas,.. maaf mau nanya lagi,..
    kira2 gmn cara naruh sub total dan total dari perhitungan,.. serta cara mengatur minimal cuma 50 record masing-masing halaman,..

  6. totalnya apa ditaruh disini

    foreach ($this->data as $baris) {
    $total = $total + $baris[‘sub_total’]; //skrip total

    atau ditaruh disini

    while ($row = mysql_fetch_assoc($sql)) {
    array_push($data, $row);
    $total = $total + $row[sub_total];//skrip total

  7. yang di html sudah berhasil,…
    biasanya ditaruh sebelum perintah while,..
    tapi kok disini total ndak terdeteksi,..
    Mohon pencerahannya,..

  8. ya,.. mas tolong kasih solusinya,..???
    contoh kasusnya seperti laporan data karyawan yang telah bapak buat terus ditambahkan kolom baru yakni Gaji karyawan,..
    Terus dibawahnya ada total gaji seluruh karyawan,…
    Tolong kasih solusinya ya pak,…

    1. demi pembelajaran, silahkan coba dikembangkan sendiri, toh sudah bisa buat yg versi html, analogikan teknik dari sana. saya sudah memberikan bagaimana cara membuat “baju”, jika ingin membuat “baju” dengan model tertentu ya tinggal dikembangkan dari teknik yg ada.

  9. sudah saya coba bisa menampilkan totalnya,..
    tapi tutorial mas ternyata ada bug nya,..
    saya coba membuat 1 tabel yang berisikan 6 kolom spt punya mas,..
    ternyata untuk menampilkan record pertama melenceng,..
    baru terlihat rapi untuk record kedua dan seterusnya,..
    Itu masalahnya apa???
    dan itu saya lakukan tanpa memodifikasi code mas,.. yang saya ganti cuma nama kolom dan querynya aja,..

    1. coba perhatikan pada baris ke-53.

      $this->SetX($left += 100); $this->Cell(100, $h, ‘WEBSITE’, 1, 1, ‘C’,true);

      Parameter fungsi Cell yang kelima bernilai 1, itu artinya pindah baris. Bandingkan dengan parameter fungsi Cell yang ada di baris2 sebelumnya yang bernilai 0.

  10. mas, mau cara naruh perintah if pada perulangan foreach code mas dimana???
    misalkan ingin menampilkan keterangan orang yang masih belum lumas pembayarannya,.. naruhnya dimana???

    if($data[‘status_pembayaran’]==’1′){ echo “(Lunas)”; }

    saya taruh disini koq error,..

    array($no++,
    $baris[‘nama_anggota’],
    if($data[‘status_pembayaran’]==’1′){ echo “(Lunas)”; },
    …..

    1. Maaf salah ketik,..
      array($no++,
      $baris[‘nama_anggota’],
      if($baris[‘status_pembayaran’]==โ€™1โ€ฒ){ echo โ€œ(Lunas)โ€; },

      gmn mas solusinya???

  11. mas doni tinggal,… tulis scriptnya seperti ini:
    if($baris[‘status_pembayaran’]!=’0′){
    $status_pembayaran1 = $baris[‘status_pembayaran’];
    }
    else{
    $status_pembayaran= “-“;
    }

    sebelum
    $this->Row

  12. salam mas, saya masih baru dlm hal coding,
    mas mau tanya, kalau mau nampilin gambar didalam tabel gimana?
    saya hanya menyimpan nama gambar dan menaruhnya di folder server,,,,
    mohon bantuannya, thanks

      1. terima kasih atas tanggapannya mas, tapi yang saya maksud imagenya masuk ke dalam tabel?
        jadi tabel yang 1 fieldnya ada gambar

        mohon bantuannya mas

  13. mas mau tanya program yang di atas yang mengambil nilai dari database di jalanin di localhost bisa tapi kok kalau di jalanin di web server yang sudah online kok ga jadi ya,,,keluarnya

    “FPDF error: Some data has already been output, can’t send PDF file (output started at /home/firstbag/public_html/absen/admin-web/modul/laporan/lap_datang.php:1)”

  14. mas, mau nanya ne,,,
    klo menggunakan ci gmana?
    saya kendalanya di pemanggilan query, dan kebetulan query yang dibutuhkan lumayan banyak jadi.

    sebelumnya makasi tas tutorialnya

  15. mas mau tanya kalau yang di tampilin lebih dari satu tabel
    misalnya mau nampilin data perbulan dari beberapa tahun itu gimana ya mas??? mohon pencerahannya

  16. mas mau tanya kalau yang di tampilin lebih dari satu tabel
    misalnya mau nampilin data perbulan dari beberapa tahun itu gimana ya mas???
    bingung pengulangan headernya,, mohon pencerahannya

  17. pak tanya lagi saya coba gabungkan untuk pembuatan header menggunakan librari FPDF table dari interpid tp ga bisa begitu pula dengan CELL dan MultiCEll tetep gagal. adakah cara lain untuk membuat header table yg kompleks yang suport dengan colspan dan rowspan untuk menggabungkannya dengan coding wraptable yang bapak buat yang sudah cocok

  18. Permisi..
    mw nanya…
    saya sudah membuat program untuk filter data dari data base…
    misalkan data yg tampil sesuai tanggal lahir, atau sesuai nama yg berawalan sama…
    terus gmana jika hasil filter tsb langsung bisa di cetak ?

  19. mohon bantuannya pak,
    saya mnggunakan databases dengan tabel besisi fild date,
    masalahnya adalah data yg ditampilkan adalah tahun-bulan-hari (2012-09-23).

    dengan fpdf ini, bagaimana cara merubah tampilan tanggal di pdf menjadi 23-09-2012 atau 23 Sept 2012.

    terimakasih sebelumnya

  20. Dear Pak Achmad,
    gimana cara memisahkan class autowrap table ini dari source code tabelnya? sehingga class autowrap ini menjadi library tersendiri yang diincludekan ke source code tabelnya.

  21. Pak Achmad,
    gimana caranya mengkolaborasikan tabel yang menggunakan class autowrap dengan tabel yang tidak ?
    tabelnya arah datanya ke samping bukan dalam bentuk kolom, seperti ini :
    | 1. | Nama | data_nama |
    | 2. | Jenis Kelamin | data_jenkel |

    saya sudah coba, tapi datanya tidak muncul..
    Mohon solusinya…

  22. Mas sebelumnya salam kenal saya Zulfan , Saya mau tanya gimana cara buat filter data pakai combobox , jadi saya punya tabel pendaftar ada field2 nama, posisi dilamar, pendidikan, nah saya mau data yang ada di tempilkan dengan filter pakai combobox jadi di kategorikan misalnya berdasarkan kategori pendiddikan cuma pake combobox mirip seperti tampilan administrator joomla bagian module manager, mohon bantuannya thanks

  23. om… ini Q pake 13 field tabel…
    tapi kok auto wrapnya kagak jalan ya ??
    padahal scriptnya uda sama… cuma Q tambah field ama ganti2 width-nya gitu,,
    trus biar cukup juga tampilan uda Q ganti landscape…

    Mungkin Q salah dibagian
    $this->Cell(20,$h,’NO’ ,1,0,’L’ ,true);
    $this->SetX($left += 20); $this->Cell(100, $h, ‘ID KUNJUNGAN’, 1, 0, ‘C’,true);
    $this->SetX($left += 75); $this->Cell(100, $h, ‘NAMA’, 1, 0, ‘C’,true);
    $this->SetX($left += 100); $this->Cell(100, $h, ‘TGL KUNJUNG’, 1, 0, ‘C’,true);
    $this->SetX($left += 100); $this->Cell(100, $h, ‘BERAT’, 1, 0, ‘C’,true);
    $this->SetX($left += 100); $this->Cell(100, $h, ‘SISTOLE’, 1, 1, ‘C’,true);
    $this->SetX($left += 100); $this->Cell(100, $h, ‘DIASTOLE’, 1, 0, ‘C’,true);
    $this->SetX($left += 100); $this->Cell(100, $h, ‘DIAGNOSA’, 1, 0, ‘C’,true);
    $this->SetX($left += 100); $this->Cell(100, $h, ‘ID TRANSAKSI’, 1, 0, ‘C’,true);
    $this->SetX($left += 100); $this->Cell(100, $h, ‘OBAT’, 1, 1, ‘C’,true);
    $this->SetX($left += 100); $this->Cell(100, $h, ‘JUMLAH OBAT’, 1, 0, ‘C’,true);

    $this->SetFont(‘Arial’ ,” ,9);
    $this->SetWidths(array(20,100,100,100,100,100,100,100,100,100,100));
    $this->SetAligns(array(‘C’,’L’,’L’,’L’,’L’,’L’,’L’,’L’,’L’,’L’,’L’));

    itu kenapa ya om ??

  24. Halo,Pak Solichin apa kabar?
    saya mau tanya pak,,saya mau buat report tapi ada page breaknya perhalaman.
    contoh : jika ada tabel dengan detail 50 baris,saya mau potong menjadi 10 baris saja perhalaman.itu caranya bagaimana ya pak.mohon di share ke saya pak.
    Trim’s.

    Regards,
    Tommy.

  25. Terima kasih untuk tutorialnya pak. Saya mau tanya, bagaimana cara menampilkan judul tabel dalam report berulang pada page berikutnya? (karena jika reportnya lebih dari satu halaman, maka judul tabel tidak ikut diprint). Mohon petunjuknya pak ๐Ÿ™‚

  26. Thanks bgt sebelumnya…artikelnya sangat bermanfaat, Mas mau tanya nih klo mau akhiran nya di kasih tanda tangan gmana ya??? saya msh belum ngerti bgt nih…

  27. Pak, maaf saya masih belajar. mau nanya.. kenapa yaa cuma bisa 5 kolom saja ? kalo udah lebih dari 5 kolom ada error di
    $nb=max($nb,$this->NbLines($this->widths[$i],$data[$i]));

    mohon penjelasannya, pak. terima kasih ๐Ÿ™‚

  28. mas, mau nanya ne,,,
    klo menggunakan ci gmana?
    saya kendalanya di pemanggilan query, dan kebetulan query yang dibutuhkan lumayan banyak jadi.

    sebelumnya makasi tas tutorialnya

      1. nah, kalo untuk nge print data langsung 10 id karyawan, itu gmn mas? 1 id karyawan bisa 2 halaman, kalo 10 id bisa 20 halaman, sekarang ini saya pilih 1 id karyawan untuk 1 kali print,

  29. Mau tanya gan, kalo misalkan mau ambil dari 2 tabel database mysql, terus kedua hasil dari tabel mysql itu mau dimasukin ke dalam table autowrap, jadi intinya tabel autowrap nya itu mau jadi ada 2.. itu gimana ya ?

  30. Selamat Malam.
    Saya mau nanya, data yang akan saya tampilkan berasal dari 3 tabel.
    jadi bagaimana cara saya untuk menggunakan 3 tabel tersebut?

    contoh kasusnya, tabel biodata, tabel lokasi, tabel pembimbing.
    didalam tabel biodata ada id_lokasi dan id_pembimbing, dan yang akan ditampilkan adalah nama dari id tersebut, jadi bagaimana cara untuk menampikan nama dari id tersebut?
    mohon pencerahannya. terimakasih.

  31. assalamu alaikum pak.
    mau bertanya.
    untuk membuat halaman baru dengan judul yang baru gimana di halaman selanjutnya gimana?
    trus untuk untuk penggabungan cell nya bagaimana, jika pemanggilan datanya menggunakan array??
    Mohon tanggapannya pak!!!

  32. pak, punya saya error, Mohon Pencerahannya

    Fatal error: Call to undefined method FPDF_AutoWrapTable::FPDF() in C:\xampp\htdocs

    public function printPDF () {

    if ($this->options[‘paper_size’] == “F4”) {
    $a = 8.3 * 72; //1 inch = 72 pt
    $b = 13.0 * 72;
    (ERROR>>) $this->FPDF($this->options[‘orientation’], “pt”, array($a,$b)); (<FPDF($this->options[‘orientation’], “pt”, $this->options[‘paper_size’]);
    }

  33. terimaksih pak, tutorialnya sangat membantu sekali, tetapi ketika saya mencoba membuat seting kertas menjadi 8.5 in X 5.5 in (kertas continous) dan menambahkan function header dan footer, muncul masalah ketika pindah halaman, dihalaman selanjutnya tampilan menjadi tidak rapi (tulisan header terpotong separoh, seting kertas berubah), bolehkah saya minta petunjuk bapak atas masalah diatas, atas perhatiannya saya ucapkan terimakasih.

  34. permisi mas saya tadi coba menghubungkannya nya ke mysql.
    tapi kok datanya kok ga nampil ya gan?..
    cuman nomor atau jumlah rownya saja yang tampil…

    itu gimana ya mas??

  35. Malam pak achmat, gimana cara menambahkan kolom summary di paling bawah tabel

    No. PCS RP
    1. 20 50.000
    2. 30 60.000
    Total 50 110.000

      1. sudah sudah berhasil mas, utk contoh diatas..saya coba sukses…cuma bagaimana agar header tampil di setiap halaman baru…

        tks

Leave a Reply

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