Entrada

Crear archivos PDF con CakePHP

En este post voy a comentar lo que he hecho para crear archivos PDF con CakePHP.

Los ingredientes para esta “receta” son:

1.- La librería TCPDF que se encarga de generar los archivos PDF. 2.- Un layout 3.- Una vista

Para implementar esta funcionalidad en vuestro desarrollo en CakePHP es muy sencillo y da muy buenos resultados.

  • Tendréis que descargar la última versión de la librería TCPDF que como he dicho es la encargada de generar los documentos PDF.

  • Tendréis que crear la carpeta app/vendors/tcpdf y extraer los ficheros en esta ruta. Al menos necesitareis copiar el archivo tcpdf.php y las carpetas tcpdf/config y tcpdf/fonts.

  • Por defecto la librería TCPDF crea unas cabeceras y pie definidas en los métodos header() y footer(), lo que hacemos es sobrescribir estos métodos creando una clase en app/vendors/tcpdf que extienda las propiedades y métodos de la librería TCPDF. Para ello creamos el archivo app/vendors/tcpdf/xtcpdf.php</li>
    ``` xheadercolor; $this->setY(10); $this->SetFillColor($r, $b, $g); $this->SetTextColor(0 , 0, 0); $this->Cell(0,20, '', 0,1,'C', 1); $this->Text(15,26,$this->xheadertext ); } function Footer() { $year = date('Y'); $footertext = sprintf($this->xfootertext, $year); $this->SetY(-20); $this->SetTextColor(0, 0, 0); $this->SetFont($this->xfooterfont,'',$this->xfooterfontsize); $this->Cell(0,8, $footertext,'T',1,'C'); } } ?> ``` Por supuesto se puede modificar el valor de las variables para customizarlas a vuestro modo. Hay muchos mas parametros y variables que se pueden añadir y customizar en la documentación de TCPDF.
  • A continuación creamos el layout en app/views/layouts/pdf.ctp donde se renderizará el archivo pdf generado.

  • ``` ```
  • Ahora toca la parte del controlador. En el controlador de vuestra aplicación donde se vayan a mostrar o descargar los pdf tendreis que añadir una nueva función, yo la he llamado descargar, la podéis llamar como queráis.

  • ``` function descargar($id = null) { if (!$id) { $this->Session->setFlash('no has seleccionado ningun pdf.'); $this->redirect(array('action'=>'index')); } // Sobrescribimos para que no aparezcan los resultados de debuggin // ya que sino daria un error al generar el pdf. Configure::write('debug',0); $resultado = $this->MiControlador->findById($id); $this->set("datos_pdf",$resultado); $this->layout = 'pdf'; //esto usara el layout pdf.ctp $this->render(); } ``` Esta función es de ejemplo, podreis desarrollar la lógica que necesitéis para obtener la información. Pero lo realmente importante es la renderizacion de los datos en el nuevo layout. ``` $this->layout = 'pdf'; $this->render(); ```
  • Es el paso en que hay que mostrar los datos obtenidos mediante nuestro controlador y renderizarlos en la vista. Para ello tenemos que crear nuestra vista. app/views/mi_aplicacion/descargar.ctp

  • ``` SetAuthor(""); $tcpdf->SetAutoPageBreak( false ); $tcpdf->setHeaderFont(array($textfont,'',10)); $tcpdf->xheadercolor = array(255,255,255); $tcpdf->xheadertext = 'Fecha: '. date('d-m-Y',time()); $tcpdf->xfootertext = 'www.pedroventura.com'; // Ahora imprimimos el contenido de la pagina en una posición determinada // estos datos son un ejemplo, y en mi ejemplo hay un pequeño texto y una imagen. $tcpdf->AddPage(); $tcpdf->SetTextColor(0, 0, 0); $tcpdf->SetFont($textfont,'B',10); $tcpdf->Cell(10,20,'Nombre:', 0, 0); // configuramos la calidad de JPEG $tcpdf->setJPEGQuality(100); $tcpdf->Image($imagen, 0, 50, 200, 200, '', '', '', false, 150); // se pueden asignar mas datos, ver la documentación de TCPDF echo $tcpdf->Output('mi_archivo.pdf', 'I'); //el pdf se muestra en el navegador //echo $tcpdf->Output('mi_archivo.pdf', 'I'); //el pdf se descarga ?> ``` en el segundo parámetro del Output yo tengo 'I', esto es que el PDF se generará en una nueva ventana del navegador. Si ponemos el parámetro: 'D' el pdf generado se descargará.

fuente: http://bakery.cakephp.org/articles/view/creating-pdf-files-with-cakephp-and-tcpdf

Esta entrada está licenciada bajo CC BY 4.0 por el autor.