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::reset
mé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\TCPDF
clase 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 ❤️!
Conviertete en un programador más sociable