Generar pdf con Dompdf en Laravel

En muchas ocasiones necesitamos que nuestra aplicación cuente con la funcionalidad de generar pdf o la exportación de excel, como puede ser en el caso de una factura. Para esta funcionalidad utilizamos librerías que nos facilitan la generación de pdf con funcionalidades para su desarrollo y diseño, pero muchas de estas librerías son muy tediosas.

Dompdf es un paquete muy sencillo para generar PDF en Laravel, creado por barryvdh, que nos permite crear a partir de un documento HTML un documento PDF con pocas líneas de código y además hacer uso del motor de plantilla blade para la impresión de datos de forma dinámica.

Instalación de Dompdf en laravel

Descargamos mediante composer el paquete DOMPDF

composer require barryvdh/laravel-dompdf

Una vez hecho esto, debemos añadir el ServiceProvider en el archivo app.php, que se encuentra en config/app.php:

Barryvdh\DomPDF\ServiceProvider::class,

Después, para llamar a la clase de una forma más rápida, podemos añadir esta línea de codigo en el apartado de facades, de esta forma llamaremos a la clase con el nombre «PDF»:

'PDF' => Barryvdh\DomPDF\Facade::class,

Tras añadir este par de líneas, ya podemos hacer uso de Dompdf para generar nuestros propios PDF.

Creando la plantilla de nuestro PDF

Para comenzar, crearemos una vista llamada “ejemplo”  que se generará como PDF:

<!DOCTYPE html>
<html lang="es">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <style>
        h1{
        text-align: center;
        text-transform: uppercase;
        }
        .contenido{
        font-size: 20px;
        }
        #primero{
        background-color: #ccc;
        }
        #segundo{
        color:#44a359;
        }
        #tercero{
        text-decoration:line-through;
        }
    </style>
    </head>
    <body>
        <h1>Titulo de prueba</h1>
        <hr>
        <div class="contenido">
            <p id="primero">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Labore nihil illo odit aperiam alias rem voluptatem odio maiores doloribus facere recusandae suscipit animi quod voluptatibus, laudantium obcaecati quisquam minus modi.</p>
            <p id="segundo">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Labore nihil illo odit aperiam alias rem voluptatem odio maiores doloribus facere recusandae suscipit animi quod voluptatibus, laudantium obcaecati quisquam minus modi.</p>
            <p id="tercero">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Labore nihil illo odit aperiam alias rem voluptatem odio maiores doloribus facere recusandae suscipit animi quod voluptatibus, laudantium obcaecati quisquam minus modi.</p>
        </div>
    </body>
</html>

Como vemos, el CSS de la vista debe ir añadido en la misma.

Configurando la exportación


Crearemos la ruta:

Route::name('print')->get('/imprimir', 'GeneradorController@imprimir');

Y en el controlador (en este caso llamado GeneradorController) crearemos el siguiente método:

public function imprimir(){
     $pdf = \PDF::loadView('ejemplo');
     return $pdf->download('ejemplo.pdf');
}

Hacemos uso de la clase mediante el facade PDF que le hemos añadido en el archivo config/app.php. Utilizamos el método LoadView para seleccionar la vista que queremos exportar y el método download para añadirle un nombre al PDF.

Si quisiéramos enviar variables a la vista para hacer uso de éstas, sería de la siguiente forma:

public function imprimir(){
  $today = Carbon::now()->format('d/m/Y');
  $pdf = \PDF::loadView('ejemplo', compact('today'));
  return $pdf->download('ejemplo.pdf');
}

Mediante el método compact enviaremos la variable “today”, que contiene el día actual, y podemos hacer uso de blade para mostrar esta variable en la vista:

<p>{{$today}}</p>

Tras estos sencillos pasos, ya podríamos generar nuestro PDF.

Para más información sobre el paquete DomPDF visita su repositorio aquí: Laravel-dompdf