Exportar el dashboard de Filament a PDF con spatie/laravel-pdf y el driver DomPDF
Hola, bienvenido. Para exportar un dashboard de Filament a PDF, construimos el informe con las mismas métricas que usa la pantalla y lo pintamos en una vista Blade diseñada para el PDF. De convertir esa vista en un PDF se encarga spatie/laravel-pdf, que con el driver DomPDF funciona en PHP puro, sin Node ni Chrome.
En esta lección empezamos la última sección del curso. Vamos a instalar spatie/laravel-pdf 2 con DomPDF y a repartir el trabajo en 3 clases pequeñas: una con el informe como datos, otra que lo construye y otra que lo convierte en PDF. Con ellas generamos el primer PDF desde la terminal, todavía sin gráficos y con una tabla de KPIs, y lo cubrimos con sus tests.
Por qué el panel no se imprime tal cual
Lo primero que se le ocurre a cualquiera es pasarle a DomPDF el HTML del dashboard. El resultado no se parece en nada a lo que ves en pantalla, y hay 4 motivos:
- DomPDF no ejecuta JavaScript. Los 3 gráficos los dibuja Chart.js en un
canvascuando la página ya está en el navegador, así que en el PDF no existen. - No entiende flexbox ni grid. Soporta CSS 2.1 y algunas propiedades de CSS 3, y el layout del dashboard, las tarjetas y la cabecera del panel están maquetadas con flex y grid: se deshacen y todo sale apilado.
- No repite cabeceras ni pies por página. Con spatie/laravel-pdf y el driver DomPDF, la cabecera y el pie se añaden una sola vez, al principio y al final del cuerpo.
- Trae desactivada la carga de recursos externos. El CSS del panel, sus fuentes y cualquier imagen por URL no se descargan, salvo que lo actives a mano.
¿Y @media print? Con unas reglas de impresión puedes conseguir que el dashboard salga decente al pulsar "Imprimir" en el navegador, pero el resultado depende del navegador y de lo que elija cada usuario en el diálogo de impresión: márgenes, escala, si salen los fondos, las cabeceras que añade el propio navegador. Y no es un archivo que genere tu aplicación: no lo puedes adjuntar a un email, no lo puedes guardar y no lo puedes probar en un test. Cuando el cliente dice "mándamelo en PDF", lo que quiere es el informe, y el informe lo generamos en el servidor.
Así que vamos a separar las 2 cosas. El dashboard se queda como está, y el PDF sale de una vista Blade propia, pensada para un A4 y para lo que DomPDF entiende, con los mismos datos. Como las métricas viven fuera de los widgets desde la primera sección, el PDF las reutiliza tal cual.
- 02spatie/laravel-pdf y sus drivers
- 03Instalar spatie/laravel-pdf con DomPDF
- 04Las 3 piezas del PDF
- 05DashboardReport: el informe como datos
- 06DashboardReportBuilder: de un periodo al informe
- 07La vista del informe
- 08DashboardPdf: del informe al PDF
- 09El primer PDF desde Tinker
- 10Tests del PDF