Html To Pdf Conversion With WebKit In Symfony 2.1.x
Don’t you just love to hear one lovely sentence - "Hey, we’ve got a new server-side generated PDF document to make". When you’re a Php developer, all you can do then is hit yourself in the face with an empty plate to prepare for incoming pain - all FPDF based libraries will make sure of that. But.. there’s a different solution - Wkhtmltopdf, WebKit based shell utility for html to pdf conversion written in C++. Now the question is - how to use it in Symfony 2.1.x framework?
See the effects for yourself:
Like all semi-rational people do, let me show everything in a few steps (didn’t expect that, did you?):
- First thing that’ll we need here is of course wkhtmltopdf utility, which can be downloaded here. I suggest download of version 0.9.9 (wkhtmltopdf-0.9.9-static-amd64.tar.bz2 or wkhtmltopdf-0.9.9-static-i386.tar.bz2) due to some issues with version 0.11.0. If you’re using Linux, the best place for unpacking archive’s content would be /usr/local/bin/ directory (but you can choose any other that suits you). Remember to grant 755 permissions on the executable.
- Next we’ll need to get the KnpSnappyBundle - Symfony 2.x wrapper bundle for the Snappy library which is a Php wrapper for wkhtmltopdf. My preferred way of fetching both is to manually use git clone in root directory of your Symfony2 project:
- Once we have cloned both repositories, we must add proper namespaces in Symfony2’s composer. I prefer the manual way - you’ll need to add namespaces to the array in vendor/composer/autoload_namespaces.php file, just before '' => $baseDir . '/src/', element:
- Just one more step - we’ll need to add KnpSnappyBundle to app/AppKernel.php to registered namespaces array:
Snappy can be called by using the get service method on any container object. In controller actions the magic is done like this:
Above code will save target webpage to a PDF file. You can also output any twig template in controller return statement like this:
That’s it - welcome to the land of easy html2pdf conversion. All that’s left now is to sit comfortably in your chair and pity all those TCPDF, MPDF and other self-slapping stuff lovers.