viernes 9 de marzo de 2007

Impresión directa a impresora en el WEB con aplicaciones GeneXus.

A partir de la versión GX 9.0 (U2) se puede imprimir directamente a impresora con las aplicaciones WEB, a una impresora conectada a la maquina del cliente.
Como se explica en el SAC 20913 y en el SAC 19809

Algunos pasos adicionales para lograr que no se vea el reporte, puede ser.

1) Hay que configurar el GXPrn.ini en el raiz del directorio virtual que se maneja (sige/WEB-INF, por ejemplo).
Asignar un formulario USANDO SOLO MAYUSCULAS a la impresora en el GXPRN.INI.

2) Poner la propiedad "Show printer dialog" en NO

3) Hacer un Reporte/Procedimiento para lista que sea Main, con call protocol http, con la propiedad de "Only to Printer" y con las reglas
printer("FORMULARIO");
output_file('salida','pdf);

4) En los webpanels que se vaya a imprimir directo a la impresora, poner una EmbededPage (EP), un boton imprimir, y el evento asociado a dicho boton.

Event 'Imprimir'
&Text=Link(PImprimir) //Este reporte es el creado en el paso 3
EP.Source=&Text // 'http://localhost:8080/sige/servlet/aimpabonado'
EP.Height=0 //Esto es para que no se vea la Embeded Page
EP.Width=0 //Esto es para que no se vea la Embeded Page
EndEvent

Con eso alcanza para imprimir derecho a una impresora, que tenga el nombre que se especifica en el gxprn.ini y que no se vea el reporte. Tiene como inconveniente que es difícil mostrar un avance del estado de la impresión.

También puede dar algun problema si la invocación al reporte da algún problema, pues puede cancelar por timeout cuando el reporte es muy largo.

En java/tomcat, no es trivial saber bien donde se debe guardar el GXPrn.ini. Una buena opcion es dejar que la aplicación cree dicho archivo la primera vez que corra y luego modificarlo.

Ejemplo de GXPRN.INI, es importante el MODE=0

[General_Config_info]
Version=3
XOffset=0
YOffset=0
CheckPaperSize=0
[FORMULARIO]
Printer=Hp (Frente)
Mode=0

Orientation=1
PaperSize=1
PaperLength=2794
PaperWidth=2159
Scale=100
Copies=0
DefaultSource=15
PrintQuality=600
Color=2
Duplex=1
XOffset=0
YOffset=0

5 comentario(s):

  1. Muy Bueno el aporte. Muy bueno el Blog. También en la ayuda de Genexus hay una utilidad para setear la orientacion del papel, tamaño, etc. The program GxSetFrm that allows the configuration of the INI file is also provided, you may select the form that you wish
    to configure and then set the desired paper size, orientation and printer.
    Gracias por el blog. Saludos, martin.

    ResponderEliminar
  2. Martin:
    Me alegro que te sirviera.
    El GXSetFrm sirve para cambiar algunos de los seteos, pero hay veces que es preferible usar el viejo y querido NOTEPAD, para modificar el .INI, pues se pueden hacer "mas cosas" que con editor especifico.

    Gracias por el comentario.

    ResponderEliminar
  3. Mi problema es que se me imprime con la opción activada "Rotar automáticamente y centrar" de Escala de página, en el dialogo de impresión, y no se como puedo dejar fijada esta opción a Escala de página: Ninguno, para que no se me deforme el documento

    ResponderEliminar
  4. se me olvidaba, estoy intentandolo en net y no se donde colocar el gxprn.ini

    ResponderEliminar
  5. excelente, felicitaciones, una pregunta si yo tengo en un grid varias lineas que quiero imprimir directamente a la impresora como seria el procedimiento. Gracias

    ResponderEliminar

1) Lee el post
2) Poné tu opinión sobre el mismo.
Todos los comentarios serán leidos y la mayoría son publicados.