Saltar al contenido
Curso Dashboard con Filament 5: widgets, gráficos y PDF
12/14 PDF: del dashboard al informe Exportar el dashboard de Filament a PDF con spatie/laravel-pdf y el driver DomPDF
Tu lectura Quedan 19 min
Lección 12 de 14 · PDF: del dashboard al informe

Exportar el dashboard de Filament a PDF con spatie/laravel-pdf y el driver DomPDF

19 min de lectura Laravel 13

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 canvas cuando 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.

Lo que queda de esta lección
  1. 02spatie/laravel-pdf y sus drivers
  2. 03Instalar spatie/laravel-pdf con DomPDF
  3. 04Las 3 piezas del PDF
  4. 05DashboardReport: el informe como datos
  5. 06DashboardReportBuilder: de un periodo al informe
  6. 07La vista del informe
  7. 08DashboardPdf: del informe al PDF
  8. 09El primer PDF desde Tinker
  9. 10Tests del PDF
Sigue leyendo con tu suscripción El curso completo, con su proyecto final, el certificado y el foro con los planes trimestral y anual, está incluido en la suscripción. Ver los planes