[Python-es] Como Implementar Python y JasperReport.

Roberto Matarrita rmatarria en gmail.com
Jue Dic 7 16:21:13 EST 2017


Gracias Juan Carlos, ya logré hacer impresiones en JasperReport y
levantarlos desde Python.
Veré el comportamiento una vez que lo ponga en producción.
Realmente es un muy buen reporteador, para confección de reportes en modo
de escritorio y también para web. Lo recomiendo.

Roberto.

El 5 de diciembre de 2017, 21:09, Jean Carlos Rodrìguez via Python-es <
python-es en python.org> escribió:

> Perdon solo por preguntar, porque no pruebas con reportlab la generación
> del pdf, si estás usando pyqt5 te podría dar una mano
>
>
> Sent from Yahoo Mail for iPhone
> <https://overview.mail.yahoo.com/?.src=iOS>
>
> On Monday, December 4, 2017, 5:28 PM, Roberto Matarrita <
> rmatarria en gmail.com> wrote:
>
> Gracias Don Mario por la ayuda y pasó ,lo siguiente.
>
> Como yo estoy probando el proceso en una pantalla PYQT5 , puse ese input
> ahi solo para hacer pruebas.
> Ya no tuve necesidad de poner en un ciclo el proceso, el problema que
> tenía es que más abajo habían unas instrucciones que no había borrado y
> estaban mal escritas y claro, cuando el programa llegaba a ese lugar se
> abortaba. Las quité y todo me está funcionando perfecto. Hice varias
> pruebas y todo bien.
>
> O sea ya se hacer reportes en JasperReport e imprimirlos desde Python a
> modo de escritorio, jajajaja. Y ahí queda el ejemplo para la comunidad, que
> al parecer, hay poco sobre esto.
>
> Gracias de nuevo.
>
> Roberto.
>
> El 4 de diciembre de 2017, 15:32, Mario R. Osorio <nimbiotics en gmail.com>
> escribió:
>
> Yo tampoco soy ningun quinceañero; tengo 55 años. y mas de 35 programando
> ;)
>
> En cuanto al codigo le digo que YO NO HE COMPROBADO PARA NADA EL CODIGO
> QUE UD ME ENVIO, ni lo que yo le recomende, asi que a Ud le dejo comprobar
> lo que le explico.
>
> Primero que nada, al final del programa tiene:
>       webbrowser.open_new(r'file://' + output + '.pdf')
>       os.startfile(filename)
>       os.system(filename)
>
> Hasta donde se, cada una de esas lineas va a intentar abrir el archivo.
> Pruebe Ud. a ver cual es la linea que en definitiva lo esta haciendo y
> elimine los que redundan o son simplemente inutiles.
>
> Esta es mi propuesta (Le dejo a UD probarla y demostrarla):
>
> # ############################## #########################
> input_file = os.path.dirname(os.path. abspath(__file__)) + '/report4.jrxml'
> output = os.path.dirname(os.path. abspath(__file__)) + '/reportes'
> print(output)
> con = {
>     'driver': 'postgres',
>     'username': 'postgres',
>     'password': 'Administra8080',
>     'host': 'localhost',
>     'database': 'municipal',
>     'port':'5432'
> }
>
> while True:
>     x = input("Digite codigo de empleado (ó [SALIR] para terminar): ")
>     if x.lower() = 'salir'.lower():
>       break
>
>     #="8"
>     jasper = JasperPy()
>     jasper.process(input_file, output_file=output,format_ list=["pdf"],
> parameters={'idenifica': (x)},db_connection=con)
>      #os.remove(fname)
>     #subprocess.Popen([file], shell=True)
>
>     #webbrowser.open_new(r'file:// C:\manteminiento\to\reportes. pdf')
>     webbrowser.open_new(r'file://' + output + '.pdf')
>     os.startfile(filename)
>     os.system(filename)
> # ############################## #########################
>
> Los cambios mas notables son las lineas 13 a la 16, pero tambien es
> importante que note la indentacion de las lineas 13 en adelante.
>
> Con los cambios propuestos, el archivo PDF se abr mientras su programa
> vuelve a ejecutar el loop hasta que el usuario intencionalmente introduzca
> la palabra 'salir'.
>
> Y por cierto, y en particular para gallos jugados como Ud y yo, la mejor
> forma que tengo de describir la experiencia con Python es esta:
>
>
>
> Un abrazo!​
>
>
> Dtb/Gby
> =======
> Mario R. Osorio
> A.S. of Computer Programming and Analysis
> Web page: *http;//mario.osorio. solutions
> <http://http%3B//mario.osorio.solutions>*
> Email: *mario en osorio.solutions* <mario en osorio.solutions>
> *Just Choose Python!* <http://www.gentoogeek.org/files/choose_python.pdf>
>
> “If I had asked people what they wanted, they would have said faster
> horses.”
>  ― Henry Ford
>
>
>
>
> <http://goo.gl/t2Hzgo>
>             <https://m.do.co/c/63e2415dab7b>
>
> 2017-12-04 15:48 GMT-05:00 Roberto Matarrita <rmatarria en gmail.com>:
>
> Buenas tardes Don Mario.
> Primero que nada quiero agradecerle enormemente la ayuda que usted me ha
> brindado en este problema de los reportes. A excepción de un brasileño que
> me envió un poco de información, nadie, pero nadie a podido ayudarme con el
> tema de los reportes. Realmente y de todo corazón yo le agradezco toda la
> ayuda. Le comento estoy metido en una bronca grande como decimos por acá en
> Costa Rica. Jjajajajajaja. Estoy diseñando un sistema financiero que me
> contrataron y es bastante grande, lleva una buena cantidad de reportes,
> incluso debo hacer impresiones directas a dos impresoras sin intervención
> de la persona, es decir deben salir directamente a unas impresoras de
> producción. Bueno ya veré como hago eso en su momento. Realmente yo he
> estado toda mi vida en esto, ya tengo 60 años y sigo programando porque me
> gusta mucho. Este lenguaje es nuevo para mi,  he ido aprendiendo mucho,
> poco a poco pero ahí voy.
>
> Tengo un par de preguntas sobre lo que me escribió.
>
> 1. Si es cierto lo que me dice , no se ha terminado de alzar el PDF,
> cuando el programa se termina. Lo que no entiendo es como hacer para que el
> ciclo se termine, ya que usted me indica que debo de incluir dentro de un
> ciclo mi programa. O sea no se en que momento debo disparar la instrucción
> para que este se salga del ciclo.
>
> 2. Me comenta  que estoy abriendo de tres formas diferentes mi PDF.
> Desconozco totalmente este tema, si me guía un poco sobre el tema yo haré
> lo posible por solucionar el problema.
> 3. Finalmente gracias por la recomendación de la clave de la base de
> datos, está buena la observación para futuras publicaciones. Actualmente el
> proyecto lo trabajo en una portátil, fuera del ambiente de producción, el
> cual se encuentra en otro lugar.
>
> Muchas gracias.
>
> Roberto
>
>
> El 4 de diciembre de 2017, 8:22, Mario R. Osorio <nimbiotics en gmail.com>
> escribió:
>
> Buen dia Roberto,
>
> Claro que tiene que salirse. El llamado para abrir el archivo PDF (que por
> cierto, veo que lo estas abriendo de 3 maneras diferentes cuando solo
> necesitas una) es asíncrono (NO bloqueador), por lo cual la ejecución de tu
> programa NO se detiene y continua hasta el fin del archivo por lo cual se
> termina incluso muy seguramente antes de que el archivo PDF haya sido
> abierto.
>
> El estilo lo eliges tu, pero tienes que poner tu codigo en un loop para
> que no se salga sino hasta que tu asi lo desees. (while?)
>
> *POR CIERTO, AL ESCRIBIR TU ULTIMO MENSAJE EXPUSISTE LA CONTRASEÑA DEL
> ADMINISTRADOR DE TU BASE DE DATOS, por lo que te recomiendo altamente que
> la cambies inmediatamente.*
>
>
> Dtb/Gby
> =======
> Mario R. Osorio
> A.S. of Computer Programming and Analysis
> Web page: *http;//mario.osorio.solu tions
> <http://http%3B//mario.osorio.solutions>*
> Email: *mario en osorio.solutions* <mario en osorio.solutions>
> *Just Choose Python!* <http://www.gentoogeek.org/files/choose_python.pdf>
>
> “If I had asked people what they wanted, they would have said faster
> horses.”
>  ― Henry Ford
>
>
>
>
> <http://goo.gl/t2Hzgo>
>             <https://m.do.co/c/63e2415dab7b>
>
> 2017-12-04 1:29 GMT-05:00 Roberto Matarrita <rmatarria en gmail.com>:
>
> Buenas noches Don Mario. Disculpe que le moleste, tengo un problema con
> respecto al código para levantar el PDF. Todo lo hace casi perfecto, pero
> cuando ejecuto el reporte desde la forma, me lo levanta, pero me saca de la
> forma y tengo que volver a cargarla y ejecutar de nuevo el reporte. Es
> decir me levanta el browser, pero seguidamente desconecta la forma.  Alguna
> Idea.
>
> Roberto.
>
> input_file = os.path.dirname(os.path.abspat h(__file__)) + '/report4.jrxml'
>       output = os.path.dirname(os.path.abspat h(__file__)) + '/reportes'
>       print(output)
>       con = {
>         'driver': 'postgres',
>         'username': 'postgres',
>         'password': 'Administra8080',
>         'host': 'localhost',
>         'database': 'municipal',
>         'port':'5432'
>       }
>       x=input("Digite codigo de empleado :")
>
>       #="8"
>       jasper = JasperPy()
>       jasper.process(input_file,outp ut_file=output,format_list=["p df"],
> parameters={'idenifica': (x)},db_connection=con)
>        #os.remove(fname)
>       #subprocess.Popen([file],shell =True)
>
>       #webbrowser.open_new(r'file:// C:\manteminiento\to\reportes.p df')
>       webbrowser.open_new(r'file://' + output + '.pdf')
>       os.startfile(filename)
>       os.system(filename)
>
> Después del browser se sale de la forma.
>
> El 29 de noviembre de 2017, 18:23, Mario R. Osorio <nimbiotics en gmail.com>
> escribió:
>
> Es para mi un placer poder ayudarte. Yo llevo varios años que no programo
> en Python, pero es mi lenguage favorito. La funcion popen() esta contenida
> en la libreria *subprocess*
> <https://docs.python.org/3/library/subprocess.html>, asi que quizas solo
> te falte importar esa libreria.
>
> Te recomiendo que pruebes las varias formas de abrir el(los) arcchivo(s)
> ya que algunas podrian tener (d)efectos indeseados. *Tengo entendido* que
> la forma mas *correcta* es utilizando popen(), Pero yo pienso que lo
> *correcto*, a veces, esta en contraposicion a lo *desado*.
>
>
> Dtb/Gby
> =======
> Mario R. Osorio
> A.S. of Computer Programming and Analysis
> Web page: *http;//mario.osorio.solu tions
> <http://http%3B//mario.osorio.solutions>*
> Email: *mario en osorio.solutions* <mario en osorio.solutions>
> *Just Choose Python!* <http://www.gentoogeek.org/files/choose_python.pdf>
>
> “If I had asked people what they wanted, they would have said faster
> horses.”
>  ― Henry Ford
>
>
>
>
> <http://goo.gl/t2Hzgo>
>             <https://m.do.co/c/63e2415dab7b>
>
> 2017-11-29 17:45 GMT-05:00 Roberto Matarrita <rmatarria en gmail.com>:
>
> Don Mario, me funcionó el proceso, pude ver el reporte en la pantalla.
> Usted no sabe cuanto me ha costado hacer esto, llevo meses, buscando en
> Internet, documentación, gente que me dijera como podía hacer un reporte en
> python y realmente nadie me decía como hacerlos, a excepción de las
> herramientas que le mencioné.
>
> Gracias por ayudarme a dar el último paso que necesitaba para ver reportes
> en pantalla de una aplicación de escritorio. Ya los puedo tirar a PDF,
> Word,Excell,TXT y muchos otros formatos. Ahora es cuestión de afinarlo.
>
> 1. Una última consulta, usted como hace los reportes en python.
> 2. Que hace esta instrucción que me dio error y tuve que ponerla en
> comentario. subprocess.Popen([ file],shell=True)
>
>
> Roberto.
>
> El 29 de noviembre de 2017, 10:38, Mario R. Osorio <nimbiotics en gmail.com>
> escribió:
>
> Desconozco el producto JasperReport. Sin embargo, si ya tienes el archivo
> PDF, solo te falta abrirlo, y hay varias formas de hacerlo; entre ellas:
>
>
>    -
>    - subprocess.Popen([file],shell= True)
>    -
>
>    import webbrowser
>    webbrowser.open_new(r'file://C :\path\to\file.pdf')
>
>    -
>
>    import os
>    os.startfile(filename)
>
>    -
>
>    os.system(filename)
>
>    -
>
>
>
>
> Tambien podrias hacer uso de varias librerias para manipulacion de
> archivos PDF
>
>
> Dtb/Gby
> =======
> Mario R. Osorio
> A.S. of Computer Programming and Analysis
> Web page: *http;//mario.osorio.solu tions
> <http://http%3B//mario.osorio.solutions>*
> Email: *mario en osorio.solutions* <mario en osorio.solutions>
> *Just Choose Python!* <http://www.gentoogeek.org/files/choose_python.pdf>
>
> “If I had asked people what they wanted, they would have said faster
> horses.”
>  ― Henry Ford
>
>
>
>
> <http://goo.gl/t2Hzgo>
>             <https://m.do.co/c/63e2415dab7b>
>
> 2017-11-28 22:21 GMT-05:00 Roberto Matarrita <rmatarria en gmail.com>:
>
> Buenas noches. Ya llevo varios meses tratando de aprender a realizar
> reportes en Python. He buscado reporteadores, documentación respecto al
> tema, pero al parecer es bastante escasa. Vi reportlab, pandas y otros,
> pero todos son para confeccionar a puro código. Observé un par de
> reporeteadores gráficos, entre ellos JasperReport, muy bueno y completo.
> Me enviaron el código que abajo describo, el cual logré que funcionara, se
> conecta a la base de datos, envía parámetros y hace el reporte.
> Pero tengo el gran problema que no he podido ya que desconozco como
> hacerlo y la persona que me envió el código, tampoco ha podido ayudarme y
> es como hacer para ver el reporte en pantalla. Es decir un preview.
>
> Es decir como hago para ver el reporte en la pantalla, para que el
> usuakrio escoja la impresora, o bien si lo va a enviar a un PDF, Word o
> Excel. Ya que el código lo que hace es grabar directamente el reporte al
> disco.
> Mucho agradecería la ayuda, o bien sujerencias para los reportes ya que
> estoy en un proyecto muy grande y este ha sido el talón de aquiles en
> Python, los reportes. Si alguien conoce del tema.
>
> Gracias.
>
> Describo el código.
>
> import sys
> import os
> import PyPDF2
> import pyjasper
> from platform import python_version
> from pyjasper.jasperpy import JasperPy
> from PyPDF2 import PdfFileMerger,PdfFileReader
>
> #def advanced_example_using_databas e():
> input_file = os.path.dirname(os.path.abspat h(__file__)) + '/report4.jrxml'
> output = os.path.dirname(os.path.abspat h(__file__)) + '/reportes'
> print(input_file)
> print(output)
>
> con = {
>         'driver': 'postgres',
>         'username': 'postgres',
>         'password': 'Administra8080',
>         'host': 'localhost',
>         'database': 'municipal',
>         'port':'5432'
>     }
> x=input("Digite codigo de empleado :")
> jasper = JasperPy()
> jasper.process(input_file,outp ut_file=output,format_list=["p df"],
> parameters={'idenifica': (x)},db_connection=con)    #Aquí se confecciona el
> reporte.
>
> ______________________________ _________________
> Python-es mailing list
> Python-es en python.org
> https://mail.python.org/mailma n/listinfo/python-es
> <https://mail.python.org/mailman/listinfo/python-es>
>
>
>
> ______________________________ _________________
> Python-es mailing list
> Python-es en python.org
> https://mail.python.org/mailma n/listinfo/python-es
> <https://mail.python.org/mailman/listinfo/python-es>
>
>
>
> ______________________________ _________________
> Python-es mailing list
> Python-es en python.org
> https://mail.python.org/mailma n/listinfo/python-es
> <https://mail.python.org/mailman/listinfo/python-es>
>
>
>
> ______________________________ _________________
> Python-es mailing list
> Python-es en python.org
> https://mail.python.org/mailma n/listinfo/python-es
> <https://mail.python.org/mailman/listinfo/python-es>
>
>
>
> ______________________________ _________________
> Python-es mailing list
> Python-es en python.org
> https://mail.python.org/mailma n/listinfo/python-es
> <https://mail.python.org/mailman/listinfo/python-es>
>
>
>
> ______________________________ _________________
> Python-es mailing list
> Python-es en python.org
> https://mail.python.org/mailma n/listinfo/python-es
> <https://mail.python.org/mailman/listinfo/python-es>
>
>
>
> ______________________________ _________________
> Python-es mailing list
> Python-es en python.org
> https://mail.python.org/mailma n/listinfo/python-es
> <https://mail.python.org/mailman/listinfo/python-es>
>
>
>
> ______________________________ _________________
> Python-es mailing list
> Python-es en python.org
> https://mail.python.org/ mailman/listinfo/python-es
> <https://mail.python.org/mailman/listinfo/python-es>
>
>
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> https://mail.python.org/mailman/listinfo/python-es
>
>
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> https://mail.python.org/mailman/listinfo/python-es
>
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20171207/6530ad34/attachment.html>
------------ próxima parte ------------
A non-text attachment was scrubbed...
Name: python.png
Type: image/png
Size: 90835 bytes
Desc: no disponible
URL: <http://mail.python.org/pipermail/python-es/attachments/20171207/6530ad34/attachment.png>


Más información sobre la lista de distribución Python-es