viernes, 26 de mayo de 2017

Crear PDF de una vista HTML utilizando Laravel

   


En este tutorial, le enseñare cómo generar archivos PDF a partir de la vista HTML en laravel 5.4 mediante el uso de laravel-dompdfpaquete.

En Internet hay un montón de paquetes que se pueden usar para generar PDF utilizando HTML y CSS, se puede hacer bonitos diseño para crear un PDF, eso depende de usted.

El uso de la biblioteca laravel-dompdfla, puede generar fácilmente archivos PDF en su aplicación web laravel. Puedes ir a su documentación oficial presionando aqui.

La generación de archivos PDF es útil cuando se necesita enviar informes, a los correos electrónicos de tus usuarios a gran cantidad, para hacer esto puedes convertir su vista HTML en archivo PDF y luego conectar con su correo y enviársela.

Dompdf es una librería PHP que se utiliza para generar el archivo PDF a partir de la vista HTML.

Instalación de paquete laravel-dompdfla:

En este paso vamos a instalar el paquete laravel-dompdf para generar archivos pdf desde el archivo de vista de hoja de HTML. Puede usar composer para descargar estos complementos, así que copie el siguiente comando y ejecútelo en su terminal.


composer require barryvdh/laravel-dompdf

Ahora, después de descargar las bibliotecas, tendrá que configurar su proveedor de servicios y su alias, en la ruta config/app.php


'providers' => [
    ...
    ...
    Barryvdh\DomPDF\ServiceProvider::class,
],


'aliases' => [
    ...
    ...
    'PDF' => Barryvdh\DomPDF\Facade::class,
],

En este paso me imagino que ya logro instalar el paquete laravel-dompdf así que vamos a empezar con el archivo de rutas.

Agrega la siguiente línea de código en tu archivo web.php que estará en la siguiente ruta routes/web.php.

Nota: En versiones anteriores a laravel 5.3 este archivo se encontraba en la siguiente ruta app/Http/routes.php.


Route::get('vista-html-pdf',array(
    'as'=>'vistaHTMLPDF',
    'uses'=>'ProductoController@vistaHTMLPDF'
));


Ahora voy a crear ProductoController y asumiré que usted ya tiene un modelo de producto y una tabla con algunos datos ficticios para mandar a  nuestra vista.

En el método vistaHTMLPDF , estoy compartiendo una variable global productos que puede utilizar en cualquier lugar de la aplicación y utilizo la clase pdf para cargar la vista para generar en archivo pdf.

app/Http/Controllers/ProductoController.php


<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Producto;
use PDF;

class ProductoController extends Controller
{
    

    public function vistaHTMLPDF(Request $request)
    {
        $productos = Producto::all();//OBTENGO TODOS MIS PRODUCTO
        view()->share('productos',$productos);//VARIABLE GLOBAL PRODUCTOS
        if($request->has('descargar')){
            $pdf = PDF::loadView('vista-html-pdf');//CARGO LA VISTA
            return $pdf->download('toda-la-lista-de-productos');//SUGERIR NOMBRE A DESCARGAR
        }
        return view('vista-html-pdf');//RETORNO A MI VISTA
    }


    
}


Por último, vamos a crear una vista en la que se va a mostrar en una tabla todos los productos y que también  generará la vista del  archivo PDF. La vista del archivo PDF puede estar en otra vista, pero nosotros usaremos esta misma vista vista-html-pdf.blade.php para el ejemplo.

resources/view/vista-html-pdf.blade.blade.php

<style>
    table, th, td {
        border: 1px solid black;
    }
</style>

<br><br>
<div class="row">
    <a href="{{ route('vistaHTMLPDF',['descargar'=>'pdf']) }}">Descargar PDF</a>

    <br><br>
    <table>
        <tr>
            <th>Nombre</th>
            <th>Detalles</th>
        </tr>
        @foreach ($productos as $producto)
        <tr>
            <td>{{ $producto->nombre }}</td>
            <td>{{ $producto->descripcion }}</td>
        </tr>
        @endforeach
    </table>
</div>

Corremos nuestro servidor php artisan serve y tendremos una vista así:

Crear PDF de una vista HTML utilizando Laravel
Y quedaría esta bonita vista, Le damos a descargar y listo :) Nota: No se desanimen con el PDF generado, ustedes hagan otras con mejores estilos :) Gracias




César GI

About César GI

Lo que me importa es poder enseñar lo poco que se, por que asi como yo aprendo leyendo gracias a las personas que comparten sus conocimiento yo tambien quiero ayudar a la comunidad en español aportando lo poco que he aprendido hasta el momento.

2 comentarios

Write comentarios
10 de octubre de 2017, 8:54 delete

hola que tal quisiera mostrar solo un registro pero cuando uso where('id',$id)->first(); o uso find($id); me dice argumento invalido para foreach y si imprimo un dd($variable); me dice que esta vacio o sea me dice null , pero si coloco ejemplo: Contacto::all(); si me los muestra todos

Reply
avatar
15 de febrero de 2018, 12:39 delete

Hola amigo, seguí los pasos y todo, pero al momento de dar descargar se me queda cargando nada mas. como podia solucionar eso?

Reply
avatar