[Python-es] Como Implementar Python y JasperReport.

Mario R. Osorio nimbiotics en gmail.com
Lun Dic 4 16:32:37 EST 2017


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


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