barra de progreso mientras se genera un pdf

332 views
Skip to first unread message

JGHA1984

unread,
Jul 22, 2009, 10:45:50 PM7/22/09
to CakePHP en Español
Buenas noches amigos.. he estado buscando la manera de realizar una
barra de progreso con porcentaje que indique cuanto le falta para
terminarse de generar el archivo pdf..

he estado leyendo sobre las funciones ob_start() y otras..flush() ,
ob_flush();

yo utilizo la clase tcpdf para crear los pdf.. con su layout que
posee el header para eso..

pero hasta ahi puedo llegar.. no se que mas realizar..

la idea de esto es que tengo que hacer reportes con datos desde
postgres.. pero se tarda bastante.. ya que hay reportes de hasta mas
de 1000 pag..

Gracias de ante mano.. si alguien pudiera echarme una manito y
ayudarme o dame idea de como realizarlo...

Daniel Zelisko

unread,
Jul 23, 2009, 5:02:54 AM7/23/09
to cakep...@googlegroups.com
JGHA1984 escribió:

> Buenas noches amigos.. he estado buscando la manera de realizar una
> barra de progreso con porcentaje que indique cuanto le falta para
> terminarse de generar el archivo pdf..
>
> he estado leyendo sobre las funciones ob_start() y otras..flush() ,
> ob_flush();
>
> yo utilizo la clase tcpdf para crear los pdf.. con su layout que
> posee el header para eso..
>
> pero hasta ahi puedo llegar.. no se que mas realizar..
>

Hola,

si tienes posibilidad de hacerlo en segundo plano (usando cron) yo te
recomendaría esto. entonces cuando un usuario solicita generar un
informe, la acción se guarda y un script que ejecutas con cron la
procesaría y enviaría por ejemplo un email cuando esté listo.

muchos sistemas de conversión de vídeos etc usan algo parecido.

otra cosa es ejecutar un proceso en tu script y "desconectarlo" (detach)
para que se sigue ejecutando en el segundo plano. este proceso tendría
que tener un id único y podría grabar si estado cada cierto tiempo.

entonces le sacas al usuario una página que diga "tu pedido se está
procesando" y haces una llamada tipo /scripts/estados/ID_DE_TU_SCRIPT
con ajax que tendría que devolver el estado del script (10%, 20% etc..)
lo cual puedes usar para hacer una barra de progreso.

bueno, espero haberte ayudado o al menos haberte dado alguna que otra idea.

--
Daniel Zelisko
personal: http://daniel.zelisko.net
development: http://blog.devayd.com

JGHA1984

unread,
Jul 23, 2009, 8:44:40 AM7/23/09
to CakePHP en Español
Saludos Daniel, Gracias!! Tendre en cuenta lo que me dijiste.. capte
la idea..

jordicakephp

unread,
Jul 23, 2009, 10:00:47 AM7/23/09
to CakePHP en Español
Hola JGHA,

Yo me he vi en una situación parecida e hice algo que quizás pueda
servirte para salir del paso. La solución es esta, más sencillita, sin
tanto por ciento:

http://bin.cakephp.org/view/686082814

La idea es guardarte un gif animado tipo temporizador que te guste de
algún sitio como este (mirando los derechos del archivo, claro,
dependiendo del uso que se le de):

http://www.gifmania.com.es/relojes/esferas-de-relojes/

Cuando lo tengas, lo puedes copiar en algún sitio de tu carpeta /img/
(yo lo guardé con nombre ajax-loader.gif, que, por cierto, era una
barra de carga que estaba muy bien, pero no recuerdo de dónde la
saqué).

La vista que muestras al usuario (la que tiene la barra de carga)
implementa la técnica AJAX polling y pregunta al sistema por el estado
de la generación del archivo. En este ejemplo, el controlador es
nombre_controlador y la acción es preguntar_sistema. Cuando termines
de generar el archivo, puedes activar algún flag para que
preguntar_sistema sepa que ya terminó la generación y pueda actualizar
el div "actualización" con un enlace sobre el que el usuario puede
hacer clic para ir a la página a la que quieres que vaya.

El pero que tiene este invento es que el usuario no sabe qué tanto por
ciento falta para terminar.

Espero que también te pueda servir de ayuda para lo que quieres hacer.
¡Saludos!
> > development:http://blog.devayd.com- Ocultar texto de la cita -
>
> - Mostrar texto de la cita -

JGHA1984

unread,
Jul 23, 2009, 8:14:52 PM7/23/09
to CakePHP en Español
Gracias Jordi.. asi lo tengo jeje.. esa fue la manera mas rapida..
pero la idea de todo esto es que le indique cuanto le falta.. seria un
poco mejor visto.
ya me ha pasado en donde los usuarios le dan para generar el archivos
y sale el gif cargando..... pero se cansan de esperar o creen q se
colgo y cierran la aplicacion..
> > > development:http://blog.devayd.com-Ocultar texto de la cita -

Luis Leiva

unread,
Jul 23, 2009, 8:19:53 PM7/23/09
to cakep...@googlegroups.com
utilzia la variable ReadyState del HttpRequest, normalmente esto se utiliza cuando haces seguimientos a consultas ajax

http://es.wikipedia.org/wiki/XMLHttpRequest

Saludos Cordiales

Luis Enrique Leiva Bazan
Analista Desarrollador Senior Java Oracle JDeveloper
Mail: luis....@mdp.com.pe

MDP Consulting S.A.C.
Las Begonias 2638 - Lince
Tel: 98517-9130

Luis Leiva

unread,
Jul 23, 2009, 8:22:33 PM7/23/09
to cakep...@googlegroups.com
tmb el evento onprogress, que se ejecuta periodicamente indicandote cual es el estado de tu peticion


Saludos Cordiales

Luis Enrique Leiva Bazan
Analista Desarrollador Senior Java Oracle JDeveloper
Mail: luis....@mdp.com.pe

MDP Consulting S.A.C.
Las Begonias 2638 - Lince
Tel: 98517-9130


Reply all
Reply to author
Forward
0 new messages