style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

Alguien tiene experiencia con impresora de tickets?

que tal mi pregunta es alguien tiene experiencia desarrollando alguna aplicación que utilice una impresora de tickets?
mas específicamente una epson pero en la pagina del fabricante no encuentro nada relacionado a utilizarlas mediante Java

alguien tiene un ejemplo?
algún código o algo donde pueda empezar a orientarme... saludos

pd: lo único que encontré en la web de epson son los drivers para la impresora, por lo cual si windows la reconoce se me habia ocurrido mandar a imprimir desde java utilizando Printable, PageFormat PrinterJobs
y hacer una "imagen" con graphics donde iran los datos a imprimir
pero creoq esa no es la mejor solucion

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 Fonseca

Un ejemplo simple

String cadena = "MI TICKET";
DocFlavor flavor = DocFlavor.BYTE_ARRAY.AUTOSENSE;
//Aqui selecciona tu impresora, el ejemplo tomará la impresora predeterminada.
        PrintService service = PrintServiceLookup.lookupDefaultPrintService();
        DocPrintJob pj = service.createPrintJob();
        byte[] bytes = cadena.getBytes();
        Doc doc = new SimpleDoc(bytes, flavor, null);
        try {
            pj.print(doc, null);
           
        } catch (Exception e) {
        }

Espero que este pequeño ejemplo te ayude.

Re: Un ejemplo simple

Es bastante bueno el ejemplo, sin embargo creo que hay que seguir las recomendaciones de la documentación y no caer en el anti-patrón pokémon.

En la documentación puedes encontrar el siguiente ejemplo:

DocFlavor flavor = DocFlavor.INPUT_STREAM.POSTSCRIPT;
   PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
   aset.add(MediaSizeName.ISO_A4);
   PrintService[] pservices =
                 PrintServiceLookup.lookupPrintServices(flavor, aset);
   if (pservices.length > 0) {
       DocPrintJob pj = pservices[0].createPrintJob();
       try {
           FileInputStream fis = new FileInputStream("test.ps");
           Doc doc = new SimpleDoc(fis, flavor, null);
           pj.print(doc, aset);
        } catch (FileNotFoundException fe) { //Ésta línea
        } catch (PrintException e) { //Ésta otra
        }
   }

Siempre es bueno aunque nos represente teclear líneas de más, de esa manera sabemos exactamente cuál es el problema y podemos encontrar la solución más rápido.

Saludos.

Imagen de Fonseca

Va de nuevo...

String cadena = "MI TICKET";
DocFlavor flavor = DocFlavor.BYTE_ARRAY.AUTOSENSE;
//Aqui selecciona tu impresora, el ejemplo tomará la impresora predeterminada.
        PrintService service = PrintServiceLookup.lookupDefaultPrintService();
        DocPrintJob pj = service.createPrintJob();
        byte[] bytes = cadena.getBytes();
        Doc doc = new SimpleDoc(bytes, flavor, null);
        try {
            pj.print(doc, null);
           
        } catch (PrintException e) {
        }

En lo anterior coincido, no hay que dejar hilos sueltos....
En cuanto a este fragmento del ejemplo anterior

lo estoy omitiendo ya que, aunque no se para que fin vas a utilizar los tickets, cuanto intentes imprimir un ticket con mucho contenido lo va a imprimir respetando el tamaño que indiques (MediaSizeName.ISO_A4).
Claro eso para este caso en particular....
A se me pasaba la documentación

Imagen de genitalico

bien dejenme darles una

bien dejenme darles una probada a los ejemplos ya con la impresora aun no la tenia por si les sirve como adicional esta es la impresora
Epson modelo M188d
http://prostores1.carrierzone.com/stores/b/beaglesoft.com/catalog/220a_w...

creen que se pueda adaptar el código al tamaño de ese tipo de papel es de papel continuo, ya que el ticket sera como los que dan en los supermercados y eso,
mi pregunta va con el papel al ser continuo dependerá de los datos que lleve y esa sera la medida en vertical

saludos

Imagen de Fonseca

