Como generar un archivo pdf desde Cakephp 3
|Vamos a realizar un ejemplo sencillo de como crear un archivo pdf desde Cakephp 3 utilizando la librería TCPDF. La pueden descargar del siguiente enlace: http://www.tcpdf.org/download.php, en este ejemplo utilizo la versión min.
La carpeta que descompriman hay que depositarla en /vendor.
Comenzamos creando una función en nuestro controlador el cual ejecutará a la vista que genera el pdf. Mi controlador se llama PrincipalController.php
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php namespace App\Controller; class PrincipalController extends AppController{ ... public function pdf(){ $this->layout='ajax'; $this->response->type('application/pdf'); } } |
Como notarán utilizo el layout de ajax porque no debe haber ningún tipo de impresión en pantalla, con eso me refiero a echo, print_r() o salidas html. Además agregamos un response de tipo pdf que será transformado en un header que le indicará al navegador que lo que estamos generando es un pdf.
Ahora creamos nuestra vista que se llamará pdf.ctp en la ruta /src/Template/Principal con el siguiente contenido.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
<?php //importamos la libreria tcpdf require_once ROOT. DS. 'vendor'. DS. 'tcpdf_min'. DS. 'tcpdf.php'; //creamos una clase para nuestro pdf en el cual declaramos el header y footer que utilizar class mipdf extends TCPDF{ //Header personalizado public function Header() { $escudo = 'img/tcpdf_logo.png'; $this->Image($escudo, 25, 5, 15, '', 'PNG', '', '', false, 300, '', false, false, 0, false, false, false); $this->SetFont('helvetica', 'B', 20); $this->Cell(0, 0, 'Titulo de página', 0, false, 'C', 0, '', 0, false, 'T', 'M'); } //footer personalizado public function Footer() { // posicion $this->SetY(-15); // fuente $this->SetFont('helvetica', 'I', 8); // numero de pagina $this->Cell(0, 10, 'Página '.$this->getAliasNumPage().' de '.$this->getAliasNbPages(), 0, false, 'C', 0, '', 0, false, 'T', 'T'); } }//termina la clase mipdf //creamos una instancia del pdf $pdf = new mipdf ('P', 'mm', 'Letter', TRUE, 'UTF-8', FALSE); $pdf->SetCreator('Hugo - Kiuvox'); $pdf->SetAuthor('Hugo Lizama'); $pdf->SetTitle('Ejemplo de PDF'); $pdf->SetSubject('Ejemplo de PDF'); //establecer margenes $pdf->SetMargins(15, 25, 15); $pdf->SetHeaderMargin(5); //Indicamos la creación de nuevas paginas automaticas al crecer el contenido $pdf->SetAutoPageBreak(true, 15); //agregamos la primera hoja al pdf $pdf->AddPage (); $pdf->SetFont ('helvetica', 'B', 10); //agregamos un texto cualquiera para prueba for($i=0; $i<100; $i++){ $pdf->MultiCell(0, 0, 'TEXTO DE EJEMPLO EN BLOG.KIUVOX.COM', 0, 'L', false, 1, '', '', true, 0, false, true, 0, 'T', false); } //Cerramos el pdf $pdf->lastPage (); //indicamos el nombre del pdf y que queremos forzarlo a descargar en el navegador $pdf->Output('reporte.pdf', 'D'); |
Con eso basta para generar un pdf sencillísimo. Para ejecutarlo debemos escribir la dirección en el navegador como por ejemplo: http://misitio/principal/pdf y si debe levantar la caja de diálogo del navegador.
Aqui esta el resultado de como se debería de ver el resultado de este ejemplo: reporte.pdf
Así de fácil podemos generar un pdf, claro que este ejemplo es con un texto fijo, cuando tengan sus datos obtenidos de la base de datos entonces los asignan como por ejemplo:
1 |
$pdf->MultiCell(0, 0, $var['usuario']['nombre'], 0, 'L', false, 1, '', '', true, 0, false, true, 0, 'T', false); |
Para más información sobre como usar la librería pueden referirse al sitio de TCPDF donde hay muchos ejemplos para probar.
hola me sale el siguiente error
TCPDF ERROR: [Image] Unable to get the size of the image: img/tcpdf_logo.png
Lo probable es que no esta encontrando la imagen en la ruta que le has especificado, verifica que la imagen esta dentro de la carpeta \webroot\img de tu proyecto.
Hola!! Disculpa si quiero usarlo con una base de datos ¿Qué podría hacer en ese caso?
Saludos!!
Gracias, sencillo y eficaz