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

Comentarios

  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
  6. Hola Enrique.

    Mi nombre es Alvaro Hernández y en el lugar donde trabajo estamos intentando imprimir en modo texto, en ambiente web, directamente desde el browser a la impresora del cliente.
    Lo hemos intentado, pero todavía no pudimos hacerlo y estamos bastante urgidos.
    Usamos la versión 9, generando Java.

    Lo hicimos andar en PDF pero como tenemos que imprimir en las máquinas interventoras del tipo que se usan en las redes de cobranza, no se imprime bien, me imagino que porque el PDF se trata como imagen.

    Se nos ocurrió hacerlo en modo texto que tendría que funcionar, pero nos da error de compilación en java.
    Imaginamos que es en el comando 'print ' porque si le sacamos esos comandos, compila bien.
    Obviamente que como le sacamos los print no imprime nada no ?

    Hemos visto que se puede imprimir texto en la GX EV. 1 en la impresora local, pero tenés idea si se puede imprimir texto en la versiòn 9 en amb. web en la impresora local?

    Te agradecería muchísimo porque nos sería de muchisima ayuda.

    Te expreso mis disculpas por molestarte, y espero tu respuesta.

    Gracias,
    Alvaro

    ResponderEliminar
  7. En GX 9.0 se puede impirmir en modo texto sin problemas.
    Que es lo que no estas pudiendo hacer?

    ResponderEliminar
  8. Hola Enrique , estoy trabajando en el trial de genexus x ev2 y nada de lo que publicaste funciona , podrias ayudarme , que estare haciendo mal , el trial genera en c+ y sql
    Mil Gracias

    ResponderEliminar
    Respuestas
    1. Anonimo:
      Para ayudarte, primero es conveniente que des tu nombre, de forma de poder saber a quien estoy ayudando.
      Despues es aconsejable que pongas que problema estas teniendo, o que error te da, para poder entender como se te puede ayudar.
      Decir que nada de lo que publique funciona, no permite saber que problema es el que te aqueja.

      Eliminar
    2. Hola Enrique te respondi recien pero no se si perdi lo que escribi por las dudas te explico todo lo que me pasa de nuevo.
      Me llamo Andrea
      Estoy generando en chsarp y sql y estoy renegando hace dos semanas estoy con una impresion que no tiene que mostrar el dialogo de impresion , tiene que salir directo a la impresora , ya hice de todo incluido tus indicaciones y logre que no muestre el cuadro de dialogo de la impresora en ixplorer en chrome lo sigue mostrando.
      Sigo insistiendo con iexplorer y me aperece un mensaje que dice "se esta intentando imprimir el documento Desea permitirlo ?

      El archivo gxprn.ini lo uso en el directori bin y tambien lo copie en el directorio web
      te paso el archivo que estoy usando ,

      General_Config_info]
      Version=3
      XOffset=0
      YOffset=0
      CheckPaperSize=0
      [ANDREA]
      Printer=Ricoh Aficio MP 3500 PCL
      Mode=0
      Orientation=1
      PaperSize=1
      PaperWidth= 790
      PaperLength= 1169
      Scale=100
      Copies=1
      DefaultSource=15
      PrintQuality=600
      Color=1
      Duplex=1
      XOffset=0
      YOffset=0

      andrea

      Eliminar
    3. Andrea:
      Lo que queres evitar es que salga el el mensaje "Se esta intentando imprimir el documento?" en Internet Explorer?
      O imprimir en Chrome?

      Eliminar
  9. Te juro Enrique que hice todo lo que aconsejás pero no logro imprimir. Estoy con GX X Ev 2 U1, Web, Java. En Firefox, no hace nada (solo agrega una entrada en GXPRN.INI si es que no estaba previamente), en Chrome abre un cuadro de diálogo de la impresora; por lo menos me da alguna esperanza el tema es que debo hacerlo andar en Firefox. Las diferencias son: debajo del botón tengo "Reporte1.Source = Consulta.Link(47, 137)" y en el GXPRN.INI no tengo la línea: "Printer=Hp (Frente)" que vos indicás en tu GXPRN.INI.

    Gracias y un abrazo!!!

    ResponderEliminar
    Respuestas
    1. No tenes porque jurarme nada.. te creo que no te funcione.. :)
      Yo lo probe con 9.0, con la Ev2, creo que hay mejoras que lo deberian hacer mas facil.

      Por las dudas, en el gxprn.ini, tenes que poner una entrada, que diga en que impresora queres que se imprima.
      HP (Frente) es la impresora que teniamos, que era un HP y estaba en el frente de oficina. :)

      Vos deberias tener el nombre de la impresora tuya en la cual queres que se imprima.

      Con eso, le estas diciendo que cuando use el FORMULARIO use dicha impresora.

      Eliminar
  10. Gracias Enrique pero ni poniendo el nombre de la impresora me funciona. De todos modos no creo que sea práctico tampoco hacer eso. Se supone que el reporte debe salir por la predeterminada.

    ResponderEliminar
  11. Hola Enrique mi nombre es Luis Diarte, me pasa lo mismo que a Sergio, yo tengo Gx Ev1 Upgrade 8, hice puntillosamente cada paso que indicas pero me sigue mostrando el PDF y no tira a la impresora

    ResponderEliminar
  12. Que tal enrique, tengo un problema al imprimir, pero es un tema con el printingappletsigned.jar, ya que al llamar al reporte, me salta un cartel si deseo permitir que se ejecute la aplicacion java, cuando le indico que no bloque nada, en la aplicación genexus me muestra un mensaje diciendo:

    "No java plugin detected. Click here to download"

    El mensaje no me lo muestra en pantalla, ya que lo coloca en una etiqueta div con tamaño 0x0.

    Te comento que los reportes deben ser texto, impreso en el lado cliente con una etiquetadora, utilizo GXEvo2 U3, java entorno web.

    Alguna vez te pasó esto?

    ResponderEliminar
  13. Con esta herramiento puedo mandar a imprimir desde la web a una Impresora Fiscal que está conectada al puerto COM1 ?
    Si es posible, cómo serían los pasos? Si tienen alguna data y me la pueden enviar al mail, se los agradecería muchisimo, mi mail es edcsuscrib@yahoo.com.ar

    Saludos y gracias

    ResponderEliminar
    Respuestas
    1. No, esto es para imprimir PDF.
      Para escribir en el puerto COM1, podrias hacer un programa en .NET o Java para lograrlo.

      Eliminar
  14. Hola
    Estoy con Genexus 15 y java quiero imprimir en texto en una impresorta lx300 que es donde imprimo todos mis recibos desde otra aplicacion , estoy logrando imprimir pero no me respeta el gxprn.ini , ya que imprime solo si pongo la impresora lx300 como predeterminda , al procedure lo puse con Only to printer y call protocol "Command Line" el gxprn.ini lo engo en las carpetas C:\Program Files\Apache Software Foundation\Tomcat 7.0\temp
    C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps
    C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\app\WEB-INF
    si me pueden ayudar a configurar para que salga en la impresora aunque no sea predeterminada
    gracias

    ResponderEliminar
  15. Estimado Enrique, apliqué esto y funcionó casi perfecto, imprime, pero cuando retorno del webpanel que contiene la embedded page imprime nuevamente. Intenté mil cosas pero no pude solucionarlo. ¿Te ha pasado eso o tienes idea de cómo se arregla?.

    Saludos
    Raúl

    ResponderEliminar
  16. Hola Enrique, recién mandé mi consulta pues me imprime dos veces, cuando entro (voluntario) y cuando salgo (involuntario) , por las dudas estoy trabajando con Gx15, .NET. Otro detalle es que uso I.Explorer pues con Chrome no anda.

    Saludos
    Raúl

    ResponderEliminar

Publicar un comentario

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

Entradas más populares de este blog

El Sordo

Paleta de colores en GeneXus