DOMPDF es un paquete desarrollado por
Instalación de DOMPDF
Agregamos la siguiente linea en la sección required del archivo composer.json
"barryvdh/laravel-dompdf": "0.6.*"
posteriormente ejecutamos
$ composer update
Luego agregamos el service provider en config/app.php, en Laravel 5.1
Barryvdh\DomPDF\ServiceProvider::class,
en Laravel 5.0
'Barryvdh\DomPDF\ServiceProvider'
Por supuesto no hay que olvidar agregar el alias en la sección de aliasses
'PDF' => 'Barryvdh\DomPDF\Facade',
PdfController
Creamos un nuevo controlador que se encargue de generar el documento PDF, en nuestro caso vamos a crear una simple factura de servicio.
Desde la consola ejecutamos
$ php artisan make:controller PdfController
Dentro de este nuevo controlador podemos crear una función llamada invoice.
public function invoice() { $data = $this->getData(); $date = date('Y-m-d'); $invoice = "2222"; $view = \View::make('pdf.invoice', compact('data', 'date', 'invoice'))->render(); $pdf = \App::make('dompdf.wrapper'); $pdf->loadHTML($view); return $pdf->stream('invoice'); } public function getData() { $data = [ 'quantity' => '1' , 'description' => 'some ramdom text', 'price' => '500', 'total' => '500' ]; return $data; }
Al definir la variable $view renderizamos cualquier vista que queramos, usando estilos con css, operando variables en blade tal cual como lo haríamos con cualquier vista de la aplicación.
Esta función llama a la vista invoice.blade.php que crearemos en el directorio resources/pdf
<!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>Example 2</title> {!! Html::style('assets/css/pdf.css') !!} </head> <body> <main> <div id="details" class="clearfix"> <div id="invoice"> <h1>INVOICE {{ $invoice }}</h1> <div class="date">Date of Invoice: {{ $date }}</div> </div> </div> <table border="0" cellspacing="0" cellpadding="0"> <thead> <tr> <th class="no">#</th> <th class="desc">DESCRIPTION</th> <th class="unit">UNIT PRICE</th> <th class="total">TOTAL</th> </tr> </thead> <tbody> <tr> <td class="no">{{ $data['quantity'] }}</td> <td class="desc">{{ $data['description'] }}</td> <td class="unit">{{ $data['price'] }}</td> <td class="total">{{ $data['total'] }} </td> </tr> </tbody> <tfoot> <tr> <td colspan="2"></td> <td >TOTAL</td> <td>$6,500.00</td> </tr> </tfoot> </table> </body> </html>
como pueden ver, llamamos los estilos CSS con
{!! Html::style('assets/css/pdf.css') !!}
En este post no voy a incluir el código de la hoja de estilo, pero puedes descargar esta plantilla, y agregar el archivo .css como pdf.css a la carpeta /public/assets/css.
Definiendo la ruta
Bien, ahora que tenemos nuestro controlador y la vista correspondiente, vamos a crear la ruta para generar el pdf.
Route::get('pdf', 'PdfController@invoice');
al final ingresando a ruta_de_tu_proyecto/public/pdf vas a poder ver algo como esto
Si en lugar de imprimir en pantalla deseas descargar el archivo directamente solo debes cambiar la respuesta de la función invoice
return $pdf->download('invoice');
download() recibe como parámetro el nombre que deseas que tenga el archivo al descargar.
¡Eso es todo! ha sido un pequeño ejemplo sobre el uso de este paquete. Recuerda que puedes dejar tus dudas en la sección de comentarios.
Lecturas recomendadas
- https://github.com/barryvdh/laravel-dompdf
- Integrar Bootstrap con Blade en Laravel
- Inyección de servicios en Blade con Laravel 5.1
- Cambios al motor de plantillas Blade en Laravel 5
- Exportar hoja de calculo con Eloquent y Laravel Excel
Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.
Lección anterior Integrar Google Maps en Laravel 5 con el componente Phpgmaps Lección siguiente Paginación en Laravel 5.1 con blade-pagination