Es bastante común que, dentro de nuestros proyectos, se tenga como requerimiento implementar reportes en formatos portables. Uno de los formatos mas comunes a los que se suele recurrir es a los archivos PDF por lo que en esta ocasión les traigo un post bastante sencillo que los ayudara a implementar esta característica de manera fácil y sencilla.
Para este ejemplo haremos uso de la popular librería conocida como DomPDF, herramienta que, en opinión personal, cuenta con varias ventajas sobre otras alternativas, siendo la principal su compatibilidad con elementos HTML y CSS que permiten construir de manera fácil y sencilla nuestros reportes, además de permitirnos integrar algunas características de Bootstrap (En mi caso lo utilizo por los tables) si es que somos muy novatos en temas de maquetado y estilos. Dicho lo anterior, pongamos manos a la obra.
En primera instancia, debemos instalar la librería en nuestro proyecto. Para esto lo haremos con ayuda de composer ejecutando el siguiente comando:
composer require barryvdh/laravel-dompdf
Posteriormente se deben realizar las configuraciones apropiadas. Comenzando por la raíz de nuestro proyecto, nos situaremos en la carpeta config y editaremos el archivo app.php
. Dentro de este archivo ubicaremos el arreglo providers añadiendo lo siguiente al listado que ya trae por defecto:
Barryvdh\DomPDF\ServiceProvider::class,
Dentro de este archivo de manera opcional también se puede añadir la fachada a partir de la cual accederemos a la librería ubicando el arreglo ‘facades’ añadiendo al final de su listado lo siguiente:
'PDF' => Barryvdh\DomPDF\Facade::class,
Finalmente haremos publico el provider de la librería ejecutando en la linea de comandos lo siguiente:
php artisan vendor:publish --provider="Barryvdh\DomPDF\ServiceProvider"
¡Y listo!, ya podemos hacer uso de DomPDF para nuestros reportes por lo que a continuación haremos un pequeño ejemplo para que desde ya puedas implementarlo.
Para esto, debemos crear un controlador y una vista. Por motivos practicos yo los llamare PDFController.php
al controlador y la vista se llamara PDF_Example.blade.php
, tu puedes llamarlos como desees.
Empezaremos trabajando con el controlador; Dentro de este lo primero que debemos hacer es llamar la fachada del DomPDF de la siguiente manera:
Use PDF;
En caso de no haber incluido la fachada en el config/app.php
no te preocupes, solo debes cambiar la línea anterior por esta:
use Barryvdh\DomPDF\Facade as PDF;
Ahora que nuestro controlador puede hacer uso de la libreria lo siguiente es crear generar nuestro archivo PDF (al fin), para esto crearemos un método llamado getPDF()
y dentro de este una variable con la cual a través de la fachada PDF haremos uso del método loadView()
, en este método pasaremos como parámetro el nombre de la vista que la librería leera para generar el archivo como se muestra a continuación, recordemos que la vista de ejemplo se llama PDF_Example
$pdf = PDF::loadView('PDF_Example');
El método loadView()
es bastante flexible y entre otras cosas podemos pasarle parámetros a la vista mediante el método compact()
de Laravel como ya debes estar acostumbrado. Por ejemplo definamos una variable llamada $name = 'Juanito Pérez';
y pasémosla junto a la vista en el método loadView()
como se muestra a continuación.
$name = 'Juanito Perez';
$pdf = PDF::loadView(' PDF_Example', compact('name'));
Para terminar con el controlador lo único que nos queda es visualizar el archivo. Para esto podemos hacer uso del método stream()
pasándole como parámetro el nombre que deseamos darle a nuestro archivo.
return $pdf->stream('prueba.pdf');
Una alternativa al método stream()
es el método download()
, solo que este ultimo en lugar de visualizarlo, descargara directamente el archivo, puedes hacer uso de este de la siguiente manera.
return $pdf-> download ('prueba.pdf');
¡Ya tenemos nuestro controlador terminado! Si te has perdido durante la explicación, así debió haber quedado tu controlador, te dejo el código para que lo compares:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use PDF;
class PDFController extends Controller{
public function getPDF(){
$name = ‘Juanito Perez’;
$pdf = PDF::loadView(' PDF_Example', compact('name'));
return $pdf->stream('prueba.pdf');
}
}
Ahora pasaremos a nuestra vista. Realmente aquí no hay mucho que explicar, solo debes crear tu estructura HTML y con ayuda de CSS y acomodar la información según tus requerimientos. Para este ejemplo lo haremos bastante sencillo, de aquí en adelante depende de tu creatividad como personalizar la vista de tu PDF
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>Mi first PDF</title>
</head>
<body>
<h1>Hola {{$name}} este es tu primer PDF.
</body>
</html>
Como puedes ver DomPDF tiene una increíble compatibilidad con Laravel, al grado que podemos hacer uso de etiquetas blade para procesar la información dentro de nuestra vista.
Finalmente, solo nos resta dar de alta una ruta que nos permita visualizar nuestro archivo por ejemplo.
Route::get('/pdf', 'PDFController@getPDF')->name(‘getPDF’);
¡Listo! Ya tenemos nuestro primer PDF terminado, solo queda visualizarlo y adaptarlo a tus necesidades.
Conclusiones.
DomPDF es bastante popular por su versatilidad y sencillez para crear plantillas. Después de personalmente haber probado y padecido algunas otras soluciones para generar archivos PDF, siempre que requiero implementar esta característica a mis desarrollos me inclino por esta librería.
Espero que este tutorial te haya sido de utilidad. Cualquier duda puedes contactarme por mis redes sociales. Nos vemos la siguiente semana con otro post ¡Hasta la próxima!
Finalmente, invitarte a nuestro curso de PHP Core, donde aprenderás desde cero a crear tus propias páginas web, utilizando las mejores práctivas.
Referencias
https://github.com/barryvdh/laravel-dompdf