Please enable JavaScript!
Bitte aktiviere JavaScript!
S'il vous plaît activer JavaScript!
Por favor,activa el JavaScript!
antiblock.org

 |  | 

PHP

Cara Mudah Membuat Laporan PDF dengan PHP dan MySQL

img-responsive

Setelah sebelumnya saya sudah membuat catatan mengenai Cara Membuat Laporan PDF dengan Codeigniter dan HTML2Pdf, kali ini saya ingin berbagi cara membuat laporan pdf hanya dengan PHP dan MySQL (tanpa menggunakan framework Codeigniter). Silahkan ikuti langkah-langkahnya berikut ini :

STEP 1 – PERSIAPAN

Kita akan mempersiapkan terlebih dahulu hal-hal yang diperlukan.

  1. Download Plugin HTML2PDF nya, klik link berikut ini : Download.
    Bingung cara downloadnya? klik disini untuk melihat caranya.
  2. Buat sebuah folder baru dengan nama latihan_pdf, lalu simpan di xampp/htdocs/
  3. Ekstrak dan Copy plugin HTML2PDF yang sudah didownload ke dalam folder xampp/htdocs/latihan_pdf/

STEP 2 – DATABASE

Buat sebuah database dengan nama mynotescode, lalu buat tabel siswa dengan struktur tabel seperti gambar berikut ini :

Struktur Tabel Siswa - Cara Mudah Membuat Laporan PDF dengan PHP dan MySQL