si debe funcionar.

si usas el último ejemplo que publiqué debe funcionar.

BUENO YO HE REALIZADO

BUENO YO HE REALIZADO IMPRESION DE TICKETS DE LA SIGUIENTE MANERA;

       
 private void Dibuja_Linea(PrintWriter ps) {
        try {
            ps.println("----------------------------------------");
        } catch (Exception e) {
            System.out.print(e);
        }
    }

//para cortar el papel de mi ticketera
 private void cortar(PrintWriter ps) {

        try {
            char[] ESC_CUT_PAPER = new char[]{0x1B, 'm'};
            ps.write(ESC_CUT_PAPER);

        } catch (Exception e) {
            System.out.print(e);
        }
    }

    private void correr(int fin, PrintWriter pw) {
        try {
            int i = 0;
            for (i = 1; i <= fin; i++) {
                pw.println("");
            }
        } catch (Exception e) {
            System.out.print(e);
        }
    }

    private void setFormato(double formato, PrintWriter pw) {
        try {
            char[] ESC_CUT_PAPER = new char[]{0x1B, '!', (char) formato};
            pw.write(ESC_CUT_PAPER);

        } catch (Exception e) {
            System.out.print(e);
        }
    }

// para el color de mi ticketera
private void setRojo(PrintWriter pw) {
        try {
            char[] ESC_CUT_PAPER = new char[]{0x1B, 'r', 1};
            pw.write(ESC_CUT_PAPER);
        } catch (Exception e) {
            System.out.print(e);
        }
    }

private void setNegro(PrintWriter pw) {
        try {
            char[] ESC_CUT_PAPER = new char[]{0x1B, 'r', 0};
            pw.write(ESC_CUT_PAPER);

        } catch (Exception e) {
            System.out.print(e);
        }
    }

FileWriter file = new FileWriter(Impresora_Boleta);
                BufferedWriter buffer = new BufferedWriter(file);
                PrintWriter ps = new PrintWriter(buffer);

                setFormato(1, ps);
                ps.println("mi razon rozial");
                ps.println(Direccion);
                ps.println(DireccionFiscal);
                ps.println("RUC :" + RUC);
                Dibuja_Linea(ps);
                ps.println("Ticket    :" + serie + " - " + numero);
                ps.println("S/N       :" + maq);
                ps.println("Fecha     :" + fecha + "  Hora : " + hora);
                ps.println("Caj   : " + cajero + " Ven : " + vendedor + " Int : " + miinterno);
                Dibuja_Linea(ps);
                ps.println("Sr(a)     :" + cliente);
                Dibuja_Linea(ps);
                ps.println("Cant     " + "Descripcion" + "             " + "PVP");
                Dibuja_Linea(ps);
                lineas = 7;
                       
                // aqui recorro mis productos y los imprimo

                Dibuja_Linea(ps);
                ps.println("TOTAL         : S./ " + sumaTotal);
                ps.println();
                String ultimo = "              " + Delivery;
                ultimo += "                   " + correo;
                ps.println(ultimo);
                ps.println("  NO SE ACEPTAN CAMBIOS NI DEVOLUCIONES");
                ps.println("        GRACIAS POR SU COMPRA          ");
                correr(10, ps);
                cortar(ps);
                ps.close();

Imagen de genitalico

no entiendo a tu codigo como

no entiendo a tu codigo como lo implementas y que onda jaja
me podrias explicar como va ?

Imagen de black_ice_gt

Help

Yo tambien nesito saber como funciona ese codigo por favor... sirve para cualquier modelo de impresora?? podrias explicarlo por favor

Imagen de apolonioluis

Para los tickets no hay nada

Para los tickets no hay nada como el FreeMarker.

diseñas el ticket en un html poniendo marcadores para los datos, los cuales pasas como objetos.

Imagen de apolonioluis

ejemplo freeMarker

perdon es FreeMarker y este es un ejemplo:

<style>
    div.pResumen{text-align: center; font-family: monospace;}
    table#dt{font-family: monospace; width: 350px;}
    table#arts{font-family: monospace; width: 350px;}
