hamdallah90 / easy-laravel-pdf
easy-laravel-pdf: A Laravel package to generate PDF/images from views or HTML using Puppeteer in Docker for seamless integration.
Fund package maintenance!
Hamdallah90
Requires
- php: ^8.2
- illuminate/contracts: ^10.0||^11.0
- spatie/laravel-package-tools: ^1.16
Requires (Dev)
- laravel/pint: ^1.14
- nunomaduro/collision: ^8.1.1||^7.10.0
- orchestra/testbench: ^9.0.0||^8.22.0
- pestphp/pest: ^2.34
- pestphp/pest-plugin-arch: ^2.7
- pestphp/pest-plugin-laravel: ^2.3
README
Overview
Easy Laravel PDF is a Laravel package that facilitates PDF generation within Laravel applications. This package utilizes a Node.js service, node-html-to-pdf
, which can be run locally or via Docker to convert HTML to PDF.
Installation
Prerequisites
- PHP 7.3 or higher
- Laravel 6.0 or higher
- Composer
- Node.js and npm (optional, if running the service locally without Docker)
- Docker (optional, for using Docker container)
Installing the Package
-
Add the Package via Composer:
composer require hamdallah90/easy-laravel-pdf
-
Publish Configuration: Laravel's package discovery will automatically register the service provider. To publish the package configuration, run:
php artisan vendor:publish --tag=pdf-config
Configuration
Edit the published configuration file in config/easy-laravel-pdf.php
to adjust settings like default PDF options.
Using the Package
EasyLaravelPdf
offers a variety of methods to generate PDF files. Here's how to use them in your Laravel applications:
Load and Render a View
use Jouda\EasyLaravelPdf\Facades\EasyLaravelPdf; $pdf = EasyLaravelPdf::loadView('view.name', ['dataKey' => 'dataValue']); return $pdf->stream('example.pdf');
Load HTML Content Directly
To load raw HTML content into the PDF generator:
use Jouda\EasyLaravelPdf\Facades\EasyLaravelPdf; EasyLaravelPdf::loadView('view.name', ['dataKey' => 'dataValue'])->save('/path/to/file.pdf');
Get the PDF as an UploadedFile
To get the PDF as an UploadedFile, which can be useful for testing or further manipulation:
use Jouda\EasyLaravelPdf\Facades\EasyLaravelPdf; $file = EasyLaravelPdf::loadHtml('<h1>Test PDF</h1>')->getFile(); $file->store('save-to-s3-or-local-path')
Stream the PDF Directly to the Browser
To stream the PDF directly to the browser, which is useful for inline viewing:
use Jouda\EasyLaravelPdf\Facades\EasyLaravelPdf; return EasyLaravelPdf::loadHtml('<h1>Test PDF</h1>')->stream('optional-filename.pdf'); // Streams the PDF; if a filename is provided, it will be used
Configuration and Customization
You can configure puppeteer options and launch arguments for more control over the PDF generation:
use Jouda\EasyLaravelPdf\Facades\EasyLaravelPdf; $pdf = EasyLaravelPdf::setOptions(['format' => 'A4']); $pdf->setPuppeteerLunchArgs(['--no-sandbox', '--disable-setuid-sandbox']); $pdf->loadHtml('<h1>Customized PDF</h1>'); $pdf->save('path/to/your/customized.pdf');
Node HTML to PDF Service
This service is essential for PDF generation and can be run locally or in a Docker container.
Running Locally
- Navigate to the
node-html-to-pdf
directory. - Install dependencies:
npm install
- Start the server:
npm start
Running with Docker
-
Using the Dockerfile: Build the Docker image using the provided Dockerfile:
cd node-html-to-pdf docker build -t your-username/html-to-pdf . docker run -p 3000:3000 your-username/html-to-pdf
-
Using the Pre-built Image: Alternatively, you can use a pre-built Docker image available on Docker Hub:
docker pull hamdallah/html-to-pdf docker run -p 3000:3000 hamdallah/html-to-pdf
Support
For issues, feature requests, or contributions, please use the GitHub issues section for this repository.