Photo by Mimi Thian on Unsplash

Es muy común que cuando estamos desarrollando algún sistema web una vista o vistas en particular necesitan ser exportadas en formato PDF. En este tutorial vas a aprender cómo exportar una vista en Laravel 8 a un archivo PDF, para lograrlo usarás el paquete DomPDF. Sin más manos a la obra.

1. Crear proyecto nuevo en Laravel 8

Crea un proyecto nuevo, abre desde la raíz tu terminal y escribe:

composer create-project laravel/laravel laravel-pdf

2. Instalar DomPDF

Desde tu terminal accede a la recién creada carpeta de tu proyecto, para instalar el paquete DomPDF vía composer escribe:

composer require barryvdh/laravel-dompdf

3. Configurar DomPDF en el archivo app.php

Abre el archivo app.php que se encuentra en la ruta config/app.php, tienes que agregar dos líneas de código, busca el array llamado ‘providers’ y agrega lo siguiente:

Barryvdh\DomPDF\ServiceProvider::class,

Ahora, un poco más abajo busca un array llamado ‘aliases’ y agrega al final del array:

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

4. Crear un modelo y migración

Para seguir este tutorial crea un modelo y migración, en mi caso crearé el modelo y migración de Productos, puedes nombrarlo como gustes, ve a la terminal y escribe:

php artisan make:model Producto -m

5. Configurar modelo y migración

Abre el archivo app/Models/Producto.php crea la propiedad fillable para permitir el almacenamiento masivo en la base de datos:

public $fillable = 
[
   'sku',
   'nombre',
   'cantidad',
   'precio',
   'descripcion'
];

Laravel 8 exportar vista a PDF

Ahora abre el archivo database/migrations/x_create_productos_table.php e ingresa las columnas en donde se guardaran los datos del producto:

Schema::create('productos', function (Blueprint $table) {
            $table->id();
            $table->string('sku');
            $table->string('nombre');
            $table->string('cantidad');
            $table->float('precio');
            $table->text('descripcion');
            $table->timestamps();
        });

Laravel 8 exportar vista a PDF

6. Crear base de datos y configurar

Abre la consola de MySQL desde tu terminal teclea el siguiente comando:

mysql -u root -p

Ingresa los datos de acceso y crea una base de datos nueva:

CREATE DATABASE laravelpdf CHARACTER SET utf8 COLLATE utf8_spanish_ci;

Para salir de la consola de MySQL escribe exit.

En tu editor de texto abre el archivo .env y agrega el nombre de la base de datos que creaste:

Agregamos al archivo .env el nombre de la base de datos

Desde tu terminal corre las migraciones:

php artisan migrate

7. Generar datos falsos de prueba

Abre el archivo database/seeds/DatabaseSeeder.php y agrega el siguiente código para generar 10 datos falsos de prueba:

$faker = Faker::create();
        foreach (range(1,10) as $index) {

            DB::table('productos')->insert([
                'sku' => $faker->randomNumber(),
                'nombre' => $faker->word(),
                'cantidad' => $faker->numberBetween(1, 20),
                'precio' => $faker->numberBetween(10, 500),
                'descripcion' => $faker->text(),
                'created_at' => Carbon::now(),
                'updated_at' => Carbon::now()

            ]);

        }

Para correr los seeds desde tu terminal escribe:

php artisan db:seed

Nota: Recuerda importar las clases Faker, DB y Carbon como se muestra al principio del archivo.

8. Crear controlador

Ahora crea el controlador del modelo Producto, teclea en la terminal:

php artisan make:controller ProductoController

Desde tu editor de textos abre el archivo app/Http/Controllers/ProductoController.php y crea el método index agregando el siguiente código:

public function index(){
        $productos = Producto::all();
        return view('index', compact('productos'));
    }

También crea el método ‘createPDF’ para generar el PDF de la vista:

public function createPDF(){
        //Recuperar todos los productos de la db
        $productos = Producto::all();
        view()->share('productos', $productos);
        $pdf = PDF::loadView('index', $productos);
        return $pdf->download('archivo-pdf.pdf');
    }

 

No olvides agregar el atributo ‘use PDF’ al inicio del archivo.

 

Laravel 8 exportar vista a PDF

9. Crear ruta

Abre el archivo routes/web.php para crear las rutas de tu aplicación copia y pega el siguiente código:

Route::get('/productos', [Producto::class, 'index'])->name('productos.index');

Y ya que estas en este archivo, de una vez crea la ruta para generar el archivo PDF:

Route::get('/producto/pdf', [ProductoController::class, 'createPDF'])->name('producto.pdf');

10. Crear plantilla para la vista index

Crea el archivo index en la ruta resources/views/index.blade.php aquí mostrarás todos los productos que hay en la base de datos. Pega y copia el código de abajo en tu archivo index.blade.php:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Laravel 8 PDF</title>
    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
</head>
<body>
    <div class="container mt-4">
        <div class="row">
            <div class="col-md-8">
                <h2>Lista de productos</h2>
            </div>
            <div class="col-md-4">
                <div class="mb-4 d-flex justify-content-end">
                    <a class="btn btn-primary" href="{{ URL::to('#') }}">Convertir a PDF</a>
                </div>
            </div>
        </div>
        <div class="row">
            <div class="col-md-12">
                <table class="table">
                    <caption>Lista de productos</caption>
                    <thead>
                      <tr>
                        <th scope="col">SKU</th>
                        <th scope="col">Nombre</th>
                        <th scope="col">Cantidad</th>
                        <th scope="col">Precio</th>
                        <th scope="col">Descripción</th>
                      </tr>
                    </thead>
                    <tbody>
                        @foreach ($productos as $producto)
                        <tr>
                            <th scope="row">{{ $producto->sku }}</th>
                            <td>{{ $producto->nombre }}</td>
                            <td>{{ $producto->cantidad }}</td>
                            <td>{{ $producto->precio }}</td>
                            <td>{{ $producto->descripcion }}</td>
                        </tr>
                        @endforeach
                    </tbody>
                  </table>
            </div>
        </div>
    </div>
    <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
</body>
</html>

Enciende el servidor escribiendo desde la terminal:

php artisan serve

Abre el navegador y ve a la dirección: http://127.0.0.1:8000/productos

Laravel 8 exportar vista a PDFVas a ver la lista de los productos que tienes en tu base de datos, si das clic en el botón ‘Convertir a PDF’ verás que se descarga la vista en formato PDF.

Conclusión

El paquete DomPDF es uno de los mejores que tiene Laravel para trabajar con conversiones a PDF, puedes ver el repositorio de GibHub aquí. Y así siguiendo estos sencillos pasos puedes exportar una vista de Laravel 8 a PDF. Si te sirvió este tutorial te invito a que lo compartas en tus redes sociales para que más personas lo vean y si tienes dudas o comentarios déjalos en la caja de comentarios de abajo, estaré al pendiente de ellos. También te invito a ver cómo hacer deploy de un proyecto Laravel en un VPS aquí.

Repositorio del tutorial: https://github.com/diarioprogramador/laravel-pdf

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.