</style>
<div class='pResumen'>${dt.nomEmpresa}</div>
<div class='pResumen'>${dt.razonSocial}</div>
<div class='pResumen'>${dt.domicilio}</div>
<div class='pResumen'>${dt.ciudad}&nbsp;&nbsp;&nbsp;${dt.telefono}</div>
<div class='pResumen'>${dt.rfc}</div>
<br>
<table id="dt">
    <tr>
        <td>${dt.fecha}</td><td>${dt.hora}</td><td>FOLIO: ${dt.folio}</td>
    </tr>
    <tr>
        <td>CAJA: ${dt.caja}</td><td colspan="2">VENDEDOR: ${dt.vendedor}</td>
    </tr>
</table>
<br>
<table id="arts">
    <#list arts as art>
    <tr>
        <td colspan="2">${art.descripcion}</td>
    </tr>
    <tr>
        <td>${art.cantidad} x ${art.costo} =<td>${art.importe}</td>
    </tr>
    </#list>
    <tr><td colspan="2"><hr></td></tr>
    <tr><td>TOTAL<td>${dt.total}</td></tr>
    <tr><td>EFECTIVO<td>${dt.efectivo}</td></tr>
    <tr><td>CAMBIO<td>${dt.cambio}</td></tr>
    <tr><td>IVA<td>${dt.iva}</td></tr>
</table>
<br>
<div class='pResumen'>${dt.mensaje}</div>
Imagen de Omar2

Impresión de Tickets

FONSECA:
Junto con saludar, quisiera solicitar si es posible que dejases el ejemplo completo de impresión de Tickets, puesto que lo pego y me arroja error.
Espero que me puedas ayudar a mi y a otros que estén en mi situación.

Saludos

Imagen de Fonseca

¿Que error te lanza?

Hola, en teoría esa simple función es la que estoy usando para imprimir en muchas impresoras de tickets, lo mejor seria que compartieras el error que te esta lanzado.

Imagen de ezamudio

freemarker

Y FreeMarker hacer el render de ese HTML? Lo convierte en qué cosa o qué?

Estaría bueno poder usar markdown en vez de HTML, para tickets más sencillos...

Imagen de genitalico

mmmm eso del free maker me

mmmm eso del free maker me saco de onda.. como dice ezamudio como lo renderizas? se m ocurre que tal vez se pueda meter en un jtexpane o algo asi y que lo renderice el mismo jtextpane pero no le veo el caso o no se..
como la utilizas tu??

Imagen de Fonseca

¿FreeMarker? No...

Confusión..... apolonioluis fue quien publicó el ejemplo de FreeMarker
yo sigo diciendo que para mi, lo mas fácil es esto...

String cadena = "MI TICKET";
DocFlavor flavor = DocFlavor.BYTE_ARRAY.AUTOSENSE;
//Aqui selecciona tu impresora, el ejemplo tomará la impresora predeterminada.
        PrintService service = PrintServiceLookup.lookupDefaultPrintService();
        DocPrintJob pj = service.createPrintJob();
        byte[] bytes = cadena.getBytes();
        Doc doc = new SimpleDoc(bytes, flavor, null);
        try {
            pj.print(doc, null);
           
        } catch (PrintException e) {
        }
Imagen de Omar2

IMrimir Tickets

Gracias po tu interés. La verdad, copio y pego en una clase y después de " FileWriter... " no reconoce Netbeans ¿Podrías poner el código completo por favor?

m codigo es de una aplicacion

m codigo es de una aplicacion J2SE (aplicacion swing), no se que parte del codigo necesitas que te explique.

variable linea e "impresora boleta"

FileWriter file = new FileWriter(Impresora_Boleta);
impresora_boleta que viene a ser o que se la da o de donde se obtiene

y , lineas = 7;

que viene a ser linea y donde se usa? agradeceria tu ayuda por favor.

ayuda con variables

FileWriter file = new FileWriter(Impresora_Boleta);
impresora_boleta que viene a ser o que se la da o de donde se obtiene
y , lineas = 7;
que viene a ser linea y donde se usa? agradeceria tu ayuda por favor.

