El verdadero rico no es el que tiene mucho dinero sino el que tiene tiempo para estar con la gente que quiere y hacer lo que le gusta.

Generar PDF en CakePHP con el plugin CakePDF

Generar PDFs en CakePHP con el plugin CakePDF

Publicado el 27 Julio, 2015 por | Categoría:

CakePDF es un plugin de CakePHP para generar archivos PDF de manera sencilla, lo interesante de este plugin es que funciona bajo distintas librerías PDF como ser Mpdf, tcpdf, WkHtmlToPdf y DomPdf, también podemos configurar el plugin para encriptar nuestros archivos PDF después de haberlos exportado desde nuestra aplicación, así mismo podemos negar los permisos de impresión para nuestros archivos y estas solo son algunas de las prestaciones que nos ofrece este grandioso plugin.
A lo largo de este tutorial te voy a explicar paso a paso el proceso para poder exportar un archivo PDF de nuestros registros desde nuestra aplicación con CakePHP.

Actualización en Julio del 2016: Este tutorial está dividido en dos partes ya que se explicará el proceso para exportar un archivo en formato PDF tanto en CakePHP 2.x como en CakePHP 3.x consecutivamente, por tal razón para que puedas acceder de manera rápida a cualquiera de estas partes puedes seguir los enlaces a continuación:

Generar PDFs en CakePHP 2.x con el plugin CakePDF

Generar PDFs en CakePHP 3.x con el plugin CakePDF


Generar PDFs en CakePHP 2.x con el plugin CakePDF:

Para propósitos del tutorial he desarrollado una aplicación para la gestión de usuarios el cual al momento de acceder a la información del usuario (acción view) este tendrá la opción de exportar a un archivo PDF los datos de este usuario, importante también aclarar que utilizaremos la librería DomPDF para la generación de nuestro archivo.

Comencemos 8-)

1. Comenzamos descargando el paquete del plugin CakePDF desde su repositorio oficial en GitHub, puedes acceder a la descarga directa del plugin desde este enlace: https://github.com/FriendsOfCake/CakePdf/archive/1.0.zip, como resultado obtendrás un archivo comprimido en formato zip.

2. Procedemos a descomprimir el archivo donde obtenemos un carpeta el cual contiene todos los archivos del plugin, vamos a renombrar la carpeta con el nombre CakePdf y lo copiamos al directorio app/Plugin dentro de nuestro proyecto CakePHP.

3. Ahora vamos cargar el plugin dentro de nuestro proyecto CakePHP, nos dirigimos al archivo app/Config/bootstrap.php y agregamos la siguiente línea de código:

4. Ya cargado el plugin procedemos a configurarlo y lo haremos desde el mismo archivo app/Config/bootstrap.php voy a configurar lo necesario para generar el archivo PDF de manera correcta pero si deseas conocer mas opciones de configuración puedes revisar la documentación del Plugin, bien entonces copiamos las siguientes sentencias después de haber cargado el plugin:

Si te das cuenta es acá donde definimos el motor para generar PDF que el plugin utilizará para generar los archivos, como lo indiqué al inicio del artículo vamos a trabajar con DomPDF, esta solo es una decisión personal, tu puedes elegir el motor que desees ya que esa es la libertad que nos da el plugin como tal. Importante también aclarar que el plugin ya trae por defecto los paquetes DomPdf, Mpdf y tcpdf por lo cual solo necesitas llamarlo como lo hicimos con DomPDF en este paso.

Para el caso particular de DomPDF, adicionalmente se debe agregar la definición de la librería de la misma forma dentro del archivo bootstrap.php , puedes poner la siguiente línea después de cargar el plugin:

5. De la misma manera podemos agregar configuraciones adicionales para el plugin dentro de nuestro controlador en la acción específica en el que generamos el archivo PDF. Para este caso vamos a generar el archivo PDF dentro de una acción view() por lo cual podemos agregar estas configuraciones de la siguiente manera:

Adicionalmente estamos configurando el plugin para que nos permita descargarlo y también estamos agregando un nombre del archivo personalizado para la descarga.

Es importante también llamar desde nuestro controlador al componente RequestHandler para el correcto funcionamiento del plugin:

A continuación te muestro como quedaría nuestro controlador junto con la acción view():

6. Ya casi estamos por terminar, este paso es importante ya que tenemos que crear las vistas correspondientes para la correcta generación a PDF de nuestros registros. Podemos crear vistas personalizadas almacenándolas dentro de un directorio llamado pdf que lo tenemos que crear dentro del directorio correspondiente de nuestras vistas, para el caso de este tutorial estamos creando una vista para el módulo de usuarios por lo cual tendríamos que crear el directorio en: app/View/Users/pdf/view.ctp , si te fijas bien dentro de este directorio pdf estamos creando un archivo del mismo nombre view.ctp de nuestra vista en el que crearemos el archivo pdf, es dentro de este archivo donde ponemos todo el código personalizado para generar nuestro archivo PDF, voy colocar un ejemplo para nuestro módulo de usuarios:

Es un bloque de código bastante sencillo en el que estamos ingresando los datos necesarios de nuestro usuario.

Podemos también crear layouts personalizados para nuestros archivos PDF que vamos a generar y eso lo hacemos de la misma manera creando un directorio pdf dentro de nuestro directorio de layouts app/View/Layouts/pdf/default.ctp dentro de este archivo default.ctp podemos crear una plantilla personalizada de como queremos que se vean nuestros archivos PDF, automáticamente el plugin buscará este directorio y la plantilla como tal para aplicarlo en los archivos PDF que generará, a continuación te muestro un ejemplo de una plantilla básica para generar el PDF de nuestro usuario:

En esta plantilla básica estamos llamando un archivo css personalizado, esto con el fin de tener algo de estilos en todos nuestros archivos PDF, para el ejemplo he creado unos estilos básicos pero que te servirá de idea para poder generar tus propios estilos

app/webroot/css/style.css :

Si queremos que nuestro archivo PDF tenga la apariencia según los estilos que hemos definido es importante que la aplicación reconozca que estamos enlazando nuestro layout a un archivo estatico como es el caso de nuestra hoja de estilos style.css. Para ello vamos a colocar el siguiente método dentro de nuestro archivo AppHelper.php:

app/View/Helper/AppHelper.php :

El método assetUrl() esta forzando a llamar al archivo estático style.css que provenga de cualquier petición que tenga el parámetro con extensión pdf. De esa manera no tendremos problema alguno en llamar a archivos estáticos dentro de nuestras plantillas para nuestros archivos PDF.

7. Para generar de manera práctica nuestro archivo PDF vamos a crear un botón dentro de nuestra vista app/View/Users/view.ctp

La apariencia de nuestra aplicación con el nuevo botón agregado será similar a esta:

Agregando botón para generar PDF con el plugin CakePDF

La particularidad de este enlace es que estamos agregando una clave llamada ext el cual corresponde a la extensión de nuestro archivo a generar, entonces la ruta que vamos a generar es http://localhost/cakephpdf/users/view/1.pdf , para que no se te haga tan confuso debes tomar en cuenta que cakephpdf es el nombre del proyecto, users corresponde al controlador, view que corresponde a la vista que estamos generando y 1 es el registro que corresponde a los datos del usuario. Con esto el plugin tomará la configuración que definimos tanto en el archivo bootstrap.php como en nuestro controlador para posteriormente generar el archivo PDF y darnos la opción de poder descargarlo a nuestra computadora.

8. Listo! si presionamos el boton export to PDF podras ver que nos da la opción para guardar nuestro registro en un archivo en formato PDF dentro de nuestro computador:

