Skip to content

Easily create PDF in Symfony by converting HTML using WeasyPrint

License

Notifications You must be signed in to change notification settings

El-Profesor/WeasyPrintBundle

 
 

Repository files navigation

WeasyPrintBundle

PhpWeasyPrint is a PHP (7.4+) wrapper for WeasyPrint PDF generator. It allows you to generate PDF files from HTML string or URL.

The WeasyPrintBundle provides a simple integration for your Symfony project.

This bundle is massively inspired by KnpLabs/KnpSnappyBundle, of which it aims to be a one-to-one substitute

Installation

With composer, require:

composer require pontedilana/weasyprint-bundle

Then enable it in your kernel (a flex recipe is coming soon):

// config/bundles.php
<?php

return [
    //...
    Pontedilana\WeasyprintBundle\WeasyprintBundle::class => ['all' => true],
    //...
];

Configuration

If you need to change the binaries, change the instance options or even disable one or both services, you can do it through the configuration.

# config/packages/weasyprint.yaml
weasyprint:
    pdf:
        enabled:    true
        binary:     /usr/local/bin/weasyprint
        options:    []

If you want to change temporary folder which is sys_get_temp_dir() by default, you can use

# config/packages/weasyprint.yaml
weasyprint:
    temporary_folder: "%kernel.cache_dir%/weasyprint"

You can also configure the timeout used by the generators with process_timeout:

# config/packages/weasyprint.yaml
weasyprint:
    process_timeout: 20 # In seconds

Usage

The bundle registers one service:

  • the weasyprint.pdf service allows you to generate pdf files.

Generate a pdf document from a URL

// @var Pontedilana\PhpWeasyPrint\Pdf
$weasyprintPdf->generate('https://www.github.com', '/path/to/the/file.pdf');

Generate a pdf document from a twig view

// @var Pontedilana\PhpWeasyPrint\Pdf
$weasyprintPdf->generateFromHtml(
    $this->renderView(
        'frontend/product/pdf.html.twig',
        [
            'some'  => $vars,
        ]
    ),
    '/path/to/the/file.pdf'
);

Render a pdf document as response from a controller

use Pontedilana\WeasyprintBundle\WeasyPrint\Response\PdfResponse;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;

class SomeController extends AbstractController
{
    public function pdfAction(Pontedilana\PhpWeasyPrint\Pdf $weasyprintPdf)
    {
        $html = $this->renderView(
            'frontend/product/pdf.html.twig',
            [
                'some'  => $vars,
            ]
        );

        return new PdfResponse(
            $weasyprintPdf->getOutputFromHtml($html),
            'file.pdf'
        );
    }
}

Render a pdf document with a relative url inside like css files or images

use Pontedilana\WeasyprintBundle\WeasyPrint\Response\PdfResponse;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;

class SomeController extends AbstractController
{
    public function pdfAction(Pontedilana\PhpWeasyPrint\Pdf $weasyprintPdf)
    {
        $pageUrl = $this->generateUrl('homepage', [], true); // use absolute path!

        return new PdfResponse(
            $weasyprintPdf->getOutput($pageUrl),
            'file.pdf'
        );
    }
}

Credits

WeasyPrintBundle and PhpWeasyPrint has been developed by Pontedilana.
SnappyBundle has been developed by KnpLabs.

About

Easily create PDF in Symfony by converting HTML using WeasyPrint

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • PHP 100.0%