Tentu, ini artikel yang Anda minta:
Di banyak aplikasi bisnis, kebutuhan untuk menghasilkan laporan dalam format PDF adalah hal yang umum, entah itu faktur, ringkasan data, atau dokumen lainnya. Laravel tidak memiliki fitur bawaan untuk membuat PDF, tetapi integrasinya dengan pustaka pihak ketiga seperti Dompdf menjadikannya sangat mudah. Dompdf adalah pustaka yang kuat untuk mengubah HTML menjadi PDF.
Dalam tutorial Laravel ke-37 ini, kita akan membahas langkah demi langkah cara menginstal Dompdf dan menggunakannya untuk membuat laporan PDF di aplikasi Laravel Anda.
1. Menginstal Dompdf
Langkah pertama adalah menginstal paket barryvdh/laravel-dompdf melalui Composer. Paket ini adalah wrapper yang mempermudah penggunaan Dompdf dalam lingkungan Laravel.
Buka terminal Anda dan jalankan perintah berikut:
composer require barryvdh/laravel-dompdf
Setelah instalasi selesai, Dompdf akan secara otomatis ditemukan oleh Laravel (berkat package discovery).
2. Membuat View untuk PDF
Dompdf bekerja dengan merender konten HTML menjadi format PDF. Jadi, langkah selanjutnya adalah membuat view Blade yang akan menjadi template laporan PDF Anda.
Buat file baru di resources/views/reports/invoice.blade.php. Anda bisa menggunakan HTML dan CSS penuh di sini.
Contoh resources/views/reports/invoice.blade.php:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Faktur #{{ $invoiceId }}</title>
    <style>
        body { font-family: 'Helvetica', 'Arial', sans-serif; font-size: 12px; }
        .header { text-align: center; margin-bottom: 20px; }
        .table-items { width: 100%; border-collapse: collapse; }
        .table-items th, .table-items td { border: 1px solid #ccc; padding: 8px; text-align: left; }
        .total { text-align: right; margin-top: 20px; font-size: 14px; font-weight: bold; }
    </style>
</head>
<body>
    <div class="header">
        <h1>Faktur</h1>
        <h3>Invoice #{{ $invoiceId }}</h3>
    </div>
    <p>
        **Kepada:** {{ $customerName }}<br>
        **Tanggal:** {{ $date }}
    </p>
    <table class="table-items">
        <thead>
            <tr>
                <th>Deskripsi</th>
                <th>Harga</th>
                <th>Kuantitas</th>
                <th>Total</th>
            </tr>
        </thead>
        <tbody>
            @foreach($items as $item)
            <tr>
                <td>{{ $item['description'] }}</td>
                <td>Rp {{ number_format($item['price'], 0, ',', '.') }}</td>
                <td>{{ $item['quantity'] }}</td>
                <td>Rp {{ number_format($item['price'] * $item['quantity'], 0, ',', '.') }}</td>
            </tr>
            @endforeach
        </tbody>
    </table>
    <div class="total">
        Total: Rp {{ number_format($total, 0, ',', '.') }}
    </div>
</body>
</html>
Pastikan Anda menggunakan CSS inline atau tag <style> langsung di dalam file HTML. Dompdf tidak mendukung CSS eksternal secara default.
3. Membuat Controller dan Route
Sekarang, kita akan membuat sebuah controller yang akan mengambil data, memuat view, dan mengubahnya menjadi PDF.
Gunakan perintah Artisan untuk membuat controller baru:
php artisan make:controller InvoiceController
Kemudian, modifikasi app/Http/Controllers/InvoiceController.php seperti di bawah ini:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use PDF; // Menggunakan facade PDF dari package
class InvoiceController extends Controller
{
    public function generateInvoice()
    {
        // Contoh data faktur
        $data = [
            'invoiceId' => 'INV-001',
            'customerName' => 'Budi Santoso',
            'date' => date('d-m-Y'),
            'items' => [
                ['description' => 'Layanan Web Hosting', 'price' => 200000, 'quantity' => 1],
                ['description' => 'Domain .com', 'price' => 150000, 'quantity' => 1],
                ['description' => 'Biaya Desain Logo', 'price' => 500000, 'quantity' => 1],
            ]
        ];
        $total = array_sum(array_map(function($item) {
            return $item['price'] * $item['quantity'];
        }, $data['items']));
        // Meneruskan data ke view
        $data['total'] = $total;
        // Memuat view 'reports.invoice' dengan data yang ada
        $pdf = PDF::loadView('reports.invoice', $data);
        // Mengembalikan PDF untuk diunduh (download)
        return $pdf->download('faktur_INV-001.pdf');
        // Atau mengembalikan PDF untuk ditampilkan di browser (stream)
        // return $pdf->stream('faktur_INV-001.pdf');
    }
}
Terakhir, definisikan rute di routes/web.php untuk memicu fungsi ini:
use App\Http\Controllers\InvoiceController;
Route::get('/generate-invoice', [InvoiceController::class, 'generateInvoice']);
4. Menggunakan Dompdf
Sekarang, jika Anda mengakses URL /generate-invoice di browser Anda, Laravel akan menjalankan controller InvoiceController, memuat view invoice.blade.php dengan data faktur, merendernya menjadi PDF, dan mengunduhnya secara otomatis ke komputer Anda.
Jika Anda ingin menampilkan PDF langsung di browser, cukup ganti download() dengan stream() di controller. Metode ini berguna untuk pratinjau PDF.
Kesimpulan
Dengan integrasi yang mulus antara Laravel dan Dompdf, Anda dapat dengan mudah membuat laporan PDF dinamis dari konten HTML yang sudah Anda miliki. Ini adalah solusi yang efisien dan kuat untuk berbagai kebutuhan dokumentasi di aplikasi web Anda.