Membuat Report PDF Dengan PHP dan HTML2PDF


Dalam mengambangkan aplikasi berbasis web pastinya membutuhkan output berupa report. Pada umumnya report yang diminta akan digenerate menjadi pdf untuk kemudian dicetak ke printer. Salah satu plugin untuk mengenerate script html menjadi pdf adalah html2pdf.
  • Langkah-langkah:
  • Silahkan download html2pdf disini
  • Extrak ke dalam folder proyek
  • Buat script html yang akan diconvert menjadi pdf
  • Pada bagian atas script, tambahkan code berikut:
<?php
 ob_start();
?>
  • Pada bagian bawah script, tambahkan code berikut:
<?php
	$filename="report.pdf"; //ubah untuk menentukan nama file pdf yang dihasilkan nantinya
	//==========================================================================================================
	$content = ob_get_clean();
	$content = '<page style="font-family: freeserif">'.($content).'</page>';
	// panggil library html2pdf
	require_once('../../assets/vendor/html2pdf_v4.03/html2pdf.class.php');
	try
	{
		$html2pdf = new HTML2PDF('P','F4','en', false, 'ISO-8859-15',array(8, 8, 8, 8));
		$html2pdf->setDefaultFont('Arial');
		$html2pdf->writeHTML($content, isset($_GET['vuehtml']));
		$html2pdf->Output($filename);
	}
	catch(HTML2PDF_exception $e) { echo $e; }
?>
Di antara 2 code di atas adalah script html/php yang akan diconvert.
Berikut adalah source code lengkap report saya:
<?php
	error_reporting(0);
	session_start();
	ob_start();

	include "../../config/database.php";
	include "../../config/fungsi_tanggal.php";
	include "../../config/fungsi_rupiah.php";
	include "../../config/app.php";

	$now	= date("d-m-Y");
	$from = $_GET['from'];
	$to = $_GET['to'];
	
	$i=0;
	$sql = mysqli_query($mysqli,"select *,ifnull(b.nama_pelanggan,'-') as nama_pelanggan from penjualan a left join pelanggan b on a.id_pelanggan=b.id_pelanggan 
								where tanggal between '$from' and '$to 23:59:59' order by tanggal asc");
	$count = mysqli_num_rows($sql);

?>
<html xmlns="http://www.w3.org/1999/xhtml"> <!-- Bagian halaman HTML yang akan konvert -->
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        <title>REKAP PENJUALAN</title>
    </head>
    <body style="font-size:12px">
        <table>
			<tr>
				<td width="100"><img src="../../<?php echo $app_img_small;?>"></td>
				<td width="400" style="text-align:left;vertical-align:top;"><h3><?php echo $app_company;?></h3><i><?php echo $app_address;?><br>
				Telp: <?php echo $app_phone;?> , Email: <?php echo $app_email;?></i></td>
			</tr>	
		</table>
        <hr>
        <h3>REKAP PENJUALAN</h3>
        <table width="100%">
			<tr>
				<td width="80" height="20">Periode : </td>
				<td width="120"><?php echo tgl_detail(tgl_balik($from));?></td>
				<td width="30">s.d.</td>
				<td width="120"><?php echo tgl_detail(tgl_balik($to));?></td>
			</tr>
		</table>
		<br>
		<table width="100%" border="0.3" cellpadding="0" cellspacing="0">
			<thead>
				<tr style="background-color:#ffffdc;color:#000000">
					<th height="25" style="text-align:center;vertical-align:middle;">No</th>
					<th style="text-align:center;vertical-align:middle;">ID Penjualan</th>
					<th width="65" style="text-align:center;vertical-align:middle;">ID Pelanggan</th>
					<th style="text-align:center;vertical-align:middle;">Nama Pelenggan</th>
					<th width="80" style="text-align:center;vertical-align:middle;">Tanggal Transaksi</th>
					<th width="100" style="text-align:center;vertical-align:middle;">Total Sebelum Diskon</th>
					<th width="80" style="text-align:center;vertical-align:middle;">Diskon</th>
					<th width="100" style="text-align:center;vertical-align:middle;">Total Setelah Diskon</th>
				</tr>
			</thead>
			<tbody>
		<?php
			while ($data = mysqli_fetch_array($sql)){
				$i++;
				echo "
					<tr>
						<td width='20' height='20' style='vertical-align:middle;text-align:center;'>$i</td>
						<td width='105' style='vertical-align:middle;text-align:center;'>$data[id_penjualan]</td>
						<td width='65' style='vertical-align:middle;text-align:center;'>$data[id_pelanggan]</td>
						<td width='150'>$data[nama_pelanggan]</td>
						<td style='vertical-align:middle;text-align:center;'>".date("d-m-Y H:i",strtotime(($data['tanggal'])))."</td>
						<td style='text-align:right'>".rp($data['total_before_diskon'])."</td>
						<td style='text-align:right'>".rp($data['diskon'])."</td>
						<td style='text-align:right'>".rp($data['total_after_diskon'])."</td>
					</tr>
				";
				$sum=$sum+$data['total_after_diskon'];
			}
			echo "<tr>
					<td colspan='7' height='20' style='vertical-align:middle;text-align:center;'>Total</td><td style='vertical-align:middle;text-align:right;'>".rp($sum)."</td>
				  </tr>";
		?>	
			</tbody>
		</table>
		<p>Dicetak Oleh : <?php echo $_SESSION['nama_admin'];?><br>
		Pada Tanggal : <?php echo tgl_detail($now);?></p>
    </body>
</html><!-- Akhir halaman HTML yang akan di konvert -->

<?php
	$filename="JUAL_".$from."_sd_".$to.".pdf"; //ubah untuk menentukan nama file pdf yang dihasilkan nantinya
	//==========================================================================================================
	$content = ob_get_clean();
	$content = '<page style="font-family: freeserif">'.($content).'</page>';
	// panggil library html2pdf
	require_once('../../assets/vendor/html2pdf_v4.03/html2pdf.class.php');
	try
	{
		$html2pdf = new HTML2PDF('P','F4','en', false, 'ISO-8859-15',array(8, 8, 8, 8));
		$html2pdf->setDefaultFont('Arial');
		$html2pdf->writeHTML($content, isset($_GET['vuehtml']));
		$html2pdf->Output($filename);
	}
	catch(HTML2PDF_exception $e) { echo $e; }
?>

Output:

Silahkan disesuaikan dengan kebutuhan proyek anda. Semoga bermanfaat.

Posting Komentar

0 Komentar