Generando PDF’s con KnpSnappy y Symfony

Cómo generar PDF’s de forma sencilla con Symfony

composer require knplabs/knp-snappy-bundle
# /config/packages/knp_snappy.ymlknp_snappy:  process_timeout: 60  pdf:  enabled: true  binary: ‘%env(WKHTMLTOPDF_LIBRARY)%’  options:    - { name: ‘viewport-size’, value: ‘1024x768’ }    - { name: ‘page-size’, value: ‘A4’ }
Knp\Bundle\SnappyBundle\KnpSnappyBundle::class => [‘all’ => true]
Image for post
Image for post
Image for post
Image for post

KnpSnappy y Webpack

{% for file in encore_entry_css_files('pdf') %}
<link href="{{ absolute_url(asset(file)) }}" rel="stylesheet" />
{% endfor %}

Repositorio de wkhtmltopdf

Consejos para emplear este bundle

Tener un archivo html base

Image for post
Image for post

Cabecera y footer

Image for post
Image for post

Números de página

$knpSnappy->getOutputFromHtml($html, [
...
‘enable-javascript’ => true,...]);

Nombre de los archivos

use Knp\Bundle\SnappyBundle\Snappy\Response\PdfResponse;...return new PdfResponse(  $this->get(‘knp_snappy.pdf’)->getOutputFromHtml($html, $vars),  $filename);

Imágenes en nuestros PDF’s

<img class=”logo” src=”{{ absolute_url(asset(‘build/images/logo.png’)) }}”>

Fuentes mediante font face

// fonts.sass@font-face  font-family: ‘picon’  src: url(‘../../fonts/pemsaicon/picon.otf’)  font-style: normal  font-weight: normal

Bootstrap 4

Forzar nueva página

// structure.sass.page  page-break-after: always  page-break-inside: avoid&:last-child  page-break-after: avoid  page-break-inside: avoid

Evitar que las cabeceras sticky de las tablas se solapen con las filas cuando se cambia de página

// tables.sassthead  display: table-header-grouptfoot  display: table-row-grouptr  page-break-inside: avoid!important

Ejemplo

Entre paseo y paseo con Simba desarrollo en Symfony y React

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store