[Python-es] Como Implementar Python y JasperReport.

Roberto Matarrita rmatarria en gmail.com
Lun Dic 4 15:48:44 EST 2017


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


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