Entrevista a Fernando da Rosa

0 comentarios


El viernes 7 de Mayo estuvo Fernando da Rosa como invitado al programa "No toquen nada" de Oceano FM. Fernando da Rosa es un referente en el Uruguay en temas de Software Libre y en esta entrevista explica muy sencillamente que es el Software Libre para aquellos que no conocen del tema.

Pueden escucharlo en formato MP3 o en formato OGG.

Fuente: Blog de Fernando da Rosa

"Silent Printing" en GeneXus para reportes PDF en el generador JAVA ambiente WIN

0 comentarios

Quería que el primer post (en realidad el segundo) de este blog sea sobre algo productivo, por eso decidí publicar una solución para un problema que tuve hace algún tiempo con GeneXus y que quizas le pueda servir a otros.

El problema era que al setear la propiedad "Report Output" de un reporte PDF a "Only to printer", al enviar a imprimir un reporte se abría Acrobat Reader y no era muy cómodo para la impresión de facturas.

Al consultar con el soporte de Artech, me dijeron que la funcionalidad era así y no había solución ya que la impresión se hacía mediante Acrobat Reader.

Buscando en google encontré una librería desarrollada en JAVA llamada PDFBox que sirve para imprimir archivos PDF desde JAVA entre otras funcionalidades. Usando esta librería escribí una clase externa en JAVA que permite enviar a imprimir un archivo PDF a una impresora cualquiera sin abrir ninguna ventana.

Dicha clase también lee el archivo gxprn.ini para saber a que impresora debe enviar a imprimir el archivo PDF.

La versión de PDFBox usada para implementar esta clase es un Night Build del momento en que la hice ya que aunque existía un metodo llamado "silentPrint" que recibía como parámetro la impresora a la cual debía enviarse a imprimir el archivo PDF, el mismo no estaba correctamente implementado por lo cual no funcionaba. Gracias a dios esta librería es Open Source.

También usé una librería Open Source llamada IniEditor para la lectura del archivo gxprn.ini. Dicha librería también tuvo que ser modificada pues tenía algunos bugs cuando había secciones en blanco dentro del archivo ini.

Lamentablemente la utilización de esta clase no es de lo mas cómodo ya que hay que setear la propiedad "Report Output" del reporte a "Only to File" y luego hacer la llamada al procedimiento que envía a imprimir el archivo PDF, pero al menos es una solución aceptables para casos como el mío.

Su utilización es muy sencilla, aquí describo los pasos a seguir.

En el modelo:

  • Agregar al classpath los archivos PDFBox-0.7.4.jar e IniEditor.jar
  • Compilar el archivo pimprimopdf.java y copiar el .class resultante a la carpeta del modelo correspondiente

En el Reporte:
  • Setear la propiedad "Report Output" en "Only to file"
  • escribir las siguientes reglas:

    parm(&nombredearchivopdf);
    Output_File(&nombredearchivopdf,'PDF');
En el objeto llamador:
  • Escribir las siguientes lineas.

    &nombrearchivopdf = 'archivopdf.pdf')
    call(RMiReportePDF,&nombrearchivopdf)
    call('pimprimopdf',&nombrearchivopdf,'Facturas')
En este caso 'Facturas' es el form de impresión que queremos usar, es lo que generalmente escribiríamos en la regla "Printer" del reporte.

Subí el proyecto a GxOpen para que quien quiera pueda usarlo y mejorarlo. Se puede descargar desde aquí.

Hay varias cosas que se pueden mejorar, por ahora la única propiedad del archivo gxprn.ini que se toma en cuenta es la impresora a la cual enviar a imprimir el archivo, habría que tomar en cuenta las demas propiedades.

Como corresponde segun las licencias de las librerías usadas dejo los links a los códigos fuentes con las modificaciones.

El código fuente modificado de PDFBox lo pueden descargar desde aquí.
El código fuente modificado de IniEditor lo pueden descargar desde aquí

Primer post, ¿ De que tratará este blog ?

0 comentarios

La creación de este blog surgió a partir de la necesidad de tener un lugar donde expresar mi opiniones y escribir de lo que a mi me interesa sin necesidad de dar explicaciones a nadie.

Planeo escribir principalmente sobre programación en general, GeneXus, Software Libre y demás noticias sobre tecnología, aunque seguramente habrá tópicos que escapen a estos temas.

Quisiera desde este lugar poder aprender nuevas cosas a partir de los comentarios, criticas y correcciones que otras personas deseen aportar. A su vez planeo escribir algún que otro post describiendo problemas con los que me he encontrado trabajando con GeneXus y sus correspondientes soluciones para que quizás otra persona pueda beneficiarse de ello.

También es seguro que será mi lugar predilecto para criticar tanto a empresas como a personas.