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
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],
//...
];
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
The bundle registers one service:
- the
weasyprint.pdf
service allows you to generate pdf files.
// @var Pontedilana\PhpWeasyPrint\Pdf
$weasyprintPdf->generate('https://www.github.com', '/path/to/the/file.pdf');
// @var Pontedilana\PhpWeasyPrint\Pdf
$weasyprintPdf->generateFromHtml(
$this->renderView(
'frontend/product/pdf.html.twig',
[
'some' => $vars,
]
),
'/path/to/the/file.pdf'
);
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'
);
}
}
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'
);
}
}
WeasyPrintBundle and PhpWeasyPrint has been developed by Pontedilana.
SnappyBundle has been developed by KnpLabs.