[Python-es] Como Implementar Python y JasperReport.

Roberto Matarrita rmatarria en gmail.com
Lun Dic 4 18:21:57 EST 2017


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.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 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.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'
>>>>       }
>>>>       x=input("Digite codigo de empleado :")
>>>>
>>>>       #="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)
>>>>
>>>> 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.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-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.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-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_database():
>>>>>>>> input_file = os.path.dirname(os.path.abspath(__file__)) +
>>>>>>>> '/report4.jrxml'
>>>>>>>> output = os.path.dirname(os.path.abspath(__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,output_file=output,format_list=["pdf"],
>>>>>>>> parameters={'idenifica': (x)},db_connection=con)    #Aquí se confecciona el
>>>>>>>> reporte.
>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> 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
>>>>>>>
>>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> 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
>>>>>
>>>>>
>>>>
>>>> _______________________________________________
>>>> 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
>>>
>>>
>>
>> _______________________________________________
>> 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/20171204/38262cfb/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/20171204/38262cfb/attachment.png>


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