CREATE TABLE IF NOT EXISTS `siswa` (
  `nis` varchar(11) NOT NULL,
  `nama` varchar(50) NOT NULL,
  `jenis_kelamin` varchar(10) NOT NULL,
  `telp` varchar(15) NOT NULL,
  `alamat` text NOT NULL,
  PRIMARY KEY (`nis`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

STEP 3 – KONEKSI DATABASE

Pada tahap ini, kita akan membuat sebuah file php yang berfungsi untuk koneksi ke database MySQL. Buat sebuah file dengan nama koneksi.php lalu simpan di folder xampp/htdocs/latihan_pdf/. Berikut ini isi dari file tersebut :

<?php
$host = "localhost"; // Nama hostnya
$user = "root"; // Username
$pass = ""; // Password (Isi jika menggunakan password)
$connect = mysqli_connect($host, $user, $pass, "mynotescode"); // Koneksi ke MySQL
?>

STEP 4 – TAMPILAN AWAL

Selanjutnya kita akan membuat halaman / tampilan awal website kita. Buat sebuah file php dengan nama index.php dan simpan di folder xampp/htdocs/latihan_pdf. Berikut ini kodenya :

<html>
<head>
    <title>Data Siswa</title>
</head>
<body>
<h1>Data Siswa</h1><hr>

<a href="print.php">Cetak Data</a><br><br>

<table border="1" cellpadding="8">
<tr>
    <th>NIS</th>
    <th>Nama</th>
    <th>Jenis Kelamin</th>
    <th>Telepon</th>
    <th>Alamat</th>
</tr>
 
<?php
// Load file koneksi.php
include "koneksi.php";
 
$query = "SELECT * FROM siswa"; // Tampilkan semua data gambar
$sql = mysqli_query($connect, $query); // Eksekusi/Jalankan query dari variabel $query
$row = mysqli_num_rows($sql); // Ambil jumlah data dari hasil eksekusi $sql
 
if($row > 0){ // Jika jumlah data lebih dari 0 (Berarti jika data ada)
    while($data = mysqli_fetch_array($sql)){ // Ambil semua data dari hasil eksekusi $sql
        echo "<tr>";
        echo "<td>".$data['nis']."</td>";
        echo "<td>".$data['nama']."</td>";
        echo "<td>".$data['jenis_kelamin']."</td>";
        echo "<td>".$data['telp']."</td>";
        echo "<td>".$data['alamat']."</td>";
        echo "</tr>";
    }
}else{ // Jika data tidak ada
    echo "<tr><td colspan='4'>Data tidak ada</td></tr>";
}
?>
</table>
</body>
</html>

Berikut ini adalah sedikit penjelasan dari kode diatas :

$sql = mysqli_query($connect, $query);
Untuk mengeksekusi / menjalankan query sql. struktur dasar penulisannya adalah sebagai berikut :

mysqli_query($connect, $query);

/*
Keterangan :
- $connect : diisi dengan koneksi ke mysql. hasil dari mysqli_connect
- $query : diisi dengan Query SQL yang diinginkan
*/

mysqli_num_rows($sql);
Untuk mengambil jumlah data dari hasil eksekusi suatu query sql. Struktur dasar penulisannya adalah sebagai berikut :

mysqli_num_rows($sql);

/*
Keterangan :
- $sql : diisi dengan hasil eksekusi query sql(mysql_query())
*/

mysqli_fetch_array($sql);
Untuk mengambil data dari hasil eksekusi suatu query sql. Struktur dasar penulisannya adalah sebagai berikut :

mysqli_fetch_array($sql);

/*
Keterangan :
- $sql : diisi dengan hasil eksekusi query sql(mysql_query())
*/

Kode diatas saya simpan didalam looping while berfungsi untuk melakukan proses perulangan sampai data terkahir dengan tujuan agar kita bisa menampilkan datanya satu per satu.

echo "<tr>";
echo "<td>".$data['nis']."</td>";
echo "<td>".$data['nama']."</td>";
echo "<td>".$data['jenis_kelamin']."</td>";
echo "<td>".$data['telp']."</td>";
echo "<td>".$data['alamat']."</td>";
echo "</tr>";

Pada kode diatas terdapat variabel $data digunakan untuk mengambil isi dari field-field yang ada pada tabel siswa di database latihan. Pada kode diatas juga ada kode yang berada di dalam tanda [‘…..’], kode tersebut harus sama dengan nama field yang ada pada tabel siswa.


STEP 5 – PROSES CETAK (PRINT)

Sesuai judul dari step 5 ini, kita akan masuk ke inti dari catatan ini yakni membuat proses cetak ke file pdf. Pertama-tama buat dulu sebuah file baru dan beri nama print.php, lalu simpan file tersebut di folder xampp/htdocs/latihan_pdf/. Berikut ini isi / skrip dari file tersebut :

<?php ob_start(); ?>
<html>
<head>
  <title>Cetak PDF</title>
    
   <style>
   table {border-collapse:collapse; table-layout:fixed;width: 630px;}
   table td {word-wrap:break-word;width: 20%;}
   </style>
</head>
<body>
  
<h1 style="text-align: center;">Data Siswa</h1>
<table border="1" width="100%">
<tr>
  <th>NIS</th>
  <th>Nama</th>
  <th>Jenis Kelamin</th>
  <th>Telepon</th>
  <th>Alamat</th>
</tr>
<?php
// Load file koneksi.php
include "koneksi.php";
 
$query = "SELECT * FROM siswa"; // Tampilkan semua data gambar
$sql = mysqli_query($connect, $query); // Eksekusi/Jalankan query dari variabel $query
$row = mysqli_num_rows($sql); // Ambil jumlah data dari hasil eksekusi $sql
 
if($row > 0){ // Jika jumlah data lebih dari 0 (Berarti jika data ada)
    while($data = mysqli_fetch_array($sql)){ // Ambil semua data dari hasil eksekusi $sql
        echo "<tr>";
        echo "<td>".$data['nis']."</td>";
        echo "<td>".$data['nama']."</td>";
        echo "<td>".$data['jenis_kelamin']."</td>";
        echo "<td>".$data['telp']."</td>";
        echo "<td>".$data['alamat']."</td>";
        echo "</tr>";
    }
}else{ // Jika data tidak ada
    echo "<tr><td colspan='4'>Data tidak ada</td></tr>";
}
?>
</table>

</body>
</html>
<?php
$html = ob_get_contents();
ob_end_clean();
        
require_once('html2pdf/html2pdf.class.php');
$pdf = new HTML2PDF('P','A4','en');
$pdf->WriteHTML($html);
$pdf->Output('Data Siswa.pdf', 'D');
?>

Sebenarnya skrip diatas hampir sama dengan isi dari file index.php. Hanya saja pada skrip diatas terdapat skrip berikut ini :

<?php ob_start(); ?>
// …..
// skrip html
// …..
<?php
$html = ob_get_contents();
ob_end_clean();

Pada skrip print.php, Skrip yang berfungsi untuk menampilkan data siswa pada tabel diapit oleh skrip yang saya beri tanda merah. Skrip tersebut berfungsi untuk mengambil tampilan tabel data siswa dan memasukkannya ke dalam variabel $html. Variabel $html ini akan digunakan sebagai output yang kita inginkan pada file pdfnya. Lihat skrip berikut ini :

require_once(‘html2pdf/html2pdf.class.php’);
$pdf = new HTML2PDF(‘P’,’A4′,’en’);
$pdf->WriteHTML($html);
$pdf->Output(‘Data Siswa.pdf’, ‘D’);

Skrip diatas digunakan untuk mengkonversi skrip html menjadi pdf. Dimulai dari skrip require_once(‘./assets/html2pdf/html2pdf.class.php’);, skrip ini berfungsi untuk memuat (meload) plugin html2pdfnya. Lalu skrip $pdf = new HTML2PDF(‘P’,’A4′,’en’);, skrip ini berfungsi memanggil fungsi __construct pada plugin html2pdf. Berikut ini adalah fungsi __construct yang kita panggil pada plugin html2pdfnya :

/**
* Constructeur
*
* @param string $sens - orientasinya : landscape atau portrait
* @param string $format - format kertasnya : A4, A5, dan lain-lain
* @param string $langue - Bahasanya : en, fr, dan lain-lain
* @param boolean $unicode - TRUE means clustering the input text IS unicode (default = true)
* @param String $encoding - charset encoding; Default is UTF-8
* @param array $marges - margins by default, in order (left, top, right, bottom)
* @return null
*/
public function __construct($sens = 'P', $format = 'A4', $langue='en', $unicode=true, $encoding='UTF-8', $marges = array(5, 5, 5, 8))

Lalu skrip $pdf->WriteHTML($html);, skrip ini berfungsi untuk menentukan apa yang ingin ditampilkan pada pdfnya. Struktur dasar penulisannya yaitu $pdf->WriteHTML(‘kode_htmlnya’);. Pada kasus ini, kita memasukan kode htmlnya kedalam variabel $html. Yang terakhir skrip $pdf->Output(‘Data Siswa.pdf’, ‘D’);, kode tersebut berfungsi untuk menentukan nama file pdf yang kita buat. dan juga untuk menentukan mode apa yang ingin dilakukan ketika skrip tersebut dipanggil. Contohnya disitu ada skrip …,’D’);, Huruf D disitu berarti ketika skrip dipanggil, maka lakukan proses download pada file pdfnya. sebenarnya ada banyak mode yang bisa kita lakukan, seperti tampilkan pdfnya dibrowser ketika skrip itu dipanggil dan lain-lain (untuk lebih detailnya, klik disini).

Source Code
Untuk mengunduh source code nya, Klik link berikut ini : Download.
Bingung cara downloadnya? klik disini untuk melihat caranya.

Sekian untuk catatan kali ini, semoga bisa bermanfaat dan membantu. Jika ada yang kurang dimengerti, jangan sungkan untuk bertanya pada form komentar dibawah ini.

Terimakasih.

Sumber & Referensi
http://wiki.spipu.net/doku.php?id=html2pdf:en:v4:Accueil


Tutorial membuat laporan pdf dengan php dan mysql, Tutorial membuat laporan pdf dengan php mysql dan html2pdf, Cara mudah membuat laporan pdf dengan php mysql dan html2pdf, Step by step membuat laporan pdf dengan php dan mysql, Step by step membuat laporan pdf dengan php mysql dan html2pdf

Laporan PDF

(Total : 29,747 viewers, 9 viewers today)
cara-mudah-membuat-laporan-pdf-dengan-php-dan-mysql

ABOUT THE AUTHOR

Interested in android programming, long time focused on web development. Visit My Profile Site at www.rizaldimaulidia.com

POST YOUR COMMENTS

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

Name *

Email *

Website

49 Comments

  1. Ghea sambara

    Saya sudah membuat web sedrhana di dreamwever nah saya tinggal membuat laporannya(report)di pdf apakah saya hrus membuat php bru untuk membuat reportnya atau saya memasukan codding pada rekam medis saya

    • Rizaldi Maulidia Achmad

      kalau soal itu terserah mba bagaimana enak nya. tapi saran saya pisah saja file php nya untuk yang report

  2. Ghea sambara

    Mas mau nanya saya kan pemula membuat web saya du kah tugas besr disuruh membuat rekam medis saya sdh kerjakan smua tpi report saya blm , yang saya mau tnyakan gmna bkinnya aku kurang paham mas dgn penjelasannya. Mksh

    • Rizaldi Maulidia Achmad

      tidak mengertinya di bagian mana mba? biar saya bantu

  3. andisumbayak

    klo mau menampilkan pdfnya ke dalam modal bootstrap gmn om?

  4. ahmadrifan

    TCPDF ERROR: Could not include font definition file: ‘glyphicons halflings’

    • Rizaldi Maulidia Achmad

      jangan pakai icon bootstrap om

  5. Febby Satryadi

    Notice: Undefined offset: 3 in C:\xampp\htdocs\eta\admin\laporan\html2pdf\html2pdf.class.php on line 2133

    Notice: Undefined offset: 3 in C:\xampp\htdocs\eta\admin\laporan\html2pdf\html2pdf.class.php on line 2156
    TCPDF ERROR: Some data has already been output, can’t send PDF file

    Error kenapa tuh??

    • Rizaldi Maulidia Achmad

      Coba kirimkan source code nya lewat fans page fb om. Biar saya bisa cek

  6. ahmad rifan

    error om.., TCPDF ERROR: Could not include font definition file: ‘glyphicons halflings’

    • Rizaldi Maulidia Achmad

      itu icon bootstrap ga akan bisa kebaca di HTML2PDF om

  7. Rizki Putra

    Terimakasih gan

    • Rizaldi Maulidia Achmad

      Siap om 😀

  8. syaifuddin Khan

    Mas gimana ya caranya mengatur lebar kolom
    misal lebar kolom 1=5%, kolom 2=10%, kolom 3=7% misalkan….
    biar bagus tampilannya

    • Rizaldi Maulidia Achmad

      Setau saya dan dari pengalaman saya. Untuk html2pdf ini tidak bisa menggunakan persen untuk setting width kolom nya. Kalau mau pun langsung pakai pixel om. Pakai css saja, tambahkan skrip seperti berikut pada tag td nya :
      style=”width: 100px;”

      100 disitu atur sesuai keinginan

      • ahmad rifan

        Teryata :”v .

        • Rizaldi Maulidia Achmad

          ternyata apaan om? haha

  9. gopybermana

    Mas..kok tidak bisa di extrak file pdf_php.7z nya ??
    🙂

  10. Andhika99

    berhasil gan, tetapi kuk ada beberapa tampilan yang gak sesuai dengan format htmlnya ya? contoh ukuran gambar, alignment jadi rata kiri. dan ukuran font. ada saran gan?

    • Rizaldi Maulidia Achmad

      Alignment justify harusnya bisa. Ukuran font pun bisa. Itu pakai css kan? Soalnya di html2pdf tidak semua di dukung om

  11. afif fudin

    Warning: Cannot modify header information – headers already sent by (output started at C:\xampp\htdocs\dinas\home-user.php:116) in C:\xampp\htdocs\dinas\html2pdf\_tcpdf_5.0.002\tcpdf.php on line 6141
    TCPDF ERROR: Some data has already been output to browser, can’t send PDF file

    solusinya ini bagaimana min ?

    • Rizaldi Maulidia Achmad

      Itu errornya karena ada karakter sebelum skrip ob_start()
      pokoknya semua hal yang akan di munculkan harus di simpan di antara ob_start()

      coba kirimkan source nya. Biar saya cek. Kirim via fans page fb

  12. ciptania

    TCPDF ERROR: Some data has already been output, can’t send PDF file
    kalo error nya kayak gituh, kenapa yah ?

    • Rizaldi Maulidia Achmad

      Error itu karena ada output yg keluar. Coba kirimkan source code nya lewat fans page kami mba. Biar saya bisa cek kesalahannya dimana

  13. Alfian Darmawan

    arning: require_once(html2pdf/html2pdf.php): failed to open stream: No such file or directory in C:\xampp\htdocs\kp\admin\print.php on line 57

    Fatal error: require_once(): Failed opening required ‘html2pdf/html2pdf.php’ (include_path=’C:\xampp\php\PEAR’) in C:\xampp\htdocs\kp\admin\print.php on line 57

    min ini kenapa yah ?

    • Rizaldi Maulidia Achmad

      step 1 nya udah dilakukan belum om? itu errornya karena tidak bisa menemukan folder html2pdf nya. coba ikutin step 1 sampai selesai

      • Alfian Darmawan

        sudah min masih ttp gabisa

        • Rizaldi Maulidia Achmad

          coba kirim source code nya ke saya. biar saya cek. kirim via fans page fb kami.

      • Alfian Darmawan

        min ada no wa ?

  14. deviandista

    mas, aku udh coba dilocalhost dan berhasil buat cetak pdf. tapi waktu dijalankan melalui hosting gak bisa.kenapa ya?

    • Rizaldi Maulidia Achmad

      Apa ada error yang muncul? Apa errornya?

      • deviandista

        This page isn’t working

        larijava.000webhostapp.com is currently unable to handle this request.
        HTTP ERROR 500

        itu mas,error 500 waktu di hosting

        • Rizaldi Maulidia Achmad

          coba kontak admin dari pihak hostingnya mba. seharusnya kalau di local jalan, di hosting pun tidak masalah.

          • deviandista

            ok, makasih mas

  15. ana Minaha

    kalo laporan yang berbentuk seperti microsoft word pake php atau html bisa gk ya?

    • Rizaldi Maulidia Achmad

      Sangat bisa mba. Kebetulan tutorial untuk export ke word ada dalam list tutorial yang akan kami buat hehe

  16. zaini jay

    oh iya sudah bisa om ada kesalahan dikit di bagian script yang harus nya tidak di buat hehe makasih ya ilmu nya

    • Rizaldi Maulidia Achmad

      sip om. sama-sama om, senang bisa membantu 😀

  17. zaini jay

    mf mau nanya ini masalah nya di mana ya?

    Fatal error: Uncaught ERROR n°4File : C:\xampp\htdocs\projek\html2pdf\_class\parsingHtml.class.phpLine : 119HTML code invalid, the tags are not closed in an orderly fashion.Status : Array ( [0] => page [1] => table [2] => tr [3] => th [4] => a [5] => font ) HTML : …><font color=black>Tambah Data</a></th> </tr> <tr> <td p align=… thrown in C:\xampp\htdocs\projek\html2pdf\_class\parsingHtml.class.php on line 119

    • Rizaldi Maulidia Achmad

      Itu karena ada tag html yg belum di tutup om. Coba periksa kembali dengan teliti

      • zaini jay

        tag html yg di proses file print.php atau di file parsingHtml.class.php nya om

        • Rizaldi Maulidia Achmad

          Yang di proses print.php om

  18. alif nur

    Masss Pass kucoba error :
    ‘Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in E:\xampp\htdocs\pdf_php\dataPasar.php on line 85’
    mohon bantuannya mas…

    • Rizaldi Maulidia Achmad

      dalam tutorial yang saya buat bukan pakai “mysql_fetch_array” om. tapi pakai “mysqli_fetch_array”. harap periksa kembali kode nya dengan teliti. jika masih ada error kabari saya lagi om.
      Maaf baru bales

  19. Andhikaelfriza

    Kalo cuma berdasarkan nilai aja gimana?
    Jadi gak semuanya

    • Andhikaelfriza

      Berdasarkan nim maksudnya

      • Rizaldi Maulidia Achmad

        bisa saja om. tinggal ubah link print nya jadi seperti ini :
        <a href="print.php?nim=12345678">Cetak Data</a>

        jadi kirim nim nya melalui URL. nanti pada proses cetak PDF nya. ubah query ini :
        $query = “SELECT * FROM siswa”;

        menjadi seperti ini:
        $query = “SELECT * FROM siswa WHERE nim='”.$_GET[‘nim’].”‘”;

        kurang lebih seperti itu gambarannya. maaf baru bisa balas sekarang om

NOTE ARCHIVES