[Python-es] Como Implementar Python y JasperReport.

Jean Carlos Rodrìguez jeancarlosr_ve en yahoo.com
Mar Dic 5 22:09:41 EST 2017


Perdon solo por preguntar, porque no pruebas con reportlab la generación del pdf, si estás usando pyqt5 te podría dar una mano


Sent from Yahoo Mail for iPhone


On Monday, December 4, 2017, 5:28 PM, Roberto Matarrita <rmatarria en gmail.com> wrote:

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. solutionsEmail: mario en osorio.solutionsJust Choose Python!
“If I had asked people what they wanted, they would have said faster horses.” ― Henry Ford
            
                 
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.solu tionsEmail: mario en osorio.solutionsJust Choose Python!
“If I had asked people what they wanted, they would have said faster horses.” ― Henry Ford
            
                 
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.abspat h(__file__)) + '/report4.jrxml'      output = os.path.dirname(os.path.abspat h(__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,outp ut_file=output,format_list=["p df"], parameters={'idenifica': (x)},db_connection=con)       #os.remove(fname)      #subprocess.Popen([file],shell =True)
      #webbrowser.open_new(r'file:// C:\manteminiento\to\reportes.p df')      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, 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.solu tionsEmail: mario en osorio.solutionsJust Choose Python!
“If I had asked people what they wanted, they would have said faster horses.” ― Henry Ford
            
                 
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.solu tionsEmail: mario en osorio.solutionsJust Choose Python!
“If I had asked people what they wanted, they would have said faster horses.” ― Henry Ford
            
                 
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 sysimport osimport PyPDF2import pyjasperfrom platform import python_versionfrom pyjasper.jasperpy import JasperPyfrom PyPDF2 import PdfFileMerger,PdfFileReader 
#def advanced_example_using_databas e():input_file = os.path.dirname(os.path.abspat h(__file__)) + '/report4.jrxml'output = os.path.dirname(os.path.abspat h(__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,outp ut_file=output,format_list=["p df"], parameters={'idenifica': (x)},db_connection=con)    #Aquí se confecciona el reporte.
______________________________ _________________
Python-es mailing list
Python-es en python.org
https://mail.python.org/mailma n/listinfo/python-es




______________________________ _________________
Python-es mailing list
Python-es en python.org
https://mail.python.org/mailma n/listinfo/python-es




______________________________ _________________
Python-es mailing list
Python-es en python.org
https://mail.python.org/mailma n/listinfo/python-es




______________________________ _________________
Python-es mailing list
Python-es en python.org
https://mail.python.org/mailma n/listinfo/python-es




______________________________ _________________
Python-es mailing list
Python-es en python.org
https://mail.python.org/mailma n/listinfo/python-es




______________________________ _________________
Python-es mailing list
Python-es en python.org
https://mail.python.org/mailma n/listinfo/python-es




______________________________ _________________
Python-es mailing list
Python-es en python.org
https://mail.python.org/mailma n/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/20171206/b9bbb26c/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/20171206/b9bbb26c/attachment.png>


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