Driver-Based Architecture in Spatie’s Laravel PDF v2
In the ever-evolving landscape of web development, the need for efficient PDF generation has become increasingly vital. Spatie’s Laravel PDF package has been a popular choice among developers for generating PDF documents in Laravel applications. With the release of Laravel PDF v2, significant advancements have been made, particularly with the introduction of a driver-based architecture. This article will delve into the key features and benefits of this new architecture, providing a comprehensive overview for developers looking to leverage the latest functionalities in their projects.
Understanding Driver-Based Architecture
The most notable change in Laravel PDF v2 is the shift to a driver-based architecture. This design allows developers to select from multiple PDF generation backends based on their specific needs and infrastructure. The primary drivers available in this version include:
- Browsershot: This driver utilizes Chromium-based rendering through Puppeteer, remaining the default option for PDF generation.
- Cloudflare: This driver leverages Cloudflare’s Browser Rendering API to generate PDFs, providing a robust solution for cloud-based applications.
- DomPdf: A pure PHP rendering option that requires no external binaries, making it an ideal choice for developers seeking simplicity and ease of use.
- Gotenberg: Introduced in version 2.1.0, Gotenberg is a Docker-based API for HTML-to-PDF conversion, utilizing headless Chromium for rendering.
By allowing developers to choose their preferred backend, Spatie has significantly enhanced the flexibility and adaptability of the Laravel PDF package. This means that developers can select a driver that best fits their application’s requirements, whether they prioritize speed, ease of use, or specific features.
Key Features of Laravel PDF v2
In addition to the driver-based architecture, Laravel PDF v2 introduces several new features that enhance its functionality and usability:
1. Queued PDF Generation
One of the standout features of Laravel PDF v2 is the ability to offload PDF generation to a queue. This is particularly beneficial for applications that require the generation of large or complex PDFs, as it allows the main application to remain responsive while the PDF is being created in the background. The syntax for queued PDF generation is straightforward:
use SpatieLaravelPdfFacadesPdf;
Pdf::view('pdfs.invoice', ['invoice' => $invoice])
->format('a4')
->saveQueued('invoice.pdf')
->then(fn (string $path, ?string $diskName) => Mail::to($user)->send(new InvoiceMail($path)));
This method not only saves the PDF to a specified location but also allows developers to chain callbacks for post-processing actions, such as sending an email with the generated PDF attached.
2. PDF Metadata Support
Laravel PDF v2 also introduces support for setting PDF document metadata. This feature allows developers to embed important information within the PDF file, such as the title, author, subject, keywords, creator, and creation date. The following example demonstrates how to set metadata for a PDF:
use SpatieLaravelPdfFacadesPdf;
Pdf::view('pdfs.invoice', ['invoice' => $invoice])
->meta(
title: 'Invoice #1234',
author: 'Acme Corp',
subject: 'Monthly Invoice',
keywords: 'invoice, billing',
creator: 'Laravel PDF',
creationDate: now(),
)
->save('invoice.pdf');
This feature is particularly useful for improving the organization and searchability of PDF documents, making it easier for users to locate and identify files based on their metadata.
3. Runtime Driver Switching
Another significant enhancement in Laravel PDF v2 is the ability to switch drivers at runtime. This flexibility allows developers to change the PDF generation backend based on specific conditions or user preferences. For example, a developer might choose to use the DomPdf driver for simpler documents while opting for Browsershot for more complex layouts. The following code snippet illustrates how to switch drivers:
use SpatieLaravelPdfFacadesPdf;
Pdf::view('pdfs.invoice', ['invoice' => $invoice])
->driver('dompdf')
->format('a4')
->save('invoice.pdf');
This runtime switching capability empowers developers to optimize their applications for different scenarios, ensuring that users receive the best possible experience.
4. Custom Driver Support
In addition to the built-in drivers, Laravel PDF v2 allows developers to create custom drivers for backends that are not included with the package. This feature is particularly valuable for organizations that have unique requirements or existing infrastructure that they wish to integrate with the Laravel PDF package. By enabling custom driver support, Spatie has opened the door for greater extensibility and adaptability in PDF generation.
Upgrade Considerations
As with any major release, upgrading to Laravel PDF v2 comes with certain considerations and breaking changes. Developers should be aware of the following:
- The
spatie/browsershotpackage must now be explicitly required via Composer if you intend to use the Browsershot driver. - The method
getBrowsershot()has been removed; developers should usewithBrowsershot()instead. - The configuration file structure has changed, requiring developers to republish their configuration files to accommodate the new driver key.
- Support for Laravel 10 has been dropped, so developers using this version must upgrade their Laravel applications to continue using the package.
Developers are encouraged to review the official upgrade guide and changelogs to ensure a smooth transition to the new version.
Conclusion
Spatie’s Laravel PDF v2 represents a significant advancement in PDF generation for Laravel applications. With its driver-based architecture, developers can now select the backend that best suits their needs, whether it be for speed, simplicity, or specific features. The introduction of queued PDF generation, metadata support, runtime driver switching, and custom driver capabilities further enhances the package’s functionality, making it a powerful tool for any Laravel developer. As businesses increasingly rely on PDF documents for communication and documentation, leveraging these new features will undoubtedly lead to improved efficiency and user satisfaction.
Note: This article serves as a comprehensive overview of the new features and enhancements in Spatie’s Laravel PDF v2, providing developers with the necessary information to effectively utilize the package in their projects.
Frequently Asked Questions
The main advantage is flexibility. Developers can choose from multiple PDF generation backends, allowing them to select the one that best fits their application’s requirements and infrastructure.
Queued PDF generation allows developers to offload the PDF creation process to a background queue. This ensures that the main application remains responsive while the PDF is being generated, which is particularly useful for large or complex documents.
Yes, Laravel PDF v2 supports custom driver creation, allowing developers to integrate backends that are not included with the package, thus enhancing the package’s extensibility.
Call To Action
Explore the new features of Spatie’s Laravel PDF v2 and enhance your PDF generation capabilities today. Upgrade your application to leverage the flexibility of driver-based architecture and improve your document management processes.

