How to Generate PDF Using DomPDF in Laravel 10
In this tutorial, we will see how to generate pdf using DomPDF in Laravel 10, let's assume that we are working on an e-commerce website and we want to generate invoices as pdf.
Install the package
First, let's install the package we need:
composer require barryvdh/laravel-dompdf
Create the method
Next, inside our controller, we add the method to generate the pdf here as an example we assume that the method receives an order to generate as pdf.
<?php
namespace App\Http\Controllers;
use App\Models\Order;
use Illuminate\Http\Request;
use Barryvdh\DomPDF\Facade\Pdf;
class OrderController extends Controller
{
/**
* Generate invoice as pdf
*/
public function generateOrderAsPdf(Order $order)
{
$pdf = Pdf::loadView('invoice', compact('order'));
return $pdf->download('invoice.pdf');
}
}
Create the blade file
Next, let's create the 'invoice.blade.php' file which will receive the order to display.
<div style="text-align: center">
<div>
<div>
<div>
<div>
<div>
<div>
<h3>Order #{{$order->id}}</h3>
<div>
<div>
<div>
<div>
<div style="border: 1px solid #000; padding: 10px">
<h3><strong>Order summary</strong></h3>
</div>
<div>
<div>
<div style="margin: 10px 0">
<p>
<span><strong>Product Name:</strong></span>
{{$order->product->name}}<br>
<span><strong>Product Price:</strong></span>
{{$order->product->price}}
</p>
</div>
<div style="margin: 10px 0">
<p>
<span><strong>Order Qty:</strong></span>
{{$order->qty}}<br>
<span><strong>Total:</strong></span>
{{$order->total}}
</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
Add the route
Next, let's add the route.
Route::get('generate/{order}/invoice', [OrderController::class, 'generateOrderAsPdf'])
->name('orders.invoice');
Generate the pdf
Finally, we add a link to generate the pdf.
<a href="{{route('orders.invoice', $order)}}" class="btn btn-sm btn-success mb-1 ms-1">
<i class="fas fa-file-invoice-dollar"></i>
</a>