[Python-es] Como Implementar Python y JasperReport.

Roberto Matarrita rmatarria en gmail.com
Lun Dic 4 18:25:36 EST 2017


Gracias Iram por responder a mi correo. Ya está todo solucionado y
funcionando.

Gracias.


El 4 de diciembre de 2017, 16:02, Hiram <hiramhzr en gmail.com> escribió:

> Buenas tardes,
>
> Sería bueno ver un ejemplo de la parte del código que esta intentando
> sacar....
>
> Saludos.
>
> El lun., 4 de dic. de 2017 a la(s) 15:44, Roberto Matarrita <
> rmatarria en gmail.com> escribió:
>
>> Jjajajaja Mario no hay como estar con un veterano de la programación como
>> uno, ya ve como me dijo, sin ver el código ya se que es y la verdad sólo la
>> experiencia hace esas cosas. Voy a probar lo que me describe y le cuento
>> como me fué. En realidad no hay como estar con personas de la edad de uno o
>> un poco cercanas, nos estendemos mejor, que los muchachos de hoy día,
>> espero hacer un muy buen software con este proyecto ya que lo estoy
>> pensando en grande.
>>
>> Muchas gracias.
>>
>> 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
>>>
>>>
>> _______________________________________________
>> Python-es mailing list
>> Python-es en python.org
>> https://mail.python.org/mailman/listinfo/python-es
>>
> --
> Hiram Zuñiga
>
> _______________________________________________
> 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/7827b9c9/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/7827b9c9/attachment.png>


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