Dicupa la demora mi

Dicupa la demora mi Impresora_Boleta es:
Impresora_Boleta es mi variable que la recpuero de la base de datos, como uso una ticketera con sistema operativo linux mi ruta para la impresion es
Impresora_Boleta=/dev/usb/lp0 (viene de mi base de datos, puerto usb de impresion ).

Imagen de black_ice_gt

Por si les sirve

POR SI ALGUNA VEZ LES SIRVE AQUI SE LOS DEJO:
ESTO FUNCIONA CON UNA IMPRESORA DE TICKETS EPSON TM-U220 CONECTADA AL PUERTO COM4.....

import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

public class MainClass {
public static void main(String[] args) {
try {
FileWriter fw = new FileWriter("COM4:");

PrintWriter pw = new PrintWriter(fw);
String s = "PROBANDO ";

int i, len = s.length();

for (i = 0; len > 80; i += 80) {
pw.print(s.substring(i, i + 80));
pw.print("\r\n");
len -= 80;
}

if (len > 0) {
pw.print(s.substring(i));
pw.print("\r\n");
}

pw.close();
} catch (IOException e) {
System.out.println(e);
}
}
}

Erro imprimir desde apache como servidor

Buenos dias, he impreso todo bien en mi ticketera usando el IDE netbeans (apache 8084), todo bien, con corte etc etc, ahora surge un problema, genero el war, y los subo a mi servidor apache con puerto 8090 y resulta que no me imprime pq no encuentra la impresora, lo hice incluso desde mi laptop, instalandome el apache solo como servidor y no desde el netbeans... y nada... hay aguna libreria que tengo que agregar a mi proyecto para imprimir normal, o que puede pasar... ayuda por favor...

Imagen de ezamudio

apache?

Pero dónde poner el war? porque apache es el puro web server, no?

netbeans

Apache Tomcat
Bien, tengo un servidor de aplicaciones...
en mi laptop en la que voy desarrollando el proyecto puedo imprimir en la ticketera (en red).
Subi el war al servidor y oh sorpresa, no puedo imprimir en la ticketera pq no lo encuentra (estando como impresora por defecto y todo).
estoy abezon toda una mañana y decidi instalar el ide en el servidor, ejecuto el proyecto desde el netbeans y le doy a imprimir en la ticketera y normal lo imprimi, incluso desde otra maquina, asi que ese proyecto le doy clean and build y lo subo al servidor(siendo la misma maquina pero con una ruta diferente) y no puedo imprimir en la ticketera ...
espero que me haya entendido.

en resumen puedo imprimir ejecutandolo desde el ide, pero ya subiendo el war no.

Deja de imprimir

Ademas de ello, de poder imprimir(desde el IDE) solo puedo hacerlo unas 3 0 4 veces ya que luego no puedo, es que se satura la impresion? es que hay que reiniciar el servicio de impresion o algo?

impresora epson tm-t20 x usb

como logro mandr una impresion desde java a dicha impresora que solo tiene pureto usb???

Imagen de apolonioluis

esto me ha funcionado a

esto me ha funcionado a mi:

 
        int margin = 0;
        String output = ticket;
        JTextPane jtp = new JTextPane();
        jtp.setText(output);
        jtp.setFont(new Font(Font.MONOSPACED, 0 , 8));    
        PrinterJob printerJob = PrinterJob.getPrinterJob();
        PageFormat pageFormat = printerJob.defaultPage();        
        Paper paper = new Paper();      
        //paper.setSize(180.0, (double) (paper.getHeight() + lines * 10.0));
        paper.setImageableArea(margin, margin, paper.getWidth() - margin * 2, paper.getHeight() - margin * 2);
        pageFormat.setPaper(paper);        
        pageFormat.setOrientation(PageFormat.PORTRAIT);
        printerJob.setPrintable(jtp.getPrintable(null, null), pageFormat);
        printerJob.print();        
        //printerJob.printDialog();

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">