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.

    ResponderBorrar
  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.

    ResponderBorrar
  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

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

    ResponderBorrar
  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

    ResponderBorrar
  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

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

    ResponderBorrar
  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

    ResponderBorrar
    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.

      Borrar
    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

      Borrar
    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?

      Borrar
  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!!!

    ResponderBorrar
    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.

      Borrar
  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.

    ResponderBorrar
  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

    ResponderBorrar
  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?

    ResponderBorrar
  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

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

      Borrar
  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

    ResponderBorrar
  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

    ResponderBorrar
  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

    ResponderBorrar
  17. Enrique, Buenas tardes. Puedes ayudar con un tema. Necesito imprimir directamente a una impresora Matriz de Punto desde mi aplicación Web. Gx15, .Net.
    Tengo un Procedure Modo Texto, Salida directamente a Impresora, este no envía nada a la cola de impresión.


    Saludos y Gracias.

    Atte.
    Sergio.

    ResponderBorrar
  18. Hola Enrique, te planteo mi problema

    Para un sistema de cobranza imprimo tickets en impresora Epson TM-U220, cada impresora conectada a una PC (USB), instalada con su driver y definida además como impresora genérica de texto de Windows, compartiendo el mismo puerto (ESDPRT001). Esta solución es la única que encontré luego de una ardua búsqueda.



    Los tickets son enviados a imprimir sobre la Impresora Genérica, cada operación de cobranza se compone de: descripción e importe por cada boleta de impuesto o servicio, importe total/vuelto, forma de pago (efectivo, tarjeta débito, tarjeta crédito, cheque). Toda esta información se imprime en un solo ticket, al finalizar la impresora corta el papel. Así funciona actualmente.



    Me solicitaron cambiar la forma de imprimir, desean imprimir un ticket por cada boleta y un ticket final (con total y forma de pago).



    Creé un Procedure (en el que recibo los parámetros de la operación ya registrada), recorro la tabla correspondiente invocando el Procedure-Report para cada boleta, y una última invocación al mismo Procedure-Report para el ticket final. Obviamente el Procedure-Report común a través de parámetros recibidos imprimiría ticket por cada boleta y ticket total según corresponda.



    El problema es que NO imprime todos los tickets, imprime SÓLO uno (el último), por ejemplo en una operación donde se cobraron 2 boletas, deberían imprimirse 3 tickets, 1 por cada boleta (2 en este caso) y 1 con el Total/Forma de Pago, en este caso solamente imprime el ticket con Total/Forma de Pago. Probé inhabilitando la impresión de Total/Forma de Pago, y solamente imprime el ticket de la última boleta.



    En la cola de impresión SÓLO genera 1 trabajo, pero verificando en …web\PublicTempStorage, se encuentra TODOS los archivos de textos correspondientes a los tickets enviados a imprimir.


    A esta altura no se me ocurre como solucionarlo, por lo cual agradeceria me orientes en alguna solución.

    Desarrollo con Genexus 15 U10 .NET - SQL 2014

    ResponderBorrar
    Respuestas
    1. Nunca habia visto ese comportamiento.

      Probaria hacer un unico reporte, que llame a los otros reportes.
      De esta forma va a crear solo un reporte, deberia salir sin problemas.

      Borrar
  19. Hola Enrique, gracias por compartir, estoy teniendo un problema y no puedo resolverlo:
    intente en evo3 y en gx15 ya, trabajo con JAVA.
    Tengo un reporte main(tengo entendido que a partir de evo3 no es un requerimiento pero igual intente de las dos maneras) cuyo call protocoll es "http", el output "only to printer", en un web panel puse una EmbeddedPage y en el evento en el source pongo embpage.source = reporte.Link(parm...)
    Me trae el reporte en pdf adentro del control pero no lo envia a la impresora.
    Tuve que agregar la regla output_file('ticket.pdf','PDF') porque sino me daba errores.
    Tengo entendido tambien que desde abril del 2015 ya no se puede usar el gxprn.ini, igual no es problema porque mando todo a la impresora por defecto.
    Pero bueno, no puedo imprimir a menos que le diga al visor de pdf que imprima.
    Trabajo en chrome y no tengo necesidad de implementar en otro navegador, es una aplicacion para hacer un totem para sacar turnos e imprimir un ticket con el mismo asi que se implementa en una pc con windows que tengo absoluto control sobre lo que esta instalado y no.

    Saludos y gracias
    Atte. Facundo.

    ResponderBorrar
    Respuestas
    1. Hola Facundo
      Estoy teniendo el mismo problema que tú
      De casualidad lo pudiste resolver?
      De antemano muchas gracias.
      Saludos.

      Borrar
    2. Hola:

      Alguno resolvio el problema de imprimir pdf directamente sin pasar por la vista previa de Chrome. Desde hace un tiempo te obliga a pasar por la vista previa de chrome y no se puede enviar directamente a la impresora.

      De antemano muchas gracias.
      Saludos.-

      Borrar
    3. Hola que tal!!
      Tenés que crearte un .bat con lo siguiente:
      Te escribo un ejemplo del cod!

      start chrome.exe --kiosk-printing --silent-print http://myip:8090/MIKB/servlet/login

      Saludos!
      Mario

      Borrar
  20. Hola Enrique, quisiera hacer la impresion directa pero desde un entorno win con Java con Ev3 y hasta el momento no me logra hacer un simple hola mundo

    ResponderBorrar

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

La nefasta influencia del golero de Cacho Bochinche en el fútbol uruguayo

Aplicación monolítica o distribuida?

Funcionalidades de GeneXus que vale la pena conocer: DATE Constants.