Immagina di dover creare dei pdf al volo all’interno della tua web app basata su Symfony2. Qual’è la migliore prassi?
Non so se è la migliore, ma ti illustro la soluzione che ha funzionato per me.
Ho utilizzato KnpSnappyBundle, un wrapper della libreria open source wkhtmltoimage che trasforma codice html in pdf.
Per prima cosa bisogna installare sul server la libreria sopra citata. Se non hai accesso alla shell del tuo server all’ministratore di sistema che provveda a lanciare questo codice per te (ovviamente se anche tu hai un Debian Wheezy a 64bit come OS, altrimenti devi scaricarti il file giusto per la tua distro di Linux):
wget http://downloads.sourceforge.net/project/wkhtmltopdf/0.12.1/wkhtmltox-0.12.1_linux-wheezy-amd64.deb
sudo dpkg -i wkhtmltox-0.12.1_linux-wheezy-amd64.deb
Poi è la volta di KnpSnappyBundle.
Aggiungiamo il bundle al nostro composer:
{ "require": { "knplabs/knp-snappy-bundle": "dev-master" } }
Quindi lo abiliti nel tuo kernel:
// app/AppKernel.php public function registerBundles() { $bundles = array( //... new Knp\Bundle\SnappyBundle\KnpSnappyBundle(), //...
A questo punto dovresti essere in grado di utilizzare la libreria. Un esempio classico potrebbe essere creare un documento pdf partendo ada una twig view:
$this->get('knp_snappy.pdf')->generateFromHtml( $this->renderView( 'MyBundle:Foo:bar.html.twig', array( 'some' => $vars ) ), '/path/to/the/file.pdf' );
Il bundle è sufficientemente correlato da esempi e istruzioni quindi l’installzione e il suo tutilizzo non è così difficile.
Perché dev-master?
Per nessun motivo in particolare, se non per il piccolo dettaglio di non rendere obsoleto questo mini tutorial al prossimo upgrade del bundle in questione.
Anche se in effetti la best practice vorrebbe che si utilizzasse una versione specifica e stabile ogni qualvolta sia possibile.