Guardar archivo PDF con el plugin CakePDF

En mi caso estoy utilizando Firefox como navegador predeterminado y es por eso que me muestra esta ventana para poder guardar el archivo PDF, esto varia de acuerdo al navegador que utilices pero al final realizan el mismo procedimiento de guardarlo dentro de tu disco duro por lo general en la carpeta de descargas (downloads). Algo que quiero que te fijes acá es el nombre del archivo que se esta generando (lo señalo con una flecha de color naranja) y es el mismo nombre que nosotros configuramos dentro de nuestro controlador, es decir, está tomando el nombre user seguido del id correspondiente del registro que se está generando, desde luego este es solo un ejemplo ya que tu mismo puedes personalizar el nombre de tu archivo de una manera mas descriptiva (puede ser un nombre de usuario, un nombre de producto, etc).

Si ahora te diriges al directorio de descargas de tu computador encontrarás el archivo correspondiente el cual si lo abres podras observar nuestros datos del usuario en formato PDF:

Generar PDF con el plugin CakePDF

Listo !! ya tenemos nuestro archivo PDF generado, como puedes observar este contiene el formato que le damos a nuestra vista dentro de nuestro directorio pdf y también tiene los estilos css que se definió en el layout personalizado.


Generar PDFs en CakePHP 3.x con el plugin CakePDF:

Para propósitos del tutorial he desarrollado una aplicación para la gestión de usuarios el cual al momento de acceder a la información del usuario (acción view) este tendrá la opción de exportar a un archivo PDF los datos de este usuario, importante también aclarar que utilizaremos el motor WkHtmlToPdf que es recomendado por la documentación del plugin para generar nuestros archivos PDF.

Comencemos 8-)

1. Comenzamos instalando el plugin y para ello vamos a hacerlo usando composer, desde la línea de comandos vamos a dirigirnos al directorio de nuestro proyecto y escribimos la siguiente sentencia:

Con este paso ya tendremos el plugin a disposición dentro de nuestra aplicación.

2. Como lo indicaba al principio vamos a utilizar el motor WkHtmlToPdf para la generación de nuestro PDF, esto lo tenemos que instalar independientemente del plugin, para ello nos vamos a dirigir a la web oficial de WkHtmlToPdf   y a la sección download donde dependiendo de nuestro sistema operativo vamos a instalar el paquete correspondiente, en mi caso estoy trabajando con el sistema operativo Windows por lo que WkHtmlToPdf nos proveé de un ejecutable el cual su instalación es tan fácil como darle siguiente, siguiente y finalizar. La instalación de WkHtmlToPdf se alojará como en la mayoría de los programas en Windows dentro del directorio Program Files (Archivos de programa).

3. Ahora vamos cargar el plugin dentro de nuestro proyecto CakePHP, nos dirigimos al archivo config/bootstrap.php y agregamos la siguiente línea de código:

4. Ya cargado el plugin procedemos a configurarlo y lo haremos desde el mismo archivo config/bootstrap.php voy a configurar lo necesario para generar el archivo PDF de manera correcta pero si deseas conocer mas opciones de configuración puedes revisar la documentación del Plugin, bien entonces copiamos las siguientes sentencias después de haber cargado el plugin:

Si te das cuenta es acá donde definimos el motor para generar PDF que el plugin utilizará para generar los archivos, como estamos implementando el motor WkHtmlToPdf que instalamos en el paso 2 ahora dentro de la configuración debemos definir la ruta donde se encuentra el archivo binario de este motor (la opción binary), eso también será dependiendo de nuestro sistema operativo, para el caso del tutorial lo estamos implementando en un sistema operativo Windows, de todas formas te dejo comentado la ruta por defecto si lo estas implementando en Linux o Mac OS.

5. De la misma manera podemos agregar configuraciones adicionales para el plugin dentro de nuestro controlador en la acción específica en el que generamos el archivo PDF. Para este caso vamos a generar el archivo PDF dentro de una acción view() por lo cual podemos agregar estas configuraciones de la siguiente manera:

Adicionalmente estamos configurando el plugin para que la orientación se defina como portada y también estamos agregando un nombre del archivo personalizado para la descarga.

Vamos también agregar dentro de nuestro controlador un método initialize() el cual este contendrá la llamada al componente RequestHandler (importante para el funcionamiento del plugin) . A tomar en cuenta que en las últimas versiones del framework este componente ya viene cargado por defecto dentro del AppController, así que ten en cuenta este detalle:

A continuación te muestro como quedaría nuestro controlador junto con la acción view() y el método initialize():

6. Ya casi estamos por terminar, este paso es importante ya que tenemos que crear las vistas correspondientes para la correcta generación a PDF de nuestros registros. Podemos crear vistas personalizadas almacenándolas dentro de un directorio llamado pdf que lo tenemos que crear dentro del directorio correspondiente de nuestras vistas, para el caso de este tutorial estamos creando una vista para el módulo de usuarios por lo cual tendríamos que crear el directorio en: src/Template/Users/pdf/view.ctp , si te fijas bien dentro de este directorio pdf estamos creando un archivo del mismo nombre view.ctp de nuestra vista en el que crearemos el archivo pdf, es dentro de este archivo donde ponemos todo el código personalizado para generar nuestro archivo PDF, voy colocar un ejemplo para nuestro módulo de usuarios:

Es un bloque de código bastante sencillo en el que estamos ingresando los datos necesarios de nuestro usuario.

Podemos también crear layouts personalizados para nuestros archivos PDF que vamos a generar y eso lo hacemos de la misma manera creando un directorio pdf dentro de nuestro directorio de layouts src/Template/Layout/pdf/default.ctp dentro de este archivo default.ctp podemos crear una plantilla personalizada de como queremos que se vean nuestros archivos PDF, automáticamente el plugin buscará este directorio y la plantilla como tal para aplicarlo en los archivos PDF que generará, a continuación te muestro un ejemplo de una plantilla básica para generar el PDF de nuestro usuario:

En esta plantilla básica estamos llamando un archivo css personalizado, la sentencia [‘fullBase’ => true] es muy importante para asi se tome de manera correcta los estilos personalizados dentro de nuestro archivo PDF, para el ejemplo he creado unos estilos básicos pero que te servirá de idea para poder generar tus propios estilos

webroot/css/style.css :

7. Para generar de manera práctica nuestro archivo PDF vamos a crear un botón dentro de nuestra vista src/Template/Users/view.ctp

en este punto también vamos a configurar nuestra ruta para que se admita correctamente la extensión pdf, nos dirigimos a nuestro archivo config/routes.php y agregamos lo siguiente:

La apariencia de nuestra aplicación con el nuevo botón agregado será similar a esta:

export to pdf

La particularidad de este enlace es que estamos agregando una clave llamada ext el cual corresponde a la extensión de nuestro archivo a generar, entonces la ruta que vamos a generar es http://localhost/cakephpdf3/users/view/1.pdf , para que no se te haga tan confuso debes tomar en cuenta que cakephpdf3 es el nombre del proyecto, users corresponde al controlador, view que corresponde a la vista que estamos generando y 1 es el registro que corresponde a los datos del usuario. Con esto el plugin tomará la configuración que definimos tanto en el archivo bootstrap.php como en nuestro controlador para posteriormente generar el archivo PDF y darnos la opción de poder descargarlo a nuestra computadora.

8. Listo! si presionamos el boton export to PDF podras ver que nos da la opción para guardar nuestro registro en un archivo en formato PDF dentro de nuestro computador:

