How to generate a PDF File From Laravel view

In this example, I’ll show you how to generate a PDF file in Laravel from an HTML page. I’ll use the laravel-dompdf package to create PDF files, and it also has download file functionality.

I’ll show you how to make PDF files and download them to your system in a very simple method. In Laravel, we utilize the dompdf package to generate pdf files from HTML views.

You can also check another tutorial on Export Data with PHP:

What Is Dompdf Liberary ?

Dompdf is a laravel package that converts HTML to PDF using Laravel. The dompdf is a PHP-based HTML layout and rendering engine that is (largely) compliant with CSS 2.1.

It’ll download and read external stylesheets, inline style tags, and all the style attributes of individual HTML elements. It also supports the majority of HTML presentational attributes.

How To Generate a PDF in Laravel

Let’s integrate the Dompdf package with laravel and generate pdf file.

I am assuming, You have laravel application, if not please create an app using the below command:

composer create-project --prefer-dist laravel/laravel laravel_8_view_pdf_example

Step 1: Install The Laravel-Dompdf Package
With the help of a composer, you can easily install the dependencies of laravel-dompdf package. Please run the below command inside your laravel project:

laravel-app-path> composer require barryvdh/laravel-dompdf

Step 2: Configure Laravel-Dompdf Package
Just go to Config/App.php and create these entries in providers and aliases.

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

Step 3: Create A Blade File
Inside the resources >> views folder, We’ll create a new file called index.blade.php.

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script></pre>
<div class="container">
<div class="row">
<div class="col-lg-12" style="margin-top: 15px;">
<div class="pull-left">
<h2>Generate And Download PDF File Using dompdf</h2>
</div>
<div class="pull-right"><a class="btn btn-primary" href="{{route('emp.index',['download'=>'pdf'])}}">Download PDF</a></div>
</div>
</div>
@foreach ($emps as $emp) @endforeach
<table class="table table-bordered">
<tbody>
<tr>
<th>Id</th>
<th>Name</th>
<th>Salary</th>
</tr>
<tr>
<td>{{ $emp->id }}</td>
<td>{{ $emp->name }}</td>
<td>{{ $emp->salary }}</td>
</tr>
</tbody>
</table>
</div>

Step 4: Create Controller
Now create a controller on this path app\Http\Controllers\EmployeeController.php and using the below command.

php artisan make:controller EmployeeController

Added the below code into this file:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Employee;
use PDF;

class EmployeeController extends Controller
{
    
    public function index(Request $request)
    {
        $emps = Employee::latest()--->paginate(2);
  
        if($request->has('download'))
        {
            $pdf = PDF::loadView('emp.index',compact('emps'));
            return $pdf->download('pdfview.pdf');
        }

        return view('emp.index',compact('emps'));
    }
}

Step 5: Add Route path
Add Route information into the routes/web.php file.

Route::resource('emp','EmployeeController');

Step 6: Run Laravel App
Now, run the laravel project using the below command.

php artisan serve

open the below URL on your browser.

http://localhost:8000/emp

References:

Leave a Reply

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