En este post te mostraré cómo crear o generar un PDF usando Laravel y las ventajas que nos ofrece este framework.
Vamos a usar la librería dompdf que, en combinación con Laravel y una librería extra, nos permitirá renderizar vistas de Blade y convertirlas a PDF de una manera realmente sencilla.
Asumo para este caso que ya sabes usar Laravel al menos de manera mínima, y que gestionas las dependencias de tu proyecto con composer.
También me gustaría recomendarte mi post sobre dompdf con php nativo; que si bien no es necesario, te ayudará a ver qué otras cosas puedes hacer. Entre los ejemplos está una factura con Bootstrap 3 o un ticket para impresora térmica.
Instalando soporte para dompdf
Vamos a usar la maravillosa envoltura creada por barryvdh que combinará las ventajas de Laravel con dompdf. Para ello instalamos con:
composer require barryvdh/laravel-dompdf
Ahora modificamos config/app.php y dentro del arreglo de providers
agregamos:
Barryvdh\DomPDF\ServiceProvider::class,
Solo para ejemplificar, todo mi app.php queda así. Presta atención a la línea 169:
Con esto basta. Ahora viene un paso importante y es que cada que necesitemos usar esta envoltura necesitaremos crear una instancia con App::make
y para ello debemos indicar el uso del namespace al inicio del archivo, con:
use Illuminate\Support\Facades\App;
Eso es todo lo que necesitamos.
Generando PDF
Ahora podemos generar un PDF desde Laravel a partir de una vista de Blade. Un ejemplo básico es la siguiente vista:
En este caso solo estoy renderizando la variable $nombre
pero se puede usar cualquier función de blade (@foreach
, @if
, etcétera). Además, no es necesario colocar todo el esqueleto, puedes heredar de vistas si quieres.
Ahora vamos a generar el PDF a partir de esta vista. Creamos la instancia, luego invocamos a loadView
para cargar y renderizar la vista de Blade, pasándole datos y finalmente invocamos a stream
para mostrarlo directamente en el navegador.
Lo he colocado en una ruta, pero tú puedes colocarlo dentro de un controlador o en donde mejor te convenga:
Aquí vemos que estoy cargando la vista llamada ejemplo
. En realidad el archivo se llama ejemplo.blade.php
pero para cargarla desde Laravel solo se necesita el nombre (por cierto el archivo de la vista está en views).
Le pasamos las variables en un arreglo como segundo argumento y finalmente devolvemos el contenido del PDF para mostrarlo en el navegador.
Otras opciones del PDF: guardar y descargar
Además de mostrar el PDF creado con Laravel en el navegador, podemos guardarlo en el disco duro o forzar su descarga.
Por ejemplo, para descargar el PDF invocamos al método download
pasándole el nombre que queremos que se sugiera para el archivo:
Igualmente si quieres guardarlo en el disco duro, se puede hacer con:
Nota: para este ejemplo, se guardará en public. También puedes especificar la ruta absoluta.
En este caso no podemos devolver el resultado de save
, así que devuelvo una simple cadena, pero en tu caso puedes devolver lo que gustes, hacer un redirect
, etcétera.
Conclusión
Vas a encontrar más ejemplos y documentación en el repositorio oficial. Recuerda que esta librería une a dompdf con Laravel, de una manera sencilla y rápida.
Como te mencionaba anteriormente, este fue un ejemplo sencillo. Puedes generar todo esto a partir de una base de datos, formularios, etcétera. La imaginación es el límite.
Para terminar, te invito a ver más tutoriales de Laravel en mi blog.