Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Chrome Pdf Bundle Laravel Package

dreadnip/chrome-pdf-bundle

Symfony bundle that uses chrome-php/chrome to render HTML to PDF via Chrome/Chromium. Configure the Chrome binary via env, then generate PDFs from HTML with the PdfGenerator service or customize via the BrowserFactory for advanced options.

View on GitHub
Deep Wiki
Context7

ChromePdfBundle

The ChromePdfBundle is a Symfony bundle that leverages the chrome-php/chrome project to render HTML and save the output as a PDF file.

Installation

With composer, require:

composer require dreadnip/chrome-pdf-bundle

Configuration

The bundle relies on a working, up-to-date Chrome/Chromium instance to work. You must specify the binary in your .env file.

# .env or .env.local
CHROME_BINARY="/usr/bin/chromium"

Usage

The bundle registers two services:

  • chrome_pdf.pdf_generator allows you to generate pdf files from HTML strings. You can autowire the PdfGenerator class in your application to get started quickly.
  • chrome_pdf.browser_factory is the chrome-php/chrome BrowserFactory class offered as a service within your Symfony application. Use this if you want to fine-tune the PDF generation process. You can use the PdfGenerator class as a starting point and build your custom solution from that.

Basic example: render a pdf document in a controller

use Dreadnip\ChromePdfBundle\Service\PdfGenerator;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
use Symfony\Component\HttpFoundation\Response;
use Twig\Environment;

class TestController extends AbstractController
{
    public function __invoke(PdfGenerator $pdfGenerator): Response
    {
        $html = $this->render('pdf.html.twig');

        $path = $pdfGenerator->generate($html, 'files/test.pdf');
   
        return new BinaryFileResponse($path);
    }
}

Advanced example: render a pdf document in a controller with custom options

use Dreadnip\ChromePdfBundle\Service\PdfGenerator;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
use Symfony\Component\HttpFoundation\Response;
use Twig\Environment;

class TestController
{
    public function __invoke(
        Environment $twig,
        PdfGenerator $pdfGenerator
    ): Response {
        $html = $twig->render('pdf.html.twig');

        // Control everything by passing custom options
        $printOptions = [
            'printBackground' => true,
            'displayHeaderFooter' => true,
            'preferCSSPageSize' => true,
            'headerTemplate'=> "<div></div>",
            'footerTemplate' => "<div></div>",
            'scale' => 1.0,
        ];
        
        // Setting headless to false helps you debug issues
        $browserOptions = [
            'headless' => false,
        ];

        $path = $pdfGenerator->generate(
            html: $html,
            path: 'files/test.pdf',
            printOptions: $options,
            browserOptions: $browserOptions,
            timeout: 5000
        );

        return new BinaryFileResponse($path);
    }
}

Print options can be used to control the rendering of the PDF.

Browser options are available to control the headless Chrome instance that will be used to render the PDF.

A list of all available options can be found in the chrome-php/chrome repository.

Base template

The bundle comes with a base template that can be extended to build PDFs with. This includes helpers for page lay-out and breaking. The template comes with two blocks styles for CSS and content for the actual PDF content.

{% extends '@ChromePdf/base.html.twig' %}

{% block content %}
    <section class="page page-one break-after">
        <h1>First page</h1>
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolores enim maxime quasi? Ab accusantium at commodi corporis, distinctio earum facilis harum ipsum maxime, nisi nostrum obcaecati odit officia quod voluptatem?</p>
    </section>
    <section class="page page-two">
        <h2>Second page</h2>
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolores enim maxime quasi? Ab accusantium at commodi corporis, distinctio earum facilis harum ipsum maxime, nisi nostrum obcaecati odit officia quod voluptatem?</p>
    </section>
{% endblock %}

Credits

This bundle is nothing more than a simple wrapper around the awesome chrome-php/chrome project.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
althinect/enum-permission
andydefer/laravel-actions
aimeos/prisma
mintobit/jobqueue
a4sex/maintenance-bundle
a4sex/entity-date-update
a4sex/client-identifier
a4sex/base-utilites
a4sex/key-value-storage
a4sex/micro-status
chilldev/dependency-injection-extra
datinglibre/datinglibre-app-api
biberltd/corebundle
bricre/symfony-bundle-test
biberltd/logbundle
dominium/http-adapter-bundle
dominium/google-analytics
a4sex/auto-clean-entity
christhompsontldr/laravel-inky
spatie/mailcoach-vapor