BLANTERORIONv101

Cara Membuat export PDF di laravel

21 Juli 2022

Pada artikel kali ini saya akan memberikan tutorial tentang Cara Membuat export PDF di laravel. Fitur ini biasanya sangat di butuhkan pada suatu sistem, karena dengan fitur export PDF kita dapat menyimpan dokumen secara fisik.

Untuk membuat fitur Export PDF di laravel sangatlah mudah, karena laravel memiliki banyak package yang memudahkan kita untuk membuat sebuah fitur. Package yang akan kita gunakan kali ini adalah DomPDF dari barryvdh https://github.com/barryvdh/laravel-dompdf.

Silahkan ikuti langkah-langkah dibawah ini, untuk mulai membuat fitur Export PDF pada aplikasi laravel.

Jika anda belum meiliki aplikasi laravel, silahkan baca pada artikel ini : Membuat CRUD dengan Laravel.

Langkah 1 : Install Package DomPDF

Pada langkah ini kita akan menginstal package DomPDF pada aplikasi laravel kita. Untuk menginstalnya cukup dengan menjalankan perintah dibawah pada terminal yang anda gunakan.

composer require barryvdh/laravel-dompdf

Langkah 2 : Konfigurasi Package DomPDF

Setelah selesai menginstal package tersebut kita perlu untuk melakukan konfigurasi di aplikasi laravel. Untuk itu silahkan buka file app.php pada folder config config/app.php.

Silahkan scroll ke bagian bawah untuk menemupkan 'providers' dan 'aliases' dan isi seperti kode dibawah ini. 

'providers' => [
    ....
    Barryvdh\DomPDF\ServiceProvider::class,
],
'aliases' => [
    ....
    'PDF' => Barryvdh\DomPDF\Facade::class,
],

Jika sudah melakukan konfigurasi pada bagian config/app.php, silahkan jalankan perintah dibawah ini :

php artisan vendor:publish --provider="Barryvdh\DomPDF\ServiceProvider"

Langkah 3 : Controller & Route

Pada langkah ini saya akan memberikan contoh dengan file controller yang sudah ada. Silahkan anda buat baru atau gunakan file controller yang anda miliki.

Pada ProductController.php saya akan menambahkan sebuah function untuk generate atau export file PDF dengan mengambil data dari table Product.

public function exportPDF()
    {
        $product = Product::all();
        $pdf = PDF::loadView('product.pdf', ['product' => $product]);

        return $pdf->download('product.pdf');
    }

Jika sudah selesai pada bagian Controller kita akan menambahkan Route untuk export file PDF. 

Route::get('pdf', [ProductController::class, 'exportPDF'])->name('export_pdf');


Langkah 4 : View

Ini merupakan langkah terakhir dimana kita akan membuat tampilan untuk menampilkan data product yang akan kita export ke file .pdf.

Link untuk Export atau download file PDF seperti dibawah ini :

<a href="{{ route('export_pdf') }}" target="_blank" class="btn btn-outline-danger mb-3 float-right"><i class="bi bi-filetype-pdf"></i> Export To PDF</a>


*Penjelasan :

Masukan route yang sesuai dengan kalian buat.

<!doctype html>
<html lang="en">

<head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css"
        integrity="sha384-zCbKRCUGaJDkqS1kPbPd7TveP5iyJE0EjAuZQTgFLD2ylzuqKfdKlfG/eSrtxUkn" crossorigin="anonymous">
    <!-- Fonts -->
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    {{-- <link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@200;400&display=swap" rel="stylesheet"> --}}

    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.9.1/font/bootstrap-icons.css">

    {{-- <style>
        body {
            font-family: 'Montserrat', sans-serif;
        }
    </style> --}}

    <title>Hello, world!</title>
</head>

<body>

    <div class="container mt-5">
        <h1 class="text-center mb-5">List Produk</h1>
        @if (Session::has('success'))
            <div class="alert alert-success alert-dismissible fade show" role="alert">
                {{ Session::get('success') }}
                <button type="button" class="close" data-dismiss="alert" aria-label="Close">
                    <span aria-hidden="true">&times;</span>
                </button>
            </div>
        @endif
        <div class="card shadow-sm">
            <div class="card-body">
                <table class="table table-striped">
                    <thead>
                        <tr>
                            <th scope="col">NO</th>
                            <th scope="col">Name</th>
                            <th scope="col">Details</th>
                            <th scope="col">File</th>
                        </tr>
                    </thead>
                    <tbody>
                        <!-- untuk penomoran -->
                        @php
                            $no = 1;
                        @endphp

                        <!-- untuk menampilkan data -->
                        @foreach ($product as $hasil)
                            <tr>
                                <th scope="row">{{ $no++ }}</th>
                                <td>{{ $hasil->name }}</td>
                                <td>{{ $hasil->details }}</td>
                                <td>
                                    <img src="{{ asset($hasil->file) }}" title="{{ $hasil->file }}" width="100">
                                </td>
                            </tr>
                        @endforeach
                    </tbody>
                </table>
            </div>
        </div>
    </div>


    <!-- Optional JavaScript; choose one of the two! -->

    <!-- Option 1: jQuery and Bootstrap Bundle (includes Popper) -->
    <script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js"
        integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous">
    </script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.bundle.min.js"
        integrity="sha384-fQybjgWLrvvRgtW6bFlB7jaZrFsaBXjsOMm/tB9LTS58ONXgqbR9W8oWht/amnpF" crossorigin="anonymous">
    </script>

    <!-- Option 2: Separate Popper and Bootstrap JS -->
    <!--
    <script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js"
        integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous">
    </script>
    <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js"
        integrity="sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN" crossorigin="anonymous">
    </script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.min.js"
        integrity="sha384-VHvPCCyXqtD5DqJeNxl2dtTyhF78xXNXdkwX1CZeRusQfRKp+tA7hAShOK/B/fQ2" crossorigin="anonymous">
    </script>
    -->
</body>

</html>
cara-membuat-export-pdf-di-laravel
Gambar 1. Output kode diatas

Oke kurang lebih seperti itu, Cara Membuat export PDF di laravel. Jika terdapat error atau kalian masih bingung, silahkan bertanya pada kolom kometar dibawah ini.

Komentar