Aprende a generar un PDF desde un controlador usando TCPDF en Laravel.

Cómo generar un PDF a partir de html con TCPDF en laravel

Hay un par de soluciones para generar PDF en laravel, DOMPDF, Snappy, etc. En este caso, le enseñaremos cómo crear un PDF usando TCPDF.

TCPDF es ahora uno de los proyectos de código abierto más activos del mundo, utilizado a diario por millones de usuarios e incluido en miles de aplicaciones web y CMS.

TCPDF no requiere nada más como base de código. No usa ningún ejecutable y es la primera opción para muchos desarrolladores, ya que es fácil de usar y de integrar.

Requisitos

Para usar TCPDF en Laravel, vamos a incluir el paquete tcpdf-laravel en nuestro proyecto. Puede agregar el paquete a su proyecto agregando la siguiente línea en su archivo composer.json:

{
    "require": {
        "elibyy/tcpdf-laravel": "5.2.*"
    }
}

O use directamente composer en la consola: 

composer require elibyy/tcpdf-laravel

La instalación llevará un tiempo ya que la libreria de TCPDF es grande.

Implementación

Ahora que la biblioteca está incluida en su proyecto, debe habilitarla en su proveedor de servicios.

Ve a tu archivo app.php (yourapp/config/app.php) y agrega el proveedor de servicios Laravel TCPDF:

'providers' => [
    //...
    Elibyy\TCPDF\ServiceProvider::class,
]

Ahora podrá utilizar TCPDF en su proyecto.

Usando TCPDF con un alias

Puede definir un alias (lo que desee) para TCPDF para evitar la declaración directa de un nuevo elemento de clase y utilizar la sintaxis TCPDF :: Method sin instanciación.

Vaya a su archivo app.php ( yourapp/config/app.php) y agregue el alias para la clase:

'aliases' => [
    //...
    'PDF' => Elibyy\TCPDF\Facades\TCPDF::class
]

Ahora, TCPDF tiene un alias como PDF y podrá generar PDF en su controlador usando:

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use PDF;

class DefaultController extends Controller
{
    public function index()
    {
        $html = '<h1>Hello World</h1>';
        
        PDF::SetTitle('Hello World');
        PDF::AddPage();
        PDF::writeHTML($html, true, false, true, false, '');

        PDF::Output('hello_world.pdf');
    }
}

Y ahora puedes generar un PDF impresionante desde html usando TCPDF.

Nota: como no crea una nueva instancia de la clase TCPDF cuando usa un alias, si desea crear varios PDF, debe usar el método de restablecimiento para crear uno nuevo.

Para crear varios PDF, utilice el PDF::resetmétodo para trabajar en una nueva instancia de PDF:

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use PDF;

class DefaultController extends Controller
{
    public function index()
    {    
        for ($i = 0; $i < 5; $i++) {
            $html = '<h1>Hello World '.$i.'</h1>';
            PDF::SetTitle('Hello World'.$i);
            PDF::AddPage();
            PDF::Write(0, 'Hello World'.$i);
            // Write the file instead of throw it in the browser
            PDF::Output(public_path('hello_world' . $i . '.pdf'), 'F');
            PDF::reset();
        }
    }
}

Usando TCPDF sin un alias

Sin un alias, necesitaremos declarar una instancia de la clase TCPDF, simplemente agregue una declaración de uso a la  Elibyy\TCPDF\Facades\TCPDFclase en la parte superior de su controlador.

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use Elibyy\TCPDF\Facades\TCPDF;

class DefaultController extends Controller
{
    public function index()
    {
        $html = '<h1>Hello world</h1>';
        $pdf = new TCPDF();
        $pdf::SetTitle('Hello World');
        $pdf::AddPage();
        $pdf::writeHTML($html, true, false, true, false, '');
        $pdf::Output('hello_world.pdf');
    }
}

Recomendaciones

Es una buena práctica manejar el contenido HTML en una vista en lugar de manipularlo manualmente en el controlador.

Puede dibujar su contenido PDF como html en una plantilla, recuperar el html generado por la vista y escribir en el PDF:

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use Elibyy\TCPDF\Facades\TCPDF;

class DefaultController extends Controller
{
    public function index()
    {
        $view = \View::make('myview_name');
        $html = $view->render();
        
        $pdf = new TCPDF();
        $pdf::SetTitle('Hello World');
        $pdf::AddPage();
        $pdf::writeHTML($html, true, false, true, false, '');
        $pdf::Output('hello_world.pdf');
    }
}

Que te diviertas ❤️!


Interesado en la programación desde los 14 años, Carlos es un programador autodidacta, fundador y autor de la mayoría de los artículos de Our Code World.

Conviertete en un programador más sociable

Patrocinadores