export to pdf complete

En mi caso estoy utilizando Firefox como navegador predeterminado y es por eso que me muestra esta ventana para poder guardar el archivo PDF, esto varia de acuerdo al navegador que utilices pero al final realizan el mismo procedimiento de guardarlo dentro de tu disco duro por lo general en la carpeta de descargas (downloads). Algo que quiero que te fijes acá es el nombre del archivo que se esta generando (lo señalo con una flecha de color naranja) y es el mismo nombre que nosotros configuramos dentro de nuestro controlador, es decir, está tomando el nombre user seguido del id correspondiente del registro que se está generando, desde luego este es solo un ejemplo ya que tu mismo puedes personalizar el nombre de tu archivo de una manera mas descriptiva (puede ser un nombre de usuario, un nombre de producto, etc).

Si ahora te diriges al directorio de descargas de tu computador encontrarás el archivo correspondiente el cual si lo abres podrás observar nuestros datos del usuario en formato PDF:

pdf complete

Listo !! ya tenemos nuestro archivo PDF generado, como puedes observar este contiene el formato que le damos a nuestra vista dentro de nuestro directorio pdf y también tiene los estilos css que se definió en el layout personalizado.


Como ya pudiste apreciar en 8 pasos hemos generado archivos PDF desde nuestra aplicación tanto en CakePHP 2.x como en CakePHP 3.x, este es uno de los tutoriales mas completos de mi blog en verdad espero que le saques el mayor provecho y ya puedas implementar esta funcionalidad dentro de tus proyectos.

Para finalizar te pido por favor que si el tutorial te pareció interesante lo compartas en las redes sociales y si tienes algún comentario o sugerencia puedes dejarlo en la caja de comentarios acá abajo. Quiero compartir contigo también el código del proyecto de usuarios que se utilizó en este tutorial para ambas versiones del framework por si tienes algún problema puedas tener el código de apoyo, abajo te dejo ambos enlaces a los repositorios en GitLab.

Saludos!!!

firma emm

 


Repositorio del proyecto en CakePHP 2.x

Repositorio del proyecto en CakePHP 3.x

¿Te gustó el artículo? ¡Suscríbete ahora mismo!

Recibe mis últimos artículos, recursos, tutoriales y mucho más.

, ,

