[Python-es] Como Implementar Python y JasperReport.

Hiram hiramhzr en gmail.com
Lun Dic 4 17:02:05 EST 2017


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
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20171204/4d5b50eb/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/4d5b50eb/attachment.png>


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