PDF masih menjadi semacam fitur yang paling dibutuhkan pada sebuah aplikasi atau sistem informasi, dengan tujuan untuk membuat cetak data atau export data menjadi laporan yang berbentuk pdf.
Salah satu cara untuk membuat cetak laporan PDF pada Laravel, kita bisa menggunakan library DOMPDF. DOMPDF adalah salah satu library yang digunakan untuk membuat report berupa PDF dengan menggunakan PHP, sebenarnya banyak sekali library lain yang dapat digunakan untuk membuat report PDF, berdasarkan pengalaman library DOMPDF ini lebih mudah digunakan, serta lebih flexible dalam pembuatan reportnya. Cara kerja DOMPDF ini adalah mengkonversi dari skrip HTML menjadi bentuk PDF, cara menggunakan DOMPDF pada Laravel pun sangat mudah.
Jika sudah membaca membaca tutorial laravel sebelumnya, pasti kita sudah mempunyai database ‘datasekolah’ dan tabel guru, karena pada tutorial-tutorial sebelumnya kita telah menggunakan database dan tabel ini. Atau silahkan bisa import .sql berikut supaya lebih cepat jika belum punya database ‘datasekolah’ dan tabel guru tersebut. Buat database dengan nama ‘datasekolah’ dan import .sql berikut ke database ‘datasekolah’.
guru.sql
-- phpMyAdmin SQL Dump -- version 5.0.2 -- https://www.phpmyadmin.net/ -- -- Host: 127.0.0.1 -- Waktu pembuatan: 25 Apr 2021 pada 17.56 -- Versi server: 10.4.13-MariaDB -- Versi PHP: 7.4.8 SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; START TRANSACTION; 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 utf8mb4 */; -- -- Database: `datasekolah` -- -- -------------------------------------------------------- -- -- Struktur dari tabel `guru` -- CREATE TABLE `guru` ( `id` int(10) UNSIGNED NOT NULL, `nip` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, `nama` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, `alamat` text COLLATE utf8mb4_unicode_ci NOT NULL, `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, `deleted_at` datetime DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- -- Dumping data untuk tabel `guru` -- INSERT INTO `guru` (`id`, `nip`, `nama`, `alamat`, `created_at`, `updated_at`, `deleted_at`) VALUES (2034, '1', 'Tri Jail Gunarto', 'Jr. Kiaracondong No. 675, Malang 53847, Sulbar', NULL, NULL, NULL), (2035, '2', 'Harimurti Daryani Saragih S.Farm', 'Gg. Bacang No. 938, Makassar 46195, Riau', NULL, NULL, NULL), (2036, '2', 'Setya Iswahyudi', 'Ds. Tubagus Ismail No. 881, Pematangsiantar 14539, DIY', NULL, NULL, NULL), (2037, '0', 'Soleh Harjo Anggriawan', 'Ds. Astana Anyar No. 320, Ternate 94375, Kaltim', NULL, NULL, NULL), (2038, '1', 'Nabila Widiastuti', 'Ds. Yap Tjwan Bing No. 574, Kupang 80151, Jatim', NULL, NULL, NULL), (2039, '0', 'Yahya Pradana', 'Gg. W.R. Supratman No. 685, Pematangsiantar 41877, Aceh', NULL, NULL, NULL), (2040, '1', 'Rina Tira Fujiati S.Ked', 'Psr. Halim No. 833, Cirebon 73668, Jateng', NULL, NULL, NULL), (2041, '7', 'Baktianto Santoso', 'Ds. Hang No. 836, Ternate 13470, Jatim', NULL, NULL, NULL), (2042, '8', 'Oliva Olivia Wijayanti M.Kom.', 'Ds. Yoga No. 721, Sungai Penuh 45667, Kaltara', NULL, NULL, NULL), (2043, '0', 'Ilyas Sitompul', 'Kpg. Baha No. 133, Jayapura 96086, Jatim', NULL, NULL, NULL), (2044, '6', 'Unjani Devi Nurdiyanti M.Farm', 'Dk. Yos No. 713, Denpasar 51212, Jateng', NULL, NULL, NULL), (2045, '8', 'Fitriani Astuti S.Pt', 'Jr. Bambu No. 517, Prabumulih 11701, Sumsel', NULL, NULL, NULL), (2046, '3', 'Septi Maryati M.TI.', 'Jln. Dewi Sartika No. 132, Payakumbuh 83806, Jatim', NULL, NULL, NULL), (2047, '6', 'Atmaja Habibi', 'Jr. Sumpah Pemuda No. 604, Dumai 94891, Kalsel', NULL, NULL, NULL), (2048, '5', 'Bakti Sihombing', 'Jln. Ketandan No. 392, Bandung 38630, Sulsel', NULL, NULL, NULL), (2049, '3', 'Dalima Widiastuti S.T.', 'Jr. Reksoninten No. 620, Singkawang 84181, Kaltara', NULL, NULL, NULL), (2050, '3', 'Darimin Prakasa', 'Gg. Dewi Sartika No. 228, Tasikmalaya 12210, Sulut', NULL, NULL, NULL), (2051, '0', 'Karen Hartati', 'Jr. Bagas Pati No. 674, Tanjung Pinang 89483, Aceh', NULL, NULL, NULL), (2052, '1', 'Nugraha Opung Hutasoit S.Ked', 'Kpg. Ciumbuleuit No. 757, Pontianak 82224, Banten', NULL, NULL, NULL), (2053, '6', 'Banawi Luwes Halim', 'Psr. Sukajadi No. 216, Bekasi 57155, Jabar', NULL, NULL, NULL); -- -- Indexes for dumped tables -- -- -- Indeks untuk tabel `guru` -- ALTER TABLE `guru` ADD PRIMARY KEY (`id`); -- -- AUTO_INCREMENT untuk tabel yang dibuang -- -- -- AUTO_INCREMENT untuk tabel `guru` -- ALTER TABLE `guru` MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2054; COMMIT; /*!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 */;
Setelah database siap, kemudian buka file .env yang ada pada direktori dalam project laravelnya, pada file ini kita akan melakukan pengaturan koneksi database laravel.
.env
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=datasekolah DB_USERNAME=root DB_PASSWORD=
Silahkan sesuaikan dengan nama database, username dan password mysql yang dibuat pada file .env tersebut.
Jika ingin menginput data testing dengan cepat, kita bisa menggunakan Seeding dan Faker di laravel, silahkan baca kembali tentanng tutorial Seeding dan Faker pada Laravel.
Membuat Laporan PDF dengan DOMPDF Laravel
Karena kita akan membuat pdf dengan DOMPDF Laravel, maka langkah pertama yang akan kita lakukan adalah mendownload package DOMPDF terlebih dahulu.
Kita akan mendownload package DOMPDF Laravel menggunakan composer. silahkan buka terminal atau command line teman-teman. masuk ke direktori project laravel nya. dan ketik perintah composer berikut ini.
composer require barryvdh/laravel-dompdf
Tunggu sampai prosesnya selesai, kemudian akan kita integrasikan dengan project laravel kita. Buka file app.php yang terletak dalam folder config.
Dan tambahkan package yang baru kita download ini pada bagian providers dan aliases dalam file app.php, agar Laravel mengenali package DOMPF ini.
config/app.php
'providers' => [ .... Barryvdh\DomPDF\ServiceProvider::class, ], 'aliases' => [ .... 'PDF' => Barryvdh\DomPDF\Facade::class, ]
Selanjutnya buat route baru untuk menampilkan data guru dari database dan untuk menampilkan data guru sebagai pdf.
routes/web.php
Route::get('/guru', 'GuruController@index');
Route::get('guru/cetakpdf', 'GuruController@cetakpdf');
Route yang pertama ‘/guru‘ akan mengakses method index() dalam controller GuruController.php. Route kedua ‘/guru/cetakpdf‘ kita perintah untuk mengakses method cetakpdf() dalam controller GuruController.php.
Jika belum punya controller GuruController.php, maka sekarang buat controller tersebut dengan menggunakan php artisan :
php artisan make:controller GuruController
Setelah selesai membuat controller tersebut, buka file controller tersebut dan kita buat kedua method yang sudah disebutkan di atas tadi.
app/Http/Contollers/GuruController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
//panggil model GuruModel
use App\Models\GuruModel;
use PDF;
class GuruController extends Controller
{
public function index()
{
// mengambil data dari table guru
$dataguru = GuruModel::all();
// mengirim data guru ke view index
return view('v_guru',['guru' => $dataguru]);
}
public function cetakpdf()
{
//mengambil data dari table guru
$dataguru = GuruModel::all();
$pdf = PDF::loadview('v_gurupdf',['guru'=>$dataguru]);
return $pdf->download('laporan-guru-pdf');
}
}
Perhatikan sintak pada GuruController.php di atas, terdapat sintak use App\Models\GuruModel; karena kita akan berhubungan dengan table guru dan model GuruModel.php yang sudah kita buat sebelumnya.
Kemudian kita juga memanggil use PDF, untuk memanggil package PDF yang sudah kita deklarasikan sebelumnya pada file config/app.php.
Pada method index() kita mengambil semua data yang ada pada table guru, kemudian kita tampilkan dalam view v_guru.blade.php.
Pada method yang satunya lagi, yaitu method cetakpdf() kita ambil semua data guru dan kita simpan dalam variabel $dataguru.
public function cetakpdf()
{
//mengambil data dari table guru
$dataguru = GuruModel::all();
$pdf = PDF::loadview('v_gurupdf',['guru'=>$dataguru]);
return $pdf->download('laporan-guru.pdf');
}
Kemudian dengan PDF::loadview() kita menggunakan dompdf untuk membuka view-nya, kita isi nama view untuk halaman cetak pdf ini dengan view v_gurupdf.blade.php sambil kita passing data guru juga ke view ini.
Kemudian bagian terakhir kita return fungsi download() dari package dompdf untuk mencetak halaman menjadi file PDF dan mendownloadnya secara otomatis.
Selanjutnya kita buat view tersebut dengan nama v_guru.blade.php dan v_gurupdf.blade.php, pada kedua buah view ini kita hanya menampilkan data guru saja.
resources/views/v_guru.blade.php
<!DOCTYPE html>
<html>
<head>
<title>Membuat Laporan PDF Dengan DOMPDF Laravel</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
</head>
<body>
<div class="container">
<center>
<h4>Membuat Laporan PDF Dengan DOMPDF Laravel</h4>
<h5><a target="_blank" href="https://agussuratna.net/2022/05/19/tutorial-laravel-8-laporan-pdf-dengan-dompdf-pada-laravel/">www.agussuratna.net</a></h5>
</center>
<br/>
<a href="/pegawai/cetakpdf" class="btn btn-primary" target="_blank">CETAK PDF</a>
<p>
<table class='table table-bordered'>
<thead>
<tr>
<th>No</th>
<th>ID</th>
<th>NIP</th>
<th>Nama</th>
<th>Alamat</th>
</tr>
</thead>
<tbody>
@php $i=1 @endphp
@foreach($guru as $g)
<tr>
<td>{{ $i++ }}</td>
<td>{{$g->id}}</td>
<td>{{$g->nip}}</td>
<td>{{$g->nama}}</td>
<td>{{$g->alamat}}</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</body>
</html>
resources/views/v_gurupdf.blade.php
<!DOCTYPE html>
<html>
<head>
<title>Membuat Laporan PDF Dengan DOMPDF Laravel</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
</head>
<body>
<style type="text/css">
table tr td,
table tr th
{
font-size: 9pt;
}
</style>
<center>
<h5>Membuat Laporan PDF Dengan DOMPDF Laravel</h4>
<h6><a target="_blank" href="https://agussuratna.net/2022/05/19/tutorial-laravel-8-laporan-pdf-dengan-dompdf-pada-laravel/">www.agussuratna.net</a></h5>
</center>
<table class='table table-bordered'>
<thead>
<tr>
<th>No</th>
<th>ID</th>
<th>NIP</th>
<th>Nama</th>
<th>Alamat</th>
</tr>
</thead>
<tbody>
@php $i=1 @endphp
@foreach($guru as $g)
<tr>
<td>{{ $i++ }}</td>
<td>{{$g->id}}</td>
<td>{{$g->nip}}</td>
<td>{{$g->nama}}</td>
<td>{{$g->alamat}}</td>
</tr>
@endforeach
</tbody>
</table>
</body>
</html>
Selanjutnya kita lihat hasilnya dengan menjalankan project tersebut dengan perintah :
php artisan serve
dan akses dengan browser ke alamat localhost:8000/guru, sehingga hasilnya seperti berikut ini :

Data guru berhasil tampil dan di view v_guru.blade.php ini kita juga membuat sebuah tombol untuk mengalihkan halaman ke route /guru/cetakpdf, ketika klik tombol “CETAK PDF” tersebut maka file pdf-nya akan di download secara otomatis.
Selesai sudah membuat download PDF dengan dompdf laravel, jika tidak ingin file pdf-nya didownload dan ingin file pdf-nya langsung tampil pada browser, maka kita bisa menggunakan fungsi stream() pada method cetakpdf() tadi, sehingga sintaknya menjadi seperti berikut :
public function cetakpdf()
{
//mengambil data dari table guru
$dataguru = GuruModel::all();
$pdf = PDF::loadview('v_gurupdf',['guru'=>$dataguru]);
return $pdf->stream();
}
Maka hasilnya data guru dalam bentuk pdf akan ditampilkan langsung pada browser.
Demikian tutorial Membuat Laporan PDF Dengan DOMPDF Laravel, semoga bermanfaat. Jika ada pertanyaan silahkan tuliskan di kolom komentar. Selanjutnya kita akan membahas tutorial membuat import dan export excel pada laravel.
Be the first to comment