Snappy é uma biblioteca PHP que permite a geração de miniaturas, instantâneos ou PDF a partir de um URL ou página HTML. Ele usa os excelentes wkhtmltopdf e wkhtmltoimage baseados em webkit disponíveis em OSX, Linux, Windows.
Você terá que baixar wkhtmltopdf 0.12.x
para usar o Snappy.
Por favor, verifique o FAQ antes de abrir uma nova edição. Snappy é um pequeno wrapper em torno do wkhtmltox, então muitos problemas já foram respondidos, resolvidos ou wkhtmltox.
As seguintes integrações estão disponíveis:
knplabs/knp-snappy-bundle
, para Symfonybarryvdh/laravel-snappy
, para Laravelmvlabs/mvlabs-snappy
, para Zend Framework composer require knplabs/knp-snappy
<?php
require __DIR__ . ' /vendor/autoload.php ' ;
use Knp Snappy Pdf ;
$ snappy = new Pdf ( ' /usr/local/bin/wkhtmltopdf ' );
// or you can do it in two steps
$ snappy = new Pdf ();
$ snappy -> setBinary ( ' /usr/local/bin/wkhtmltopdf ' );
$ snappy = new Pdf ( ' /usr/local/bin/wkhtmltopdf ' );
header ( ' Content-Type: application/pdf ' );
echo $ snappy -> getOutput ( ' http://www.github.com ' );
$ snappy = new Pdf ( ' /usr/local/bin/wkhtmltopdf ' );
header ( ' Content-Type: application/pdf ' );
header ( ' Content-Disposition: attachment; filename="file.pdf" ' );
echo $ snappy -> getOutput ( ' http://www.github.com ' );
$ snappy = new Pdf ( ' /usr/local/bin/wkhtmltopdf ' );
header ( ' Content-Type: application/pdf ' );
header ( ' Content-Disposition: attachment; filename="file.pdf" ' );
echo $ snappy -> getOutput ( array ( ' http://www.github.com ' , ' http://www.knplabs.com ' , ' http://www.php.net ' ));
$ snappy = new Pdf ( ' /usr/local/bin/wkhtmltopdf ' );
$ snappy -> generateFromHtml ( ' <h1>Bill</h1><p>You owe me money, dude.</p> ' , ' /tmp/bill-123.pdf ' );
// Type wkhtmltopdf -H to see the list of options
$ snappy = new Pdf ( ' /usr/local/bin/wkhtmltopdf ' );
$ snappy -> setOption ( ' disable-javascript ' , true );
$ snappy -> setOption ( ' no-background ' , true );
$ snappy -> setOption ( ' allow ' , array ( ' /path1 ' , ' /path2 ' ));
$ snappy -> setOption ( ' cookie ' , array ( ' key ' => ' value ' , ' key2 ' => ' value2 ' ));
$ snappy -> setOption ( ' post ' , array ( ' key ' => ' value ' ));
$ snappy -> setOption ( ' cover ' , ' pathToCover.html ' );
// .. or pass a cover as html
$ snappy -> setOption ( ' cover ' , ' <h1>Bill cover</h1> ' );
$ snappy -> setOption ( ' toc ' , true );
$ snappy -> setOption ( ' cache-dir ' , ' /path/to/cache/dir ' );
As opções podem ser redefinidas para seus valores iniciais com o método resetOptions()
.
$ snappy = new Pdf ( ' /usr/local/bin/wkhtmltopdf ' );
// Set some options
$ snappy -> setOption ( ' copies ' => 4 );
// ..
// Reset options
$ snappy -> resetOptions ();
Se você deseja baixar wkhtmltopdf e wkhtmltoimage com o compositor, adicione ao composer.json
:
composer require h4cc/wkhtmltopdf-i386 0.12.x
composer require h4cc/wkhtmltoimage-i386 0.12.x
ou isto se você estiver em um sistema baseado em 64 bits:
composer require h4cc/wkhtmltopdf-amd64 0.12.x
composer require h4cc/wkhtmltoimage-amd64 0.12.x
E então você pode usá-lo
<?php
use Knp Snappy Pdf ;
$ myProjectDirectory = ' /path/to/my/project ' ;
$ snappy = new Pdf ( $ myProjectDirectory . ' /vendor/h4cc/wkhtmltopdf-i386/bin/wkhtmltopdf-i386 ' );
// or
$ snappy = new Pdf ( $ myProjectDirectory . ' /vendor/h4cc/wkhtmltopdf-amd64/bin/wkhtmltopdf-amd64 ' );
NB: Esses binários estáticos são extraídos de pacotes Debian7, portanto, podem não ser compatíveis com distros Linux não baseadas em Debian.
Se você deseja gerar um sumário e usar uma folha de estilo XSL personalizada, faça o seguinte:
<?php
$ snappy = new Pdf ( ' /path/to/binary ' );
$ snappy -> setOption ( ' toc ' , true );
$ snappy -> setOption ( ' xsl-style-sheet ' , ' http://path/to/stylesheet.xsl ' ) //or local file;
$ snappy -> generateFromHtml ( ' <p>Some content</p> ' , ' test.pdf ' );
Se você encontrou um bug, preencha um problema detalhado com todos os pontos a seguir. Se precisar de ajuda, forneça pelo menos um reprodutor completo para que possamos ajudá-lo com base em fatos e não em suposições.
Se o seu reprodutor for grande, tente reduzi-lo. Isso ajudará a todos a reduzir o bug.
KNPLabs está procurando mantenedores (veja por quê).
Se você estiver interessado, sinta-se à vontade para abrir um PR para pedir para ser adicionado como mantenedor.
Ficaremos felizes em ouvir de você :)
Snappy foi originalmente desenvolvido pela equipe KnpLabs.