Comentarios

  • Alejandro

    hola edson, cuando pongo el boton imprimir no hace nada, nose por que sera estoy con la version 2.6 de cake
    saludos

    • Edson Mollericona Marín

      Hola Alejandro, he actualizado el paso 6, quizá con ese detalle ya te funcione, aunque eso no afecta la generación del PDF ya que esta actualización es mas un aspecto de estilos para generar el archivo pero de todas formas no esta de mas indicarlo. Por otro lado revisa también el código que comparto del proyecto donde he aplicado el tutorial. Yo mismo lo volví a probar desde cero (con la versión 2.7.1 aunque con la versión 2.6 debería funcionar igual) y me funciona sin problema alguno. Saludos!

  • MANNU

    Hola, soy principiante en cakephp, puede hacerse reportes donde involucre varias tablas….Saludos

    • Edson Mollericona Marín

      Hola Mannu, claro que lo puedes hacer, solo tienes que manipularlo en tus vistas dentro del directorio PDF y puedes personalizarlo con tus propias plantillas tal como lo hicimos en el tutorial. Saludos!!!

  • Sergio

    Mi estimado gracias por el aporte se espero un buen tiempo pero te acordaste ahh..!! Saludos..!!

  • Sergio

    Estimado,se espero buen tiempo pero al final el aporte sobre la creacion de PDF se agraedce ah, Saludos..!!

    • Edson Mollericona Marín

      Hola Sergio, me alegra que el tutorial te haya sido útil. Saludos y gracias por seguir mi trabajo.

  • Alejandro

    Edson arregle el problema, muchas gracias y espero que pronto hagas un nuevo tutorial

    saludos

  • Patricio Gonzalez

    Hola Edson, habra una manera de usar procedimientos almacenados en CakePHP?

    • Edson Mollericona Marín

      Hola Patricio, respecto a tu duda lo desconozco, tendrías que revisar la documentación oficial del framework. Saludos!

  • Robi Alfaro

    Gracias Edson, por el tiempo dedicado a explicar las maravillas de este framework. Esperamos con ansias el tutorial donde nos muestres el panorama para empezar a trabajar en la versión 3 del framework. Seguí el curso completo de cakephp 2.5.4 anterior. Gracias de antemano. Saludos!

    • Edson Mollericona Marín

      Hola Robi, es bueno saber que este tutorial te fue útil así mismo me alegra que le hayas sacado provecho al curso de CakePHP 8-), cualquier novedad lo esteré publicando por este mi blog. Saludos y gracias por seguir mi trabajo.

  • Roberto

    Hola, gracias por tus tutoriales, he aprendido mucho con ellos. Pero intente agregar el plugin y me aparece el siguiente error;
    Error: The application is trying to load a file from the CakePdf plugin

    Error: Make sure your plugin CakePdf is in the app\Plugin directory and was loaded

    Puse la carpeta Cakepdf en::
    C:\wamp\www\aplicacion\app\plugins

    revisando encontre que podía poner la siguiente linea para cargar el plugi:
    CakePlugin::loadAll();

    y ya no me muestra el error pero ahora el boton no hace nada, parce que carga pero no muestra algo

    Gracias de antemano

    • Edson Mollericona Marín

      Hola Roberto, se me hace extraño el problema que tienes al cargar el plugin, yo lo volví a probar todo desde cero y me marcho sin problema alguno. Revisaste el código que comparto junto con el artículo? y dime con que versión de CakePHP lo estas intentando. Saludos!

    • Roberto

      Hola es la versión 2.5.5, ya pude resolverlo, lo único que hice fue copiar la carpeta CakePdf en la ruta general del proyecto C:\xampp\htdocs\proyecto\plugins
      en lugar de
      C:\xampp\htdocs\proyecto\app\Plugin
      La verdad ignoro el porque no funciona desde \app\Plugin
      Gracias

      • Edson Mollericona Marín

        Roberto revisa bien los pasos del tutorial o de lo contrario la documentación del plugin, no es aconsejable que alojes en ese directorio el plugin ya que tu espacio de desarrollo siempre debe ser dentro del directorio app. Saludos espero pronto soluciones ese detalle.

  • Mi estimado en el paso 6 :app/View/Layouts/pdf/default.ctp dentro de este directorio creas un archivo layout.ctp o modificas el default.ctp, es solo uno de ellos que debe contener este directorio? por otro lado probando no me genera ningún error como tampoco me da la opción de descarga del pdf que puede estar mal afectara la versión de adobe tengo la 9, la verdad copie, transcribi línea por línea el código una y otra vez pero nada no parece tan extensa la explicación podrias facilitar un video como los anteriores para ver la falla quiza.

    Saludos..!!

    • Edson Mollericona Marín

      Hola Sergio, el Layout dentro del directorio PDF es el que tomará para generar el archivo PDF y es uno solo. Puedes también contar con el código que comparto al final del artículo, espero te sirva de apoyo. Ah y no afecta el visor de PDF que tengas para la exportación. Saludos!!!

  • Mauro Arroyo

    Hola edson disculpa intente hacerlo en cakephp 3 solo que al momento de generar el archivo como contenido me sale lo siguiente:

    Notice (8): Undefined variable: invoice [APP/Template/Pdf/view.ctp, line 3]
    Notice (8): Trying to get property of non-object [APP/Template/Pdf/view.ctp, line 3]
    Notice (8): Undefined variable: invoice [APP/Template/Pdf/view.ctp, line 4]
    Notice (8): Trying to get property of non-object [APP/Template/Pdf/view.ctp, line 4]

    sabes que podria ser?

    • Edson Mollericona Marín

      Hola Mauro, lo que pasa es que debes crear el directorio Pdf dentro del directorio correspondiente al controlador que estas implementando la generación de PDF, por ejemplo src/Template/Users/pdf/view.ctp o también en un layout src/Template/Layouts/pdf/default.ctp puedes revisar la documentación correspondiente para la versión 3 del framework https://github.com/friendsofcake/cakepdf/tree/3.0 . Por favor si logras hacerlo funcionar para CakePHP 3 notificamelo 8-) Saludos !!!

    • Mauro Arroyo

      Hola Edson ! FUNCIONO! en version cakephp 3 con gusto te paso el Proyecto, solo que ahora me salio algo que no encuentro por ningun lado y es el darle formato al pdf por que se mira horrible no se si sabes como hacerlo?
      un saludo!

      • Edson Mollericona Marín

        Hola Mauro, me alegra que te haya funcionado, por favor ponte en contacto conmigo AQUÍ así resolvemos el detalle de formato que me indicas. Saludos!!!

  • Mannu

    Hola, en el paso 6 creamos el archivo default.ctp o layout.ctp… y he seguido todo pero al hacer click no me da nada…. gracias espero me ayudes..

    • Edson Mollericona Marín

      Hola Manuel, acabo de corregir ese paso y es default.ctp, gracias por ver ese detalle. Yo he probado paso a paso 2 veces con CakePHP 2.x y genera el archivo PDF sin problemas, puedes apoyarte del código que comparto. Saludos!!!

    • Manuel

      Hola…. me genera la ruta pero al hacer click no me muestra la ventana de descarga, donde podria estar haciendo mal.. Me podrias ayudar…Gracias Edson

      • Edson Mollericona Marín

        Hola Manuel, con que versión de CakePHP lo estas implementando, por ahora el tutorial abarca la versión 2.x espero ya pronto agregar los pasos para la versión 3. También tienes el código del repositorio que comparto al final del artículo. Saludos!!!

    • Manuel

      Hola, estoy utilizando la version 2.4.5, lo estoy adaptando a un codigo que deseo implementar el pluguin siguiendo tu repositorio de ayuda…de a..ntemano gracias Edson.

      • Edson Mollericona Marín

        Hola nuevamente Manuel, si seguiste todo el tutorial paso a paso tal vez el problema que tienes es ajeno a la implementación de este plugin dentro de tu proyecto, como bien te comente lo he implementado 2 veces desde cero y me genera el plugin sin ningún problema, primero intenta implementarlo desde un proyecto limpio y así te vas convenciendo del funcionamiento para después implementarlo en tu proyecto y vayas depurando de a poco. Saludos!!!

    • Manuel

      Hola, ok lo voy hacer desde uno limpio… de antemano graciass……

    • Mannu

      Hoolaa…. Gracias edson ya pude ver donde esta mi error… nuevamente gracias por el aporte….Ahora desearia indexar varias tablas para generar un reporte…. de antemano gracias..

  • German

    hola le podre definir que seccion del html es la que quiero exportar a pdf ? saludos

    • Edson Mollericona Marín

      Hola German, mas bien gracias a ti por seguir mi trabajo, respecto a tu duda si puedes definir la sección que desees siempre y cuando lo hagas en tus vistas dentro del directorio pdf que definimos en el tutorial. Saludos!!!

  • Anthony Ulloa

    Buenos Días!
    seguí los pasos al pie de la letra, guiándome de tu repositorio que descargue, sin embargo al darle click al botón para descargar el pdf no pasa nada, solo me dirige al enlace del pdf (localhost/proyecto/users/view/1.pdf) sin que salga la ventana para descargarlo. Estoy utilizando la versión 2.6.1.
    Será acaso por el isAuthorized?
    Saludos

    • Edson

      Hola Anthony, dudo mucho que influya la parte de autenticación porque al final si te das cuenta estas trabajando bajo una misma accion dentro de tu controlador, de todas formas quita por un momento el trabajo con el componente de autenticación y prueba si funciona así siguiendo los pasos del tutorial. Saludos!!!

      • Anthony Ulloa

        ya pude lograr que me descargue el pdf, tuve que agregar este componente en el AppController: public $components = array(‘RequestHandler’); y comente //define(‘DOMPDF_ENABLE_REMOTE’, true) ya que me generaba varios errores.
        Ahora el problema es que al descargar el archivo no me lee los estilos :/
        Me guié de este video https://www.youtube.com/watch?v=Ab4ohs11dxE, pero en el video si le lee los estilos.
        Seguiré intentando. Saludos!

        • Edson

          Hola nuevamente Anthony, evidentemente lo que faltaba era llamar al componente RequestHandler, acabo de actualizar el paso 5, gracias por fijarte en ese detalle, respecto a los estilos eso pasa justamente por la linea que estas comentando, quizá tus otros errores se deba a otro detalle ajeno a esa linea, revisa bien y cuéntame cómo te fue. Saludos 8-)

          • Anthony Ulloa

            Hola Edson, ya pude arreglar el error de los estilos y era que yo llamaba al boostrap.min como hoja de estilo y eso me generaba varios errores, así que tuve que crear una hoja de estilos donde solo copie los estilos que usaba del boostrap.min y ahora va todo bien!! :D
            Gracias por tus videotutoriales, aprendí mucho y aún sigo aprendiendo.
            Saludos.

          • Edson

            Me alegra que lo hayas solucionado Anthony. Saludos y no te pierdas los próximos artículos en mi blog 8-)

  • Mauro Arroyo

    Hola Edson soy yo de Nuevo no me funciona llamar asi la hoja de estilos nose por que :/ simplemente no da estilos, lo soluciono poniendole arribe la etiqueta en el view del pdf solo que quiero poner una imagen y por mas que intento no puedo xD tienes alguna idea o lo que este mal ?

    • Edson

      Hola nuevamente Mauro, revisaste el repositorio que comparto? allí se encuentra todo lo que se realizo en el tutorial y funciona sin problema alguno, intenta implementar la imagen que me mencionas en base al ejemplo que comparto. Saludos !!!

  • Gabriel

    Hola, Edson. Muchas gracias por los tutoriales . Segui todos los paso y dio correcto todos los pasos . Mi consulta es si puedo agregar diferentes estilos … como lo realizo?

    • Edson

      Hola Gabriel, esta buenísimo que te haya servido el tutorial, respecto a tu duda puedes agregar los estilos que desees tanto en hojas de estilos como lo hicimos en el tutorial como también otros layouts, siempre y cuando lo hagas dentro del directorio Pdf, a partir de ello sigues las mismas convenciones del framework. Saludos!!

  • Edson

    Hola Paola, puedes trabajar de manera normal en base a las convenciones del framework y personalizar tu consulta relacionando tablas, el detalle a fijarte es tanto en la vista como en el layout para generar el PDF, debe estar dentro de un subdirectorio ‘pdf’ por lo demás lo va generar normalmente. Saludos!!!

  • Rodrigo Rodas

    Hola Edson que tal? Me sirvio mucho el tutorial, lo pude implementar de la misma forma, ahora mi consulta es la siguiente, necesito sacar reportes en un pdf pero de todos los registros que estan en la bd y tambien debo poder filtrarlos por fecha por ejemplo necesito fecha desde 25/09/2015 hasta 29/09/2015 y me genere el pdf con los registros en ese rango de fecha, me podrias ayudar con esto?

    • Edson

      Hola Rodrigo, me agrada que el tutorial te haya sido útil, respecto a tu duda puedes realizar las consultas que desees bajo las convenciones del framework de manera normal, lo único que debes manejar en el plugin es la configuración en las respectiva acción y tener correctamente situados los archivos de las views y layouts (dentro del directorio pdf), por lo demás puedes trabajar de la misma manera. Saludos!!!

  • merolhack

    Hola Edson,
    cómo podría agregar un Header y un Footer custom al PDF? Estoy utilizando la librería TCPDF.
    Saludos!

    • Edson

      Hola, independientemente de la librería que utilices puedes agregar un header y footer desde el layout que se encuentra en el directorio pdf, tal como lo harías con CakePHP de manera normal. Saludos!!!

  • Martín Escalante Hughes

    Hola Edson! Me parece muy interesante tu web y la manera en que explicas todo. Mira tengo una cuestión, quien saber si este plugin me podrá servir para armar un carnet? O sea, con los datos de la base de datos armar el PDF y adjuntarle una imagen desde algún directorio. Saludos

    • Edson

      Hola Martín, podrías sacar algo similar a un carnet con css y generar la vista como cualquier otra, no he probado si genera correctamente una imagen, sería cuestión de que tu lo pruebes. Saludos.

  • Edson

    Hola Frank, quizá estás instalando la rama para 3.x en tu versión 2.x, vé al repositorio del plugin y en la opcion branch selecciona la 1.0 por lo que vi esa rama es para implementar el plugin con CakePHP 2.x, me fije y es algo que modificaron desde su repositorio. Ya modifique esa parte en el tutorial. Saludos!!!

    • Frank Graphic

      Hola de nuevo Edson, descargue la versión 1.0 como me lo sugeriste y seguí el tutorial paso por paso en repetidas ocasiones pero el pdf no se me genera, me envía a una pagina con una codificación y cada que la actualizo cambia, te adjunto una imagen con lo que me aparece, espero me puedas ayudar. Saludos

      • Edson

        Frank la verdad tal como me lo muestras en la captura de imagen, nunca me había sucedido, voy a darme chance en estos próximos días para probarlo nuevamente. Por último sugerirte que revises el repositorio que comparto al final de la lección y revisar si te funciona, quizá es solo un detalle que se te esta yendo y también intenta hacerlo con la última versión del framework en la rama 2.x . Saludos

        • Frank Graphic

          Hola Edson, he estado consultando respecto al tema y por lo que he leído se me están generando correctamente el pdf pero el navegador me lo esta reconociendo como un html y por eso me muestra esa codificación, en el momento me encuentro trabajando con cake 2.5 y el documento que adjuntaste es versión 2.7 y ese si me funciona correctamente, me podrías ayudar a migrar mi proyecto a 2.7 para mirara si tal ves es la versión del cake, la verdad no se como hacerlo y me da miedo dañar el proyecto que va en un 80% mas o menos de avance. espero me puedas ayudar, mil gracias por estar atento. Saludos!!!

        • Frank Graphic

          Hola Edson, me sirvió mucho tu ayuda, la solución fue efectivamente la versión del cake, me migre a la versión 2.7 y el plugin funciona perfectamente, la verdad no se porque con cake 2.5 no me funcionaba del todo. El código que te envié es efectivamente un pdf solo que el navegador no lo reconocía como pdf sino como html y por eso se mostraba la codificación. Muchas gracias por el apoyo, Saludos!!

          • Edson

            Que bueno que ya lo solucionaste, a mi también me parece extraño que no te hay funcionado con la versión 2.5 de todas formas fue útil que hayas resuelto tu duda con el repositorio del ejemplo que comparto 8-) Saludos!!!

          • Frank Graphic

            Hola Edson, logre solucionar el problema de raíz, el problema no estaba en la versión de cakephp. El problema estaba en el cierre del php tanto en el controlador como en el modelo ” ?> “, adjunto una imagen para que quede mas claro, espero que te sea de utilidad en algún momento. Saludos!!!

  • Jean Manzo

    hola Señor Edson, una consulta: ¿Como podría usarlo con Dompdf?

    • Edson

      Hola Jean, es el mismo procedimiento lo único que haces es cambiar la librería que genera el PDF. Saludos!!!

  • Fernando de Souza Arantes

    Edson hola, estoy usando CakePHP 3 y el plugin de este tipo en el tutorial y aún así ha gustaría un error saber si usted tiene alguna idea de quién podría ser este error.

    • Edson

      Hola Fernando, que error es el que te genera?

  • Fernando de Souza Arantes

    Edson hola, estoy usando CakePHP 3 y el plugin de este tipo en el tutorial y aún así ha gustaría un error saber si usted tiene alguna idea de quién podría ser este error.

    • Edson

      Fernando revisaste si estás colocando en el directorio correcto la vista y el layout para generar el PDF?

    • Manuel Araujo

      te ayudaron con el error.?? tengo el mismo problema

      • Edson

        Hola Manuel, he actualizado el tutorial para la versión 3 del Framewor, existen unos leves cambios, espero con eso ya puedas implementarlo. Saludos.

  • Fernando de Souza Arantes

    Hola, con obras TCPDF, sin embargo, como bloqueo wkhtmltopdf y falla.

    Voy a probar con DOMPDF y MPDF ver.

  • Enrique Barrero Ligero

    Buenas tardes Compañero Edson. Su tutorial es genial, muy facil de leer y entender. No obstante me encuentro con algunos problemas debido a a la estructura de mi página. Te cuento un poco.

    1) Tengo un botón en la vista de Pacientes que me debe permitir exportar el historial medico de ese paciente.
    2) El historial médico esta formado por una serie de entradas de tipo MetaString.
    3) Tengo el método encargado de imprimir el pdf en el controlador Metastring, el método se llama “printreport”
    4) Después de exportar el PDF es necesario volver a la vista del Paciente, más bien nunca debería irse de allí.
    5) El HTML del PDF lo he hubicado en: Template/Metastring/pdf/printreport.ctp
    6) El layout base para el pdf esta ubicado en: Template/Layout/pdf/default.ctp

    Ahora el código:

    1) Bootstrap.php

    Plugin::load(‘CakePdf’, array(‘bootstrap’ => true, ‘routes’ => true));
    Configure::write(‘CakePdf’, [
    ‘engine’ => [
    ‘className’ => ‘CakePdf.WkHtmlToPdf’,
    ‘binary’ => ‘/usr/local/bin/wkhtmltopdf’,
    ‘options’ => [
    ‘ print-media-type’ => false,
    ‘outline’ => true,
    ‘dpi’ => 96
    ],
    ],
    ‘download’ => true
    ]);

    2) Metastring Controller

    public function initialize()
    {
    parent::initialize();
    $this->loadComponent(‘RequestHandler’);
    $this->_validViewOptions[] = ‘pdfConfig’;
    }

    public function printreport($patient_id = null) {
    $this->loadModel(‘Patients’);
    $patient = $this->Patients->get($patient_id, [
    ‘contain’ => [‘Users’]
    ]);

    $name = str_replace(‘ ‘, ”,$patient->user->user_name . $patient->user->user_lastname);

    $this->pdfConfig = array(
    ‘download’ => true,
    ‘filename’ => ‘report_’ . $patient_id .’.pdf’
    );

    //TODO: Set content her
    }

    Aun no le he pasado contenido al PDF, pero eso es irrelevante porque ni siquiera llega al metodo =(

    3) El enlace
    Html->link(__(‘Export to PDF’), [‘controller’ => ‘Metastrings’, ‘action’ => ‘printreport’, $patient->id, ‘_ext’ => ‘pdf’]); ?>

    4) Las rutas (Sospecho que es aquí donde tengo el error)

    Router::scope(‘/metastrings’, function ($routes) {
    $routes->extensions(‘pdf’);
    $routes->connect(‘/printreport/*’, [‘controller’ => ‘Metastring’, ‘action’ => ‘printreport’]);
    $routes->fallbacks(‘InflectedRoute’);
    });

    El error

    Al pulsar el enlace me dirige a esa dirección /JSG/metastrings/printreport/a8f55aa4-737a-4622-b801-41bf44f1d04b.pdf donde JSG es el nombre del proyecto y el id del paciente esta bien formado.

    El error lo adjunto en una imagen

    No se si se habrá subido la imagen pero el contenido es este:

    Fatal error: [CakeViewExceptionMissingTemplateException] Template file “Error/pdf/error500.ctp” is missing. #0 /home/enrique/Proyectos/LinkCE/eHealth/Source/vendor/cakephp/cakephp/src/View/View.php(584): CakeViewView->_getViewFileName(‘error500’) #1 /home/enrique/Proyectos/LinkCE/eHealth/Source/vendor/friendsofcake/cakepdf/src/View/PdfView.php(117): CakeViewView->render(‘error500’, ‘error’) #2 /home/enrique/Proyectos/LinkCE/eHealth/Source/vendor/cakephp/cakephp/src/Error/ExceptionRenderer.php(358): CakePdfViewPdfView->render(‘error500’, ‘error’) #3 /home/enrique/Proyectos/LinkCE/eHealth/Source/vendor/cakephp/cakephp/src/Error/ExceptionRenderer.php(327): CakeErrorExceptionRenderer->_outputMessageSafe(‘error500’) #4 /home/enrique/Proyectos/LinkCE/eHealth/Source/vendor/cakephp/cakephp/src/Error/ExceptionRenderer.php(329): CakeErrorExceptionRenderer->_outputMessage(‘error500’) #5 /home/enrique/Proyectos/LinkCE/eHealth/Source/vendor/cakephp/cakephp/src/Error/ExceptionRenderer.php(194): CakeErrorExceptionRenderer in /home/enrique/Proyectos/LinkCE/eHealth/Source/vendor/cakephp/cakephp/src/Error/ErrorHandler.php on line 156

    Si creo una plantilla en Template/Error/pdf/error500.ctp

    El error pasa a ser
    Esta página web no está disponible

    ERR_INVALID_RESPONSE

    Como si no encontrase la página, no se si el nombre de las plantillas, o las rutas o todo esta mal

    Agradecería enormemente todo en lo que me puedas ayudar u orientar. Gracias.

    Actualizo: Si que llega al metodo pero parece que no es capaz de redirigir a la plantilla o al contenido o algo

  • Enrique Barrero Ligero

    Buenas Noches.

    Antes postee una duda, imagino que estará pendiente de validar.

    El problema venia dado por el contenido del layout al parecer me falla cuando intento poner una imagen.

    Estoy usando este código: Html->image(“general/logo.svg”); ?>

    El problema parece ser debido a que no se admite el uso de imagenes vectoriales, por lo que habría que usar archivos png o jpg

    Me hubiese gustado responder esto sobre mi anterior consulta pero al no estar validad no es posible. Igualmente Gracias, espero que en adelante no tenga mas fallos :) si los tuviese volveré por aqui jeje

    • Edson

      Hola Enrique, te cuento que muchas personas me han comentado que tienen problemas al generar imágenes para exportarlos con el plugin. Por favor si encontraste la solución te agradecería que lo compartas para que así muchos que se quedaron con esa cuestión ya lo puedan solventar. Saludos y gracias por seguir mi trabajo.

      • Enrique Barrero Ligero

        Buenas. El Problema que yo me he encontrado radica en el formato, la imagen debe tener formato png y supongo jpeg, pero no svg u otros formatos vectoriales.

        Por otro lado es necesario formar la ruta como absoluta, para ello basta con poner [‘fullBase’ => true] igual que cuando se cargan archivos css.

        Saludos!

        • Edson

          Gracias por el aporte, voy a destacar este comentario. Saludos!

  • Enrique Barrero Ligero

    Buenos días Edson. En cakephp 3, con el motor WkHtmlToPdf, ¿¿sabes como hacer para eliminar los margenes?? Me he matado a buscar y nada me funciona. El HTML no aprovecha el 100% de la imagen. Y al no ser un pdf destinado a impresión no necesito que haya margenes.

    Gracias.

  • Monica

    Buenos dias Edson implemente el tutotial para la version 2.x
    y me dice lo siguiente: Se ha producido un error al cargar el documento PDF. y Doy a cargar de nuevo y nada

    • Edson

      Hola Monica, qué tal? revisaste el repositorio que comparto con la versión 2.x del plugin?? me parece extraño que te muestre ese error, puedes revisar también si estas colocando la plantilla en el lugar correcto. Saludos!!!

  • Frank Graphic

    Hola Edson, una pregunta he tratado por muchos medios de lograr poner un header y el footer a mi pdf y que se repita en todas las paginas pero no lo he logrado, cabe resaltar que los datos que estoy imprimiendo son de una tabla la cual cuando llega a superar la medida de la hoja principal automaticamente me crea otra pagina con los datos restantes pero sin el header ni el footer que les he creado, depronto sabes la solución?

    Espero me puedas ayudar. Muchas gracias.

    • Edson

      Hola Frank, el header y el footer lo estás creando en base al layout del pdf? revisa ese detalle. Respecto a las medidas hay opciones del plugin que te permiten configurar el tipo de hoja, si revisas la documentación lo encontrarás de inmediato ya que es algo muy importante al momento de generar un archivo pdf. Espero que te vaya bien con lo que te dije, de todas formas te invito a ser parte del equipo de Slack, ya somos 30 y es una manera de compartir conocimiento y exponer preguntas entre todos los interesados en el tema, si te interesa responde con el correo electrónico que deseas que mande la invitación. Un saludo!!!

      • Frank Graphic

        Claro que si me interesa hacer parte del equipo Edson muchas gracias por la invitacion este es mi correo afflsg@gmail.com , y respecto a lo del header y footer estoy creando la plantilla en view/layouts/pdf/default.ctp este es el codigo que tengo

        Html->charset(); ?>

        fetch(‘title’); ?>

        <link rel="stylesheet" type="text/css" href="” media=”all” />

        <img src="”>

        25

        fetch(‘content’); ?>

        el header me aparece correctamente pero solo me aparece en la primera pagina. En algunos tutoriales he encontrado que es necesario ponerles position : fixed, y un top:0 pero aun asi no logro que se repita en las demás paginas.

        llevo bastante tiempo indagando sobre este problema, espero me puedas ayudar, Muchas gracias Edson

        • Edson

          Hola nuevamente Frank, disculpa pero por este medio se me hace difícil observar tu código por razones de identación y colores. De todas formas primeramente puedes intentar mostrar los datos dinámicos en tu archivo PDF sin estilo ni nada para así estar seguro que lo estas enviando correctamente, a partir de ello si todo te muestra de manera correcta entonces ya es un asunto de estilos, otro punto que puedes tomar en cuenta es que si estas usando algún framework frontend como Bootstrap ya que eso puede estar sobrescribiendo tus estilos sin tomar en cuenta como tu lo quieres mostrar (Recuerda, son hojas de estilo en cascada) espero te sirva en algo todo lo anterior mencionado. Nos vemos en Slack. Saludos!

  • Paola

    Hola Edson, interesante la implementación para pdf, me gustaria saber si se podria hacer lo mismo para generar reportes en excel.

    • Edson

      Hola Paola, el plugin solo te va para PDF, no encontré uno para exportar a XLS pero en el equipo de Slack puse un pequeño Snippet para alguien que también necesitaba implementarlo ya sería parte tuyo intentar implementarlo, si te interesa puedes indicarme tu correo electrónico para enviarte la invitación al equipo de Slack, es gratuito. Saludos!!!

  • Edson

    Listo! invitación enviada. Saludos.

  • JUAN MANUEL ANTON BERNAL

    Hola amigo, todo bien va pero como seria con los reportes dinamicos, con dinamicos me refiero por ejemplo un for que me genera un detalle de varios registros??, Ya que solo arroja reportes estaticos saludos amigo gracias

    • Edson

      Probaste implementarlo como tu me lo indicas? no tendría que existir problemas en generar el documento. Saludos!

      • JUAN MANUEL ANTON BERNAL

        pero como seria si tomo como ejemplo, el sistema restaurante OrdenItems para tener el detalle de lo que pidio un cliente =) View/OrdenItems/pdf/ ?? porque cuando entro a una ordenitem entro a traves de la orden, saludos amigo

        • Edson

          Hola Juan, desde la acción que te genera la orden puedes configurar la generación del PDF, intentalo. Saludos!

  • Paola

    hola Edson, estaba haciendo una consulta con los pedidos realizados en una deteminada fecha y los busco mediante un buscador y me despliega varios resultados dentro de una tabla y esto se muestra en la vista index. Mi duda es como lo puedo exportar en pdf mediante el index?. seria lo mismo que la vista View o parecido? o se sigue otro procedimiento

    • Edson

      El mismo procedimiento Paola. Saludos!!!

  • paola toledo

    Hola Edson, bueno como hago para poner esto

    $this->pdfConfig = [
    ‘orientation’ => ‘portrait’,
    ‘filename’ => ‘User_’ . $id . ‘.pdf’
    ];
    dentro del search, como tendria que remplazar el $id para que no salga los datos de un solo registro, sino que salga todos los datos de la busqueda que se realizo.
    Como puedo hacer esto, como puedo resolverlo

    • Edson

      Hola Paola, disculpa pero si me mandas el mismo mensaje reiteradamente el sistema lo va tomar como spam y ya ni podré leer tus comentarios. Agradezco tu comprensión. Saludos.

  • JUAN MANUEL ANTON BERNAL

    Hola amigo Edson, una consulta como seria si en ves que el pdf me muestre el codigo por el $id

    es decir en esta parte

    $this->pdfConfig = array(

    ‘download’ => true,

    ‘filename’ => ‘cliente_’ . $id .’.pdf’

    );

    me muestre el nombre del cliente =)? saludos

    • Edson

      Utiliza esta sentencia $this->User->find(‘first’, $options) que también se encuentra en el tutorial el cual recuperas el usuario, a partir de ello ya tienes el nombre o todos los datos de dicho usuario y lo colocas en vez del $id. Saludos!

  • Martin Escalante

    Hola Edson! Cómo estás? Me gustó mucho este aporte, me va a servir muchísimo. Quisiera saber si puedo generar para una misma vista varios archivos pdf que muestren cosas distintas.. No sé si me explico bien. Por ejemplo, en tu caso armaste un pdf con los datos personales del usuario… Pero supongamos, que ademas quisiera otro pdf que me muestren sus post asociados, y otro pdf que me muestren sus compras.. O sea, ésto es limitado? por una acción en el controlador solo un pdf? O podría generar varios pdf con diferente contenido, usando la misma acción view, y armando en la carpeta /user/pdf/… los deferentes reportes que necesite.. De ser posible éste planteamiento que hago, por favor podrías darme una ayuda para poder llevarla a cabo? Además creo que le sería muy útil a muchas personas. Saludos Edson y muchas gracias!

    • Edson

      Hola Martin, me alegra que este tutorial te sea útil, me esmere mucho en desarrollarlo y me alegra que haya teniado una gran respuesta. Respecto a tu consulta: desde luego que no tienes límites, puedes crear las acciones que desés con los PDFs que quieras, solo debes seguir los pasos del tutorial, imagina que estas implementando la acción para una vista por ejemplo para recuperar datos asociados, una vez que tengas los resultados correctamente procedes a implementar los pasos del tutorial. Saludos!

  • Manuel Araujo

    Hola Edson muy bueno el tutorial, lo he seguido paso a paso sin colocar el layout, pero me arroja el error que adjunto en la imagen. Cabe destacar que no le puse el layout lo hice sin eso para probar pero igual no me deja hacer nada.

    Por otra parte: al escribir esto en composer.json:
    “require”: {
    “friendsofcake/cakepdf”: “3.0.x-dev”
    }

    y actualizar el composer en la cosola, me arroja el siguiente mensaje:

    C:xampphtdocsejemplo>composer update
    Loading composer repositories with package information
    Updating dependencies (including require-dev)
    Your requirements could not be resolved to an installable set of packages.

    Problem 1
    – The requested package friendsofcake/cakepdf 3.0.x-dev exists as friendsofcake/
    cakepdf[1.0, 1.0.1, 1.0.2, 1.0.3, 1.0.x-dev, 3.0.0, 3.1.0, 3.1.1, 3.1.2, 3.2.0,
    dev-master, dev-master-app-view, dev-master-cleanup] but these are rejected by y
    our constraint.

    entiendo que son las dictintas versiones o paquetes que se pudes intalar de CakePdf pero aun asi intente con todas, y me sigue arrojando el error que se muestra en la imagen.

    De verdad me gustaría que ayudes, tengo ya varios días con esto

    • Edson

      Hola Manuel, acabo de implementar nuevamente el plugin con la versión 3.2.11 del framework, no tuve problema alguno. De todas formas he actualizado el tutorial ya que hubo leves cambios, puedes revisarlo pero de todas formas te digo los puntos que debes tomar en cuenta:
      – Puedes hacer la instalación del plugin directamente con la sentencia: composer require friendsofcake/CakePdf
      – El componente RequestHandler ya viene cargado por defecto dentro de AppController.php
      – Ahora ya no es necesario definir la configuración del plugin en el método initialize() sino directamente desde la acción que vas a implementar el plugin, en este caso la vista view() para ello solo es necesario utilizar el método viewBuilder() el cual este hace referencia al layout que hemos creado y seguido de eso las opciones para la generación del PDF.

      Espero con eso ya puedas implementarlo sin problemas.

      Saludos!

      • Edson

        Adjunto también la imagen donde se muestra que la instalación del plugin con Composer se hizo de manera correcta

        • Edson

          Acabo de probar también con la versión 2.8.5 que es el último release de la rama 2.x y siguiendo el tutorial funciona sin ningún problema 8-)

  • Uriel Garcia

    Buenos tutoriales tanto los tu pagina como los de youtube
    Mi problema es en 2.x cuando pongo el boton ya en el paso 7 y ejecuto la pagina me aparece que la variable no ha sido definida.
    como nota: estoy trabajando en una carpeta con sus vistas llamada proyectos en vez de users que usas en este tutorial y cambié todas las referencias de users, User o user de tu codigo

    Undefined variable: proyecto [APPViewProyectosindex.ctp

    • Edson

      Hola Uriel, revisa bien por favor ya que evidentemente no tienes la definición de esa variable, eso escapa de la funcionalidad del plugin. Saludos.

  • Johander Hurtado

    me da este error estoy usando la version 2x y yo uso datos en vez de users
    Error: Cannot redeclare DatosController::$components
    File: C:xampphtdocscakephpappControllerDatosController.php
    Line: 39

  • TatianaMursh

    Hola Edson, inicio con un agradecimiento a tus tutoriales eres un excelente profesor, he realizado el tutorial de cakepdf y me sale todo bien exceptuando por un signo de interrogacion que siempre sale en la parte superior izquierda del documento y el cual no he podido quitar, no se a que se debe, tienes alguna idea o te ha pasado? Muchas gracias de antemano.

    • Edson

      Hola Tatiana, aprecio muchos tus palabras. Respecto a tu duda: unicamente es un carácter que está demás en tu código, revisa bien el código de tu vista que se te está escapando un cierre incorrecto o algún carácter puesto sin querer. Saludos.

  • JUAN MANUEL ANTON BERNAL

    Hola amigo Edson felicitaciones por los tutoriales, realmente una labor para aplaudir, tenia una consulta cuando yo sigo el mismo procedimiento al final cuando presiono el boton de exportar a pdf me muestra el siguiente error, busque con el debug pero la unica señal que me muestra de error es la ruta o al menos eso creo.

    • Edson

      Hola Juan, para el caso de CakePHP 3 revisa bien el paso 7 ya que siguiendo los pasos del tutorial no tendrías que tener problemas en generar el archivo. Puedes apoyarte también de los repositorios que comparto al final del tutorial. Saludos!

  • Gibrain Joel Hernández Santos

    Hola Edson, excelente tus apotes; he seguido su curso ; ahora tengo la duda (necesidad**) de generar un pdf , pero para ticketar o impresora fiscal , osea con medidas de 7cm ancho x Xcm de largo, podria realizar algo con CakePDF?, Saludos.

    • Edson

      Hola Gibrain, en la documentación del plugin puedes encontrar todas las configuraciones del mismo, entre ellos definir la medida del documento a exportar. Saludos!

  • alejduin

    Hola Edson, como estas? primero que nada quiero darte las gracias por todos estos aportes tan útiles que realizas, son de mucha ayuda. Quería hacerte una consulta, tengo un proyecto con cakephp 2.x, seguí este tutorial y he logrado hacer la exportación de unos reportes de transacciones de mi aplicación en cake, hasta aquí todo muy bien, pero cuando mi reporte tiene una cantidad mayor de registros al parecer excede la capacidad del plugin, o es algún problema con la cantidad de memoria que se ocupa para los datos, cualquier ayuda o sugerencia que puedas brindarme para solucionar este problema te lo agradecería inmensamente. De nuevo gracias por tantos aportes geniales.

    • Edson

      Hola alejduin, no se con que motor para renderizar los archivos es con el que trabajas pero por qué no pruebas con wkhtmltopdf, me parece que te puede rendir mejor. Saludos.

      • alejduin

        Buen dia, gracias por responder, estoy usando MPDF porque wkhtmltopdf me indica que es necesario la creacion de unos archivos binarios, estoy trabajando en mac, y no entiendo muy bien en que consiste este requerimiento de la libreria wkhtmltopdf.

        • Edson

          No necesitas crear nada, ellos te ofrecen los instaladores de acuerdo al sistema operativo con el que vas a trabajar, opcionalmente puedes probar con DomPDF y a ver como te genera. Saludos.

  • Liliana Zapata

    https://uploads.disquscdn.com/images/6d047e041c4966f7851391927d9b8e821e16733b77e64f406d585a9764070c84.png Hola Edson,
    Buenas noches

    Realicé todos los pasos pero al momento de dar clic en exportar me aparece esto:

    ¿Qué crees que pueda ser?

    Saludos!

    • Edson

      Hola Liliana, me parece extraño que te muestre eso, si te fijas el tutorial fue recientemente actualizado con las 2 versiones del framework, por favor revisa el código que comparto para que te sirva de apoyo. Saludos.

  • jose

    Hola Edson, como estas? quiero agradecerte por tan valiosa información, he seguido los pasos para generar que se force la descarga del pdf, mi pregunta es como puedo hacer para el pdf se pueda visualizar en el navegador. he visto la documentación en https://github.com/FriendsOfCake/CakePdf pero no lo entiendo si me pudieras orientar seria genail.. muchas gracias..

    • Edson

      Hola Jose, como te decía: puedes setter la opcion download como false dentro de la configuración del plugin. Saludos.

  • Juan Rivera

    Hola buen dia. Primero felicitaciones por el tutorial, esta muy bueno asi como tus videos. Me sirven de mucho ahorita que estoy haciendo una aplicacion CRUD sencilla en cakephp3 para ir aprendiendo. Es para captura de equipo scrap.

    Tengo una pregunta que no precisamente es de cakepdf.

    Tendras algun tutorial para mandar correo con cakephp3. En especifico quiero mandar desde outlook un archivo de excel que genero con el plug-in de PHPExcel. Pero no he encontrado un tutorial en el que me pueda orientar.

    Gracias de antemano por tu tiempo

    • Edson

      Hola Juan, no tengo un tutorial por el momento pero lo tomaré en cuenta para crearlo. De todas formas te paso la documentación del framework en el que puedes enviar emails de manera sencilla http://book.cakephp.org/3.0/en/core-libraries/email.html. Espero te sea útil. Saludos.

  • Juan Rivera

    Hola buen dia.

    Ahora si una pregunta de CakePdf. En el tutorial veo que el archivo pdf es de un solo usuario. Mi pregunta es como generar el archivo pdf de varios registros en la base de datos?

    Me explico, en un proyecto de equipo de scrap que estoy desarrollando genero un archivo de excel en el cual saco el listado de todos los registros de una tabla en una base de datos.
    Quisiera generar ese mismo listado pero en un archivo Pdf para poner un boton con la opcion PDF.

    Estoy usando variables de sesiones para pasar el array en el cual tengo los datos de la tabla para poderlo pasar al controlador que se encarga de la configuracion del archivo de excel.

    En la vista index.ctp tengo el formulario de captura de equipo scrap y tambien ahi despliego los registros que tengo en la tabla. Como uso paginacion, use variables de sesion para poder guardar la lista completa de registros porque de otra forma el archivo de excel que genero con PHPExcel me toma solos los registros de la paginacion y no el listado completo.

    Mi pregunta es como puedo usar el array que ya tengo para generar el archivo pdf? Si me puedes otrientar.

    Gracias por tu ayuda y tiempo

    • Edson

      Es la misma idea Juan, puedes generar los registros que desees. Saludos.

  • Jesús Herrera

    Buenas tardes,

    Una duda, estoy intentando colocar un header que se repita en todas las páginas del PDF, este header cambiará de contenido según los datos de la Entidad (Igual que en el ejemplo de esta página al ver a un usuario particular) por lo que no puedo colocarlo en archivo estático.

    He intentado cambiar la configuración del PDF dentro de la Vista y del Layout ( Usando $this -> pdfConfig = […] ) en vez de hacerlo en el Controlador pero no funcionan los nuevos cambios.

    ¿Existirá la posibilidad de cambiar la configuración del plugin dentro de la vista o layout?

    Muchas gracias.