Snappy is a PHP (5.3+) wrapper for the wkhtmltopdf conversion utility. It allows you to generate either pdf or image files from your html documents, using the webkit engine.
The KnpSnappyBundle provides a simple integration for your Symfony project.
With composer, require:
composer require knplabs/knp-snappy-bundle
Then enable it in your kernel:
// app/AppKernel.php
public function registerBundles()
{
$bundles = array(
//...
new Knp\Bundle\SnappyBundle\KnpSnappyBundle(),
//...
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.
# app/config/config.yml
knp_snappy:
pdf:
enabled: true
binary: /usr/local/bin/wkhtmltopdf #"\"C:\\Program Files\\wkhtmltopdf\\bin\\wkhtmltopdf.exe\"" for Windows users
options: []
image:
enabled: true
binary: /usr/local/bin/wkhtmltoimage #"\"C:\\Program Files\\wkhtmltopdf\\bin\\wkhtmltoimage.exe\"" for Windows users
options: []
If you want to change temporary folder which is sys_get_temp_dir()
by default, you can use
# app/config/config.yml
knp_snappy:
temporary_folder: %kernel.cache_dir%/snappy
You can also configure the timeout used by the generators with process_timeout
:
# app/config/config.yml
knp_snappy:
process_timeout: 20 # In seconds
The bundle registers two services:
- the
knp_snappy.image
service allows you to generate images; - the
knp_snappy.pdf
service allows you to generate pdf files.
$container->get('knp_snappy.image')->generate('http://www.google.fr', '/path/to/the/image.jpg');
$container->get('knp_snappy.pdf')->generate('http://www.google.fr', '/path/to/the/file.pdf');
$container->get('knp_snappy.pdf')->generate(array('http://www.google.fr', 'http://www.knplabs.com', 'http://www.google.com'), '/path/to/the/file.pdf');
$this->get('knp_snappy.pdf')->generateFromHtml(
$this->renderView(
'MyBundle:Foo:bar.html.twig',
array(
'some' => $vars
)
),
'/path/to/the/file.pdf'
);
use Knp\Bundle\SnappyBundle\Snappy\Response\JpegResponse;
class SomeController
{
public function imageAction()
{
$html = $this->renderView('MyBundle:Foo:bar.html.twig', array(
'some' => $vars
));
return new JpegResponse(
$this->get('knp_snappy.image')->getOutputFromHtml($html),
'image.jpg'
);
}
}
use Knp\Bundle\SnappyBundle\Snappy\Response\PdfResponse;
class SomeController
{
public function pdfAction()
{
$html = $this->renderView('MyBundle:Foo:bar.html.twig', array(
'some' => $vars
));
return new PdfResponse(
$this->get('knp_snappy.pdf')->getOutputFromHtml($html),
'file.pdf'
);
}
}
use Knp\Bundle\SnappyBundle\Snappy\Response\PdfResponse;
class SomeController
{
public function pdfAction()
{
$pageUrl = $this->generateUrl('homepage', array(), true); // use absolute path!
return new PdfResponse(
$this->get('knp_snappy.pdf')->getOutput($html),
'file.pdf'
);
}
}
SnappyBundle and Snappy are based on the awesome wkhtmltopdf. SnappyBundle has been developed by KnpLabs.