Ayuda: Modulo de impresión no reconoce la impresora del cliente al estar en el servidor.

Buen dia.

Les comento la duda que tengo, y cualquier comentario sera bienvenido.

Tengo un modulo para imprimir etiquetas de código de barras por medio de parámetros enviados desde un jsp, y los recibo con un servlet para después mandarlos a un método imprimir (Imprime de acuerdo al parámetro enviado), les coloco el código por si a alguien le sirve y para explicarme mejor.

El detalle es que al correr la aplicación de manera local, si reconoce la impresora por defecto, pero al subirlo al servidor de aplicaciones el cual esta en un servidor externo, no reconoce ninguna la impresora que tengo en la maquina cliente, y suena lógico por que el método de impresión se ejecuta del lado del servidor. Aunque tal vez exista alguna forma de hacer que reconozca la impresora del cliente.

Ya intente imprimiendo el codigo ZPL desde JavaScript y si ve la impresora pero me lo detecta como caracteres normales.
Por el momento estoy haciendo la aplicación de manera local. Pero me queda la duda de como solucionar ese detalle.

public void imprimir(int iGrupo, int iInteg)
  {
  // (Aqui deberia detectar impresora por defecto lo cual al correrlo de manera local si lo hace)
        PrintService service = PrintServiceLookup.lookupDefaultPrintService();
     
      String sGrupo = val.rellenaCeros(iGrupo,4);
      String sInteg = val.rellenaCeros(iInteg,3);
     
      //Aqui se colocan los detalles para la impresión por medio de algun lenguaje para impresoras
      //En este caso ZPL, asi tambien se puede usar EPL.
     

        String comando = "^XA~TA000~JSN^LT0^MNW^MTT^PON^PMN^LH0,0^JMA^PR2,2~SD15^JUS^LRN^CI0^XZ\n"
                        + "^XA\n"
                        + "^MMT\n"
                        + "^PW305\n"
                        + "^LL0203\n"
                        + "^LS0\n"
                        + "^BY2,3,100^FT35,167^BCN,,N,N\n"
                        + "^FD>;"+ sGrupo +">6"+ sInteg +"^FS\n"
                        + "^FT39,52^A0N,28,28^FH^FDARCHIVO^FS\n"
                        + "^FT86,192^A0N,23,24^FH^FD" + sGrupo +"-"+ sInteg +"^FS\n"
                        + "^PQ1,0,1,Y^XZ\n";
       
        DocFlavor flavor = DocFlavor.BYTE_ARRAY.AUTOSENSE;
        Doc doc = new SimpleDoc(comando.getBytes(), flavor, null);
        DocPrintJob docPrintJob = service.createPrintJob();

       
        try {
          //Mandamos a imprimir el documento
                docPrintJob.print(doc, null);
        }
        catch (PrintException e) {
          System.out.println("Error al imprimir: "+e.getMessage());
        }
    }

Saludos y de antemano gracias.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de luxspes

Si tu cliente es una aplicación web, genera PDF

Si tu cliente es una aplicación web, lo que se acostumbra es generar lo que vas a imprimir en PDF, y dejar que el acrobat reader se encargue de imprimirlo a petición del usuario

Imagen de luxspes

Si quieres imprimir directo, sin pasar por acrobat reader

Si tu cliente es una aplicación web, y necesitas imprimir, y quieres disparar la impresión programáticamente (por ejemplo en sistemas de punto de venta, quieres que al terminar la venta automáticamente mande a imprimir el recibo en ves de presentar el PDF en pantalla y dejar que el usuario decida si lo imprime) tienes que usa un applet para imprimir

Imagen de 5uRFi

Directo sin pasar por acrobat reader.

Antes que nada gracias por tu pronta respuesta.

Y si. Lo que se requiere va mas por la segunda opción, tiene que imprimir las etiquetas automáticamente en base al parámetro que el usuario le indique. Comenzare a implementar lo que me comentas. :)