Generating PDFs in a Laravel application can be accomplished easily using packages like DomPDF, Snappy, or Laravel PDF.
Step 1: Install DomPDF
You can install the DomPDF package via Composer. Run the following command in your terminal:
bash
1 |
composer require barryvdh/laravel-dompdf |
Step 2: Publish the Configuration File (Optional)
To publish the configuration file (if needed), run the following command:
bash
1 |
php artisan vendor:publish --provider="Barryvdh\DomPDF\ServiceProvider" |
This step is optional; you can also configure the settings directly in the service provider if needed.
Step 3: Create a Controller
Create a controller that will handle the PDF generation. You can do this with the following command:
bash
1 |
php artisan make:controller PDFController |
Step 4: Generate PDF in the Controller
In the newly created PDFController
, you can add a method to generate the PDF. Below is an example:
php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use PDF; // Import the PDF facade class PDFController extends Controller { public function generatePDF() { // Load a view to generate PDF content $data = ['title' => 'Welcome to Laravel PDF Generation']; $pdf = PDF::loadView('pdf.document', $data); // Download the PDF file return $pdf->download('document.pdf'); } } |
Step 5: Create a View for PDF Content
Create a Blade view that will serve as the template for your PDF. You can create a new file at resources/views/pdf/document.blade.php
:
html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>{{ $title }}</title> <style> body { font-family: Arial, sans-serif; margin: 20px; } h1 { color: #333; } </style> </head> <body> <h1>{{ $title }}</h1> <p>This is a simple PDF document generated using Laravel and DomPDF.</p> </body> </html> |
Step 6: Define a Route
Now, define a route in routes/web.php
to access the PDF generation method:
php
1 2 3 |
use App\Http\Controllers\PDFController; Route::get('/generate-pdf', [PDFController::class, 'generatePDF'])->name('pdf.generate'); |
Step 7: Testing the PDF Generation
- Start your Laravel development server:
bash
1php artisan serve - Visit
http://localhost:8000/generate-pdf
in your browser. - The PDF should be generated and downloaded with the name
document.pdf
.
Step 8: Customizing the PDF
You can customize the PDF further by adding styles, images, and more complex layouts to your Blade view. Here are a few tips for customization:
- CSS Styling: Use inline CSS or link to an external stylesheet to style your PDF.
- Images: You can include images in your Blade view, but ensure to use absolute paths or publicly accessible URLs.
- Page Size and Orientation: You can set the page size and orientation when loading the view:
php
1 |
$pdf = PDF::loadView('pdf.document', $data)->setPaper('a4', 'landscape'); |
Step 9: Additional Features
You can explore additional features of DomPDF, such as:
- Custom fonts: You can add custom fonts to your PDF by configuring them in the
config/dompdf.php
file. - Streaming PDFs: Instead of downloading, you can display the PDF in the browser:
php
1 |
return $pdf->stream('document.pdf'); |
Summary
You’ve successfully set up PDF generation in your Laravel application using DomPDF! Here’s a recap of the steps:
- Install DomPDF using Composer.
- Create a controller to handle PDF generation.
- Create a Blade view for the PDF content.
- Define a route to access the PDF generation.
- Test the PDF generation by visiting the defined route.
- Laravel Breeze – Simple authentication starter kit
- Laravel Jetstream – Scaffolding for Laravel apps
- Laravel Passport – API authentication via OAuth2
- Laravel Sanctum – Simple API authentication
- Spatie Laravel Permission – Role and permission management
- Laravel Cashier – Subscription billing with Stripe
- Laravel Scout – Full-text search using Algolia
- Laravel Socialite – OAuth authentication (Google, Facebook, etc.)
- Laravel Excel – Excel import and export for Laravel
- Laravel Horizon – Redis queues monitoring
- Laravel Nova – Admin panel for Laravel
- Laravel Fortify – Backend authentication for Laravel
- Laravel Vapor – Serverless deployment on AWS
- Laravel Telescope – Debugging assistant for Laravel
- Laravel Dusk – Browser testing
- Laravel Mix – API for compiling assets
- Spatie Laravel Backup – Backup management
- Laravel Livewire – Building dynamic UIs
- Spatie Laravel Media Library – Manage media uploads
- Laravel Excel – Excel spreadsheet handling
- Laravel Debugbar – Debug tool for Laravel
- Laravel WebSockets – Real-time communication
- Spatie Laravel Sitemap – Generate sitemaps
- Laravel Spark – SaaS scaffolding
- Laravel Envoy – Task runner for deployment
- Spatie Laravel Translatable – Multilingual model support
- Laravel Backpack – Admin panel
- Laravel AdminLTE – Admin interface template
- Laravel Collective Forms & HTML – Simplified form and HTML generation
- Spatie Laravel Analytics – Google Analytics integration
- Laravel Eloquent Sluggable – Automatically create slugs
- Laravel Charts – Chart integration
- Laravel Auditing – Track changes in models
- Laravel JWT Auth – JSON Web Token authentication
- Laravel Queue Monitor – Monitor job queues
- Spatie Laravel Query Builder – Filter, sort, and include relationships in Eloquent queries
- Laravel Datatables – jQuery Datatables API
- Laravel Localization – Multilingual support for views and routes
- Laravel Acl Manager – Access control list manager
- Laravel Activity Log – Record activity in your app
- Laravel Roles – Role-based access control
- Spatie Laravel Tags – Tagging models
- Laravel Installer – CLI installer for Laravel
- Laravel Breadcrumbs – Generate breadcrumbs in Laravel
- Laravel Mailgun – Mailgun integration for Laravel
- Laravel Trustup Model History – Store model change history
- Laravel Deployer – Deployment automation tool
- Laravel Auth – Custom authentication guards
- Laravel CORS – Cross-Origin Resource Sharing (CORS) support
- Laravel Notifications – Send notifications through multiple channels
- Spatie Laravel Http Logger – Log HTTP requests
- Laravel Permission Manager – Manage permissions easily
- Laravel Stubs – Customize default stubs in Laravel
- Laravel Fast Excel – Speed up Excel exports
- Laravel Image – Image processing
- Spatie Laravel Backup Server – Centralize backups for Laravel apps
- Laravel Forge API – Manage servers through the Forge API
- Laravel Blade SVG – Use SVGs in Blade templates
- Laravel Ban – Ban/unban users from your application
- Laravel API Response – Standardize API responses
- Laravel SEO – Manage SEO meta tags
- Laravel Settings – Store and retrieve settings
- Laravel DOMPDF – Generate PDFs
- Laravel Turbo – Full-stack framework for building modern web apps
- Spatie Laravel Event Sourcing – Event sourcing implementation
- Laravel Jetstream Inertia – Jetstream’s Inertia.js integration
- Laravel Envoy Tasks – Task automation
- Laravel Likeable – Like/dislike functionality
- Laravel GeoIP – Determine visitor’s geographic location
- Laravel Country State City – Dropdowns for country, state, and city
- Laravel Hashids – Generate short unique hashes
- Laravel Repository – Repository pattern for Laravel
- Laravel UUID – UUID generation for models
- Spatie Laravel Medialibrary Pro – Enhanced media management
- Laravel Queue Monitor – Monitor Laravel job queues
- Laravel User Activity – Monitor user activity
- Laravel DB Snapshots – Create database snapshots
- Laravel Twilio – Twilio integration
- Laravel Roles – Role-based permission handling
- Laravel Translatable – Add translations to Eloquent models
- Laravel Teamwork – Manage teams in multi-tenant apps
- Laravel Full Text Search – Add full-text search to Laravel models
- Laravel File Manager – File and media management
- Laravel User Timezones – Automatically detect user time zones
- Laravel ChartsJS – Render charts with ChartsJS
- Laravel Stripe – Stripe API integration
- Laravel PDF Generator – PDF generation
- Laravel Elasticsearch – Elasticsearch integration
- Laravel Simple Qrcode – Generate QR codes
- Laravel Timezone – Manage timezones and conversions
- Laravel Collective API – API management for Laravel
- Laravel Rest API Boilerplate – REST API starter kit
- Laravel Multi Auth – Multi-authentication functionality
- Laravel Voyager – Admin panel for Laravel
- Laravel Voyager Database – Database manager for Voyager
- Laravel Categories – Handle categories for models
- Laravel Multitenancy – Multi-tenancy implementation
- Laravel Access Control – Advanced access control for users
- Laravel Menus – Menu management
- Laravel Translatable Routes – Multilingual route handling