Metodo para imprimir ticket en Java

Este método sirve para generar ticket y enviar la impresión directamente a la impresora.

    
void imprimirFactura(){

        PrinterMatrix printer = new PrinterMatrix();

        Extenso e = new Extenso();

        e.setNumber(101.85);


        //Definir el tamanho del papel para la impresion  aca 25 lineas y 80 columnas
        printer.setOutSize(60, 80);
        //Imprimir * de la 2da linea a 25 en la columna 1;
       // printer.printCharAtLin(2, 25, 1, "*");
        //Imprimir * 1ra linea de la columa de 1 a 80
       printer.printCharAtCol(1, 1, 80, "=");
        //Imprimir Encabezado nombre del La EMpresa
       printer.printTextWrap(1, 2, 30, 80, "FACTURA DE VENTA");
       //printer.printTextWrap(linI, linE, colI, colE, null);
       printer.printTextWrap(2, 3, 1, 22, "Num. Boleta : " + txtVentaNumeroFactura.getText());
       printer.printTextWrap(2, 3, 25, 55, "Fecha de Emision: " + dateFechaVenta.getDate());
       printer.printTextWrap(2, 3, 60, 80, "Hora: 12:22:51");
       printer.printTextWrap(3, 3, 1, 80, "Vendedor.  : "+ txtVentaIdVendedor.getText() +" - " + txtVentaNombreVendedor.getText());
       printer.printTextWrap(4, 4, 1, 80, "CLIENTE: " + txtVentaNombreCliente.getText());
       printer.printTextWrap(5, 5, 1, 80, "RUC/CI.: " + txtVentaRucCliente.getText());
       printer.printTextWrap(6, 6, 1, 80, "DIRECCION: " + "");
       printer.printCharAtCol(7, 1, 80, "=");
       printer.printTextWrap(7, 8, 1, 80, "Codigo          Descripcion                Cant.      P  P.Unit.      P.Total");
       printer.printCharAtCol(9, 1, 80, "-");
       int filas = tblVentas.getRowCount();

        for (int i = 0; i < filas; i++) { printer.printTextWrap(9 + i, 10, 1, 80, tblVentas.getValueAt(i,0).toString()+"|"+tblVentas.getValueAt(i,1).toString()+"| "+tblVentas.getValueAt(i,2).toString()+"| "+tblVentas.getValueAt(i,3).toString()+"|"+ tblVentas.getValueAt(i,4).toString()); } if(filas > 15){
        printer.printCharAtCol(filas + 1, 1, 80, "=");
        printer.printTextWrap(filas + 1, filas + 2, 1, 80, "TOTAL A PAGAR " + txtVentaTotal.getText());
        printer.printCharAtCol(filas + 2, 1, 80, "=");
        printer.printTextWrap(filas + 2, filas + 3, 1, 80, "Esta boleta no tiene valor fiscal, solo para uso interno.: + Descripciones........");
        }else{
        printer.printCharAtCol(25, 1, 80, "=");
        printer.printTextWrap(26, 26, 1, 80, "TOTAL A PAGAR " + txtVentaTotal.getText());
        printer.printCharAtCol(27, 1, 80, "=");
        printer.printTextWrap(27, 28, 1, 80, "Esta boleta no tiene valor fiscal, solo para uso interno.: + Descripciones........");

        }
        printer.toFile("impresion.txt");

      FileInputStream inputStream = null;
        try {
            inputStream = new FileInputStream("impresion.txt");
        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
        }
        if (inputStream == null) {
            return;
        }

        DocFlavor docFormat = DocFlavor.INPUT_STREAM.AUTOSENSE;
        Doc document = new SimpleDoc(inputStream, docFormat, null);

        PrintRequestAttributeSet attributeSet = new HashPrintRequestAttributeSet();

        PrintService defaultPrintService = PrintServiceLookup.lookupDefaultPrintService();


        if (defaultPrintService != null) {
            DocPrintJob printJob = defaultPrintService.createPrintJob();
            try {
                printJob.print(document, attributeSet);

            } catch (Exception ex) {
                ex.printStackTrace();
            }
        } else {
            System.err.println("No existen impresoras instaladas");
        }

        //inputStream.close();
     
    }

Pueden descargar el código desde este enlace tambien es necesario que tengan la libreria Util.jar, aca les dejo el enlace para que lo puedan descargar esta comprimido en un rar

118 comentarios en “Metodo para imprimir ticket en Java”

  1. Hola Elias, tanto el PrinterMatiz como el Extenso lo debes importar. Pero tambien necesitas tener la librerir Util.jar. Disculpame no he detallado eso, pero ahora actualizo el post y tambien pondo el link de descargar del Util.jar

    1. hola que tal, una pregunta, la impresion debe ser unicamente con impresara de tickets? o puedo hacer la prueba con una impresora normal de una hoja.

      1. Hola Alejandro, no necesariamente debes imprimir en una impresora matricial, tambien puedes usar una impresora PDF o una impresoara normal. Si te fijas hay un archivo que se crear y se reescribe «impresion.txt». Ahi se carga el diseño de la impresión y ese se envia a la impresora.

  2. no se le puede modificar el tamaño de la letra?? y la impresion se puede ejecutar en una impresora de tickets,, si reconoce el formato?? te agradeceria muchisimo si me pudieras ayudar en eso

  3. si quisiera agregar una impresora directamente en el codigo,,, en que parte del codigo tendria que agregarla?? alguien sabe donde,, por favor necesito esa ayuda se los agradeceria muchisimo

    1. El cajón tiene que estar conectado a la impresora, tienes que ir al panel de control y dentro de las propiedades de la impresora buscar en las configuraciones para marcar la opción de que el cajón se abra automáticamente al imprimir… así lo hice yo con una epson que tengo

  4. ================================================================================
    FACTURA DE VENTA
    Num. Boleta : 1 Fecha de Emision: 07/02/2016 Hora: 12:22:51
    Vendedor. : –
    CLIENTE: BOLETAS
    RUT.: 16857854-7
    ================================================================================
    Codigo Descripcion Cant. P P.Unit. P.Total
    ——————————————————————————–
    adad|limpieza nova| javon| 1200|1 <—– me salen corridos

    ================================================================================

    ================================================================================
    Esta boleta no tiene valor fiscal, solo para uso interno.: + Descripciones…..

    así me sale en la descripción corridos al abrir el txt , alguna idea de porque ¡?

    1. Hola, excelente tu código, me sacó de un gran apuro. Muchas gracias…. Tengo una duda, no sabes de que manera puedo hacer para que corte el papel??? Lo estoy ocupando con una impresora de tickets epson tm-t20ii… Muchas gracias, saludos…

        1. Creo que eso dependera del tipo de impresora que tengas, pero prueba con este codigo y cuentanos tu experienceia

          DocPrintJob job = PrintServiceLookup.lookupDefaultPrintService().createPrintJob();  
          byte[] bytes = {27, 100, 3};
          DocFlavor flavor = DocFlavor.BYTE_ARRAY.AUTOSENSE;
          Doc doc = new SimpleDoc(bytes, flavor, null);
          job.print(doc, null);
          
          1. En que parte del codigo o por que parte la reemplazo para que funcione ya lo he intentado de algunas maneras y no funciona. Sale error en esas lineas de codigo.

          2. job.print(doc, null);

            //debajo de la impresión del ticket creo esta otra impresion con los codigos de corte
            DocPrintJob job2 = PrintServiceLookup.lookupDefaultPrintService().createPrintJob();
            byte[] bytes2 = {27, 109, 1};
            DocFlavor flavor2 = DocFlavor.BYTE_ARRAY.AUTOSENSE;
            Doc doc2 = new SimpleDoc(bytes2, flavor2, null);
            job2.print(doc2, null);

  5. hola agradezco el aporte tengo unas dudas como le anexo a la imprecion un logotipo y un codigo de barras
    de antemano agradezco por su ayuda

  6. La libreria Util.jar la desarrollaste tu? Si es asi, tienes documentacion de la libreria para saber como usar las funciones de las clases que contiene? Y sino donde puedo checar. Está interesante. Y gracias por compartir tu codigo

    1. Hola Carlos, no lo he probado con varias impresoras, pero lo que el codigo hace es generar un archivo txt con el tiket y deberia funcionar con cualquier tipo de impresora no solamente matricial.

      1. Pero al generar el archivo txt automáticamente se manda a imprimir o ¿se tiene que hacer otro paso? gracias por tus comentarios

        1. Directamente ya manda a impresora Carlos, no es necesario hacer mas nada. Fijate de la linea 64 al 74 es la parte que se encarga de enviar a la impresora.

          1. Muchas gracias admin, otra duda y disculpa la molestia, cuando reviso el archivo «.txt » todo sale desacomodado no hay problema?

  7. Hola, Oye estoy probando el código y me marca error en la linea: for ( i = 0; i< filas; i++)
    quisiera saber como funciona ese lo que esta dentro de los paréntesis del for , y tambien de lo siguiente: if(filas > 15)
    ….por favor

    1. Creo que dependiendo del tamaño que tenga la fila imprimirá en cierto lugar del ticket por ejemplo si la linea fuere mayor a 15 le suma uno a la fila por ejemplo:

      // printer.printCharAtCol(filas + 1, 1, 80, «=»);
      // printer.printTextWrap(filas + 1, filas + 2, 1, 80, «TOTAL A PAGAR » + txtVentaTotal.getText());
      // printer.printCharAtCol(filas + 2, 1, 80, «=»);
      // printer.printTextWrap(filas + 2, filas + 3, 1, 80, «Esta boleta no tiene valor fiscal,.»);

      Pero en dado caso que no lo sea el mismo establece una distancia ejemplo:

      // printer.printCharAtCol(25, 1, 80, «=»);
      // printer.printTextWrap(26, 26, 1, 80, «TOTAL A PAGAR » + txtVentaTotal.getText());
      // printer.printCharAtCol(27, 1, 80, «=»);
      // printer.printTextWrap(27, 28, 1, 80, «Esta boleta no tiene valor fiscal, solo»);

  8. Socorro, ya no se que hacer.
    Me crea un archivo de texto, que si lo imprimo sale el ticket perfecto, pero si lo intento imprimir desde java, me envía a imprimir el archivo, sale en la cola de impresión y ahí se queda; no imprime nada.

  9. Hola a mi me manda a imprimir veo el icono de impresión en la barra de tareas pero al final no imprime nada que podrá ser .
    copio tu código , modifico rut y nombre de cliente , también el nombre de la tabla y creo un botón y le pongo imprimirFactura() ;
    Pero no pasa nada , si se crea el txt pero no manda a imprimir o manda pero la impresor ano imprime

  10. Buenas tardes me imprime correctamente pero tengo un deltalle en el JTable imprime asi
    Cantidad Descripcion P.Unit. Importe
    5 |COCA COLA 1L |12.5|62.5
    3 |COSTILLA DE CHANCHO |20|60 –> cuando la descripcion es muy grande desplaza los valores de P.Unit. Importe queria saber como puedo ordenar intente con el printer.printTextWrap() pero nada.

    1. Buenas..excelente el codigo..
      Pero yo modifique mas un poco para q se pueda alinear la impresion y q eliminen los espacios..
      lo que necesito es alinear el monto total hacia la izquierda..
      si me pueden ayudar o si quieren el codigo modificado les dejo mi correo
      elviojhoide@gmail.com

  11. la idea es que imprima los datos del JTable asi :
    Cantidad Descripcion P.Unit. Importe
    5 COCA COLA 1L 12.5 62.5
    3 COSTILLA DE CHANCHO 20 60
    sin que modifique los espacion del P.Unit. e Importe,saludos

  12. men, te explico, estoy imprimiendo con una impresora normal en hp en red, cuando mando la impresion, si la manda pero no imprime nada, sera por que esta en red????? solo funciona con impresoras locales conectadas por usb????

  13. Quien tiene el codigo mas completo, porque el jar no funciona y ademas importo la libre java.util y me siguen apareciendo los errores en el codigo. Gracias

  14. eh probado el codigo la verdad muy excelente , amigo , solo mejore lo que alguno preguntaba para que salgan los precio y total estatico sin que se mueva

    el codigo es:
    int filas = tblVenta.getRowCount();
    for (int i = 0; i < filas; i++) {
    printer.printTextWrap(9 + i, 10, 1, 80, tblVenta.getValueAt(i,0).toString());
    printer.printTextWrap(9 + i, 10, 50, 80, tblVenta.getValueAt(i,1).toString());
    printer.printTextWrap(9 + i, 10, 60, 80, tblVenta.getValueAt(i,2).toString());
    printer.printTextWrap(9 + i, 10, 70, 80, tblVenta.getValueAt(i,3).toString());
    }

  15. Muchas Gracias amigo, MUY BUEN APORTE pero tengo un problema que veo que varios tenemos. El ticket sale desordenado y al imprimirlo por aparte queda genial. Pero si lo imprimo desde JAVA solo sale la primer línea marcada de ====================================
    Al parecer lo esta mandando imprimir de corrido en un solo renglon y ni poniendole \n hace salto de linea. Sabes por que es? y de igual forma si imprimo en PDF me manda un error 2910 Internal GhostScript error.
    Si pudieras ayudarme te lo agradecería mucho mas. Saludos Cordiales.

  16. Me imprime un espacio en blanco enorme como hago para que si es solo un producto no me deje un espacio en blanco enorme hasta llegar al final?

  17. buenos dias amigo tengo una duda
    me marca un error y me dice que tengo que crear la clase FileInputStream
    me puedes colaborar por favor?
    FileInputStream inputStream = null;
    try {
    inputStream = new FileInputStream(«impresion.txt»);
    } catch (FileNotFoundException ex) {
    ex.printStackTrace();
    }
    if (inputStream == null) {
    return;
    }

    DocFlavor docFormat = DocFlavor.INPUT_STREAM.AUTOSENSE;
    Doc document = new SimpleDoc(inputStream, docFormat, null);

    PrintRequestAttributeSet attributeSet = new HashPrintRequestAttributeSet();

    PrintService defaultPrintService = PrintServiceLookup.lookupDefaultPrintService();

    if (defaultPrintService != null) {
    DocPrintJob printJob = defaultPrintService.createPrintJob();
    try {
    printJob.print(document, attributeSet);

    } catch (Exception ex) {
    ex.printStackTrace();
    }
    } else {
    System.err.println(«No existen impresoras instaladas»);
    }

    //inputStream.close();

    }

    1. Hola, que modelo es tu impresora.
      para una bixolon srp270 yo hago esto:

      byte[] cutP = new byte[] { 0x1d, ‘V’, 1 };
      printerService.printBytes(«BIXOLON SRP-270», cutP);

      otro java.
      import javax.print.Doc;
      import javax.print.DocFlavor;
      import javax.print.DocPrintJob;
      import javax.print.PrintService;
      import javax.print.PrintServiceLookup;
      import javax.print.SimpleDoc;
      import javax.print.attribute.HashPrintRequestAttributeSet;
      import javax.print.attribute.PrintRequestAttributeSet;

      public void printBytes(String printerName, byte[] bytes) {

      DocFlavor flavor = DocFlavor.BYTE_ARRAY.AUTOSENSE;
      PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();

      PrintService printService[] = PrintServiceLookup.lookupPrintServices(
      flavor, pras);
      PrintService service = findPrintService(printerName, printService);
      PrintService defaultPrintService = PrintServiceLookup.lookupDefaultPrintService();

      if (defaultPrintService != null) {
      DocPrintJob printJob = defaultPrintService.createPrintJob();
      Doc doc = new SimpleDoc(bytes, flavor, null);
      try {
      printJob.print(doc, null);

      } catch (Exception ex) {
      ex.printStackTrace();
      }
      } else {
      System.err.println(«No existen impresoras instaladas»);
      }
      }

      ojo el printermatrix tiene una function :
      printer.toPrinter(impresora, escCommands);
      //esccommands son los bytes q mandaras

      1. Disculpa estaba revisando tu código, en la linea
        PrintService service = findPrintService(printerName, printService);

        findPrintService es algún otro método??

    1. esto lo resolvi, pero ahora el problema es que cuando imprimo, la ticketera corta el papel a la mitad, cuando mando a imprimir otra vez sale la mitad que falta mas la mitad del nuevo.. AUXILIO mande a comprar 6 ticketeras a un cliente.

        1. hola, lo consegui, aumente 10 lineas mas al tamaño del archivo

          aqui
          minimo para mi formato de ticket son 20 lineas fijas (en realidad 12 y 8 son de espacios en blanco, considera estos espacios para la bixolon srp 270)
          printer.setOutSize(20 + lineas_detalle_producto, 40);

        2. buenas no tengo tipo de impresora asi..pero yo hice en netbeans y para q se ajuste bien tenes q hacer algunos calculos..

    2. Fácil, has un método que retorne la cantidad de productos que tiene su factura y a eso le sumas las lineas estáticas de tu factura como nombre, Nit, cliente, fecha, esas de por si no cambian, cuantas las lineas estáticas y le sumas lo que le retorna el método ya sea uno o mas productos.

  18. mi problema es que el ticket lo imprime por debajo y al final saca un error, como dijieron, que para imprimir no funcionaba si estaba dentro de del IDE netbeans, pues lo compile , pero no hace absolutamente nada en la impresora.
    el error que sale al final viene cuando esta este codigo:
    que pusiste en el post:

    //imprimirlo por impresora
    DocFlavor flavor = DocFlavor.BYTE_ARRAY.AUTOSENSE;
    Doc document = new SimpleDoc(inputStream, flavor, null);

    PrintRequestAttributeSet attributeSet = new HashPrintRequestAttributeSet();

    PrintService defaultPrintService = PrintServiceLookup.lookupDefaultPrintService();

    if (defaultPrintService != null) {
    DocPrintJob printJob = defaultPrintService.createPrintJob();
    try {
    printJob.print(document, attributeSet);

    } catch (Exception ex) {
    ex.printStackTrace();
    }
    } else {
    System.err.println(«No existen impresoras instaladas»);
    }

    y por el que lo cambie fue por este

    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) {
    }

    y con ese se quito el error
    pero aun asi no me imprime nada …
    AYUDA PORFAVOR si alguien tuvo el problema y lo resolvio.

    imprimirtextSize:6
    limitH:1
    limitV:50
    wrap:1
    wraped[0]:FRUVER
    page[1][30]:FRUVER
    textSize:11
    limitH:1
    limitV:21
    wrap:1
    wraped[0]:Nit: 124566
    page[2][1]:Nit: 124566
    textSize:29
    limitH:1
    limitV:30
    wrap:1
    wraped[0]:Direccion: CALLE AVENIDA ENEA
    page[2][25]:Direccion: CALLE AVENIDA ENEA
    textSize:17
    limitH:1
    limitV:20
    wrap:1
    wraped[0]:telefono: 8765434
    page[2][60]:telefono: 8765434
    textSize:4
    limitH:0
    limitV:79
    wrap:1
    wraped[0]:yuii
    page[3][1]:yuii
    textSize:42
    limitH:1
    limitV:79
    wrap:1
    wraped[0]:Producto Cant. V.Total
    page[7][1]:Producto Cant. V.Total
    textSize:18
    limitH:1
    limitV:79
    wrap:1
    wraped[0]:papitas| 4.5| 6750
    page[9][1]:papitas| 4.5| 6750
    textSize:20
    limitH:0
    limitV:79
    wrap:1
    wraped[0]:zanahoria| 4.5| 9000
    page[10][1]:zanahoria| 4.5| 9000
    textSize:20
    limitH:-1
    limitV:79
    wrap:1
    wraped[0]:zanahoria| 4.5| 9000
    page[11][1]:zanahoria| 4.5| 9000
    textSize:23
    limitH:-2
    limitV:79
    wrap:1
    wraped[0]:zanahoria| 60.0| 120000
    page[12][1]:zanahoria| 60.0| 120000
    textSize:23
    limitH:-3
    limitV:79
    wrap:1
    wraped[0]:zanahoria| 60.0| 120000
    page[13][1]:zanahoria| 60.0| 120000
    textSize:26
    limitH:1
    limitV:79
    wrap:1
    wraped[0]:TOTAL A PAGAR: $264.750,00
    page[6][1]:TOTAL A PAGAR: $264.750,00
    textSize:10
    limitH:1
    limitV:79
    wrap:1
    wraped[0]:EFECTIVO:
    page[6][1]:EFECTIVO:
    textSize:10
    limitH:1
    limitV:79
    wrap:1
    wraped[0]:SU CAMBIO
    page[6][1]:SU CAMBIO

    Exception in thread «AWT-EventQueue-0» java.lang.IllegalArgumentException: data is not of declared type
    at javax.print.SimpleDoc.(SimpleDoc.java:103)

    1. por si a alguien le sirve. a mi no me imprimia pero puse la impresora de forma generica y funciono perfecto inclusive corriendolo por el IDE netbeans

    2. Buenas..excelente el codigo..
      Pero yo modifique mas un poco para q se pueda alinear la impresion y q eliminen los espacios..
      lo que necesito es alinear el monto total hacia la izquierda..
      si me pueden ayudar o si quieren el codigo modificado les dejo mi correo
      elviojhoide@gmail.com

  19. YA LOGRE HACER QUE IMPRIMA EN UNA Epson LX-300+II, PARA REPORTES CON PAPEL CONTINUO DE 80 COLUMNAS, Y EN UNA TICKETERA BIXOLON SRP 270, CUALQUIER CONSULTA ESCIBRANME A MI CORREO LEOG.1992@GMAIL.COM, TODO GRATIS :D,
    GRACIAS AL Q PUBLICO ESTE CODIGO, VALE MUCHO CON SU LIBRERIA UTIL.JAR

  20. Hola, tengo una impresora modelo OKIPOS TSP800, con el ejemplo que pones, sabe si se puede imprimir sin problemas? lo otro la impresora esta por red (ip y puerto) como indico esto en el codigo?

    Saludos y gracias

  21. He leido la documentación del java Util y he logrado crear con exito mi tickete, tambien he hecho que el tamaño del papel sea dinamico. el unico problema es que no he podido mandar a que corte el papel apenas se termine de imprimir. tienes algun codigo para mandar a cortar el papel?

  22. hola compañeros al igual que ustedes batalle mucho para realizar un ticket pero ya quedo
    descripción :
    – este esta creado para impresora Ec line de papel 58mm
    – Ticket dinámico ajustable al la cantidad de productos
    – productos alineados
    – precios a lineados a la derecha

    metodo:

    void imprimirTicketinicio(){

    try {

    PrinterMatrix printer = new PrinterMatrix();

    Extenso e = new Extenso();

    e.setNumber(20.30);

    //Definir el tamanho del papel para la impresion de dinamico y 32 columnas
    int filas = punto_Venta.jtbl_venta.getRowCount();
    int tamaño = filas+13;
    printer.setOutSize(tamaño, 32);

    //Imprimir = 1ra linea de la columa de 1 a 32
    printer.printTextWrap(0, 1, 0, 32, «================================»);
    printer.printTextWrap(1, 1, 0, 32, » Nombre del negocio «);
    printer.printTextWrap(3, 1, 0, 32, » direccion «);
    printer.printTextWrap(4, 1, 0, 32, » direccion «);
    printer.printTextWrap(5, 1, 0, 32, » codigo postal y rf «);
    printer.printTextWrap(6, 1, 0, 17, «Fecha: » + punto_Venta.jL_fecha.getText());
    printer.printTextWrap(6, 1,18, 32, «Hora: » + punto_Venta.jL_hora.getText());
    printer.printTextWrap(7, 1, 0, 32, «Numero de Venta: «+ punto_Venta.jtx_id_venta.getText());
    printer.printTextWrap(8, 1, 0, 32, «Le atendio: «+ punto_Venta.jtx_vendedor.getText());
    printer.printTextWrap(9, 1, 0, 32, «Cliente: » + punto_Venta.jtx_cliente.getText());
    printer.printTextWrap(10,1, 0, 32, «——————————–«);
    printer.printTextWrap(11,1, 0, 32, «DESCRIPCION CANT PRECIO IMPORTE»);
    printer.printTextWrap(12,1, 0, 32, » «);
    for (int i = 0; i < filas; i++) {
    int p = 13+i;
    printer.printTextWrap(p , 1, 0, 12 ,punto_Venta.jtbl_venta.getValueAt(i,1).toString());
    printer.printTextWrap(p , 1, 13, 16, punto_Venta.jtbl_venta.getValueAt(i,5).toString());
    String pre= printer.alinharADireita(7, punto_Venta.jtbl_venta.getValueAt(i,4).toString());
    printer.printTextWrap(p , 1, 17, 24, pre);
    String inp= printer.alinharADireita(7,punto_Venta.jtbl_venta.getValueAt(i,6).toString());
    printer.printTextWrap(p , 1, 25, 32, inp);

    }
    ///CREAR CARPETA tmp EN UNIDAD C
    printer.toFile("C:\\tmp\\impresion.txt");

    FileInputStream inputStream = null;
    try {
    inputStream = new FileInputStream("C:\\tmp\\impresion.txt");
    } catch (FileNotFoundException ex) {
    ex.printStackTrace();
    JOptionPane.showMessageDialog(punto_Venta, "Error al guardar");

    }
    if (inputStream == null) {
    return;
    }

    DocFlavor docFormat = DocFlavor.INPUT_STREAM.AUTOSENSE;
    Doc document = new SimpleDoc(inputStream, docFormat, null);

    PrintRequestAttributeSet attributeSet = new HashPrintRequestAttributeSet();

    PrintService defaultPrintService = PrintServiceLookup.lookupDefaultPrintService();

    if (defaultPrintService != null) {
    DocPrintJob printJob = defaultPrintService.createPrintJob();
    try {
    printJob.print(document, attributeSet);

    } catch (Exception ex) {
    ex.printStackTrace();
    }
    } else {
    System.err.println("No existen impresoras instaladas");
    }

    inputStream.close();
    imprimirFin();
    } catch (Exception e) {
    JOptionPane.showMessageDialog(punto_Venta, "Error al imprimir");

    }
    }

    void imprimirFin(){

    PrinterMatrix printer = new PrinterMatrix();

    Extenso e = new Extenso();

    e.setNumber(20.30);

    printer.setOutSize(13,32);
    DecimalFormat formateador = new DecimalFormat("######.00");
    String sub= printer.alinharADireita(10,punto_Venta.jtxt_subtotal.getText());
    printer.printTextWrap(1, 1, 5, 32, "Subtotal "+sub);
    String tot= printer.alinharADireita(10,punto_Venta.jtxt_total.getText());
    printer.printTextWrap(2, 1, 5, 32, "Total a pagar $"+tot);

    String efe= printer.alinharADireita(10,punto_Venta.jtx_efectivo.getText());
    printer.printTextWrap(3, 1, 5, 32, "Efectivo $"+efe);
    String cam= printer.alinharADireita(10,punto_Venta.jtx_cambio.getText());
    printer.printTextWrap(4, 1, 5, 32, "Cambio $"+ cam);
    printer.printTextWrap(5, 1, 0,32, "——————————–");
    printer.printTextWrap(6, 1, 0,32, " !Gracias por su preferencia! ");
    printer.printTextWrap(7, 1, 0,32, "================================");

    printer.toFile("C:\\tmp\\impresion1.txt");

    FileInputStream inputStream = null;
    try {
    inputStream = new FileInputStream("C:\\tmp\\impresion1.txt");
    } catch (FileNotFoundException ex) {
    ex.printStackTrace();
    }
    if (inputStream == null) {
    return;
    }

    DocFlavor docFormat = DocFlavor.INPUT_STREAM.AUTOSENSE;
    Doc document = new SimpleDoc(inputStream, docFormat, null);

    PrintRequestAttributeSet attributeSet = new HashPrintRequestAttributeSet();

    PrintService defaultPrintService = PrintServiceLookup.lookupDefaultPrintService();

    if (defaultPrintService != null) {
    DocPrintJob printJob = defaultPrintService.createPrintJob();
    try {
    printJob.print(document, attributeSet);

    } catch (Exception ex) {
    ex.printStackTrace();
    }
    } else {
    System.err.println("No existen impresoras instaladas");
    }

    //inputStream.close();

    }

    ASI QUEDA

    ================================
    Papeleria

    DIRECCION
    DIRECCION
    CODIGO POSTA Y RFC
    Fecha: 05/08/2017 Hora: 16:46:12
    Numero de Venta: 40
    Le atendio: pendiente
    Cliente: De mostrador
    ——————————–
    DESCRIPCION CANT PRECIO IMPORTE

    LIBRO 1 280.00 280.00

    Subtotal 280.00
    Total a pagar $ 280.00
    Efectivo $ 300.00
    Cambio $ 20.00
    ——————————–
    !Gracias por su preferencia!
    ================================

  23. Como puedo imprimir una imagen. en el encabezado de un ticket. usando los metodos anteriores o de q otra manera. gracias de antemano

  24. Necesito ayuda por favor
    Alguien que lo realizo con un jasper report usando una plantilla jrxml?

    Como lo hicieron o alguien que tenga idea de como hacerlo. Gracias.

  25. Hola como debería hacer si por ejemplo el ticket soporta la impresión de 10 productos pero alguien realiza una compra de 20, ahi serian dos tickets y el total en ambas facturas van a ser diferentes y por ahora solo logro imprimir el valor total de la venta en ambos tickets, espero se me entienda gracias.

  26. Hola amigo primeramente gracias por tu código pero tengo un problema a mi me manda a imprimir veo el icono de impresión en la barra de tareas pero al final no imprime nada que podrá ser .
    copio tu código , modifico rut y nombre de cliente , también el nombre de la tabla y creo un botón y le pongo imprimirFactura() ;
    Pero no pasa nada , si se crea el txt pero no manda a imprimir o manda pero la impresor ano imprime

  27. hola, muy buen post me funciono perfectamente solo lo modifique un poco para lo que lo necesito.
    pero una duda amigo ¿alguna forma de imprimir una imagen? ya sea un logo o un codigo de barras.

  28. Alguna Idea por favor para cambiar el Tamaño de la Letra, y modificar el idioma br a español en cuanto a Extenso e = new Extenso(); lee numero en purtugues …..

  29. Hola. estoy tratando de usar el código, y necesito que me orienten
    tengo una transacción de punto de ventas del cual quiero imprimir ticket
    quiero saber si tengo que crear una clase para usar el método o copio el método directo en la transacción para poder utilizar
    aguardo

    1. hola mano, como hago para poder agregar mas columnas(columna cantidad, columna precio unitario,columna sub total), por favor necesito ayuda en eso.

  30. Hola, socorro alguien que me ayude mi problema es que cuando imprimo, imprime bien hasta la parte de las tablas osea el descripción nombre de producto y sus precios hasta ahi todo bien luego de eso se saltea una gran cantidad de líneas dejando un gran espacio en blanco después de eso resien ponne el resto y tampoco me sale el total
    Gracias de Atemano

  31. Leer la información inicial de archivo.Artículos, (clave, nombre y precio)
    2.Escribir la información procesada en Articulos y archivo Ticket
    3.Debe realizarse con interfaz gráfica con swing.
    4.Debe realizar el manejo de la información como se vio en las clases utilizar ArrayList.
    5.Se deberá realizar una ventana principal conArticulos(clave, nombre, precio)
    6.Se tendrá otra ventanadonde se capture los ticketscon Tickets(clave, cantidad nombre, precio,importe), así también deberá calcular la cantidad total de artículosy el total del ticket..
    7.En esa capturasolo se captura la clave del artículo, y cantidad, y a partir de la clave, obtendrála información de Articulosde nombrey precio, y traídosestos datos, se calcula el importe del renglón. Así se van capturando los artículos.Hasta debajo dela tabla debe mostrar el total de artículosque se compran y el importe del ticket.
    8.No debe permitir abrir varias ventanas si se hace con JFrame, de preferencias las subventanas hacerlas con JDialog
    9.Las capturas de números deben validarse para que solamente acepte números
    10.Las capturas en texto, pasar todo a mayúsculas.
    11.La clave en tickets deben ser clave de artículos existentes, para eso se deben capturar primero los artículos.Probar cuando menos con cuatro artículos.Utilizar una lista desplegable.
    12.Realizar la prueba que carga los datos del Archivo al inicio. y que los grabe al final.
    13.La clave en Artículos no se puede repetir.

  32. Hola amigo espero que estes bien..

    Viendo tu publica ion estoy en el proceso de imprimir ticket y me sirve full tu codigo.. pero necesito las librerias y no me permite descargar

  33. gracias por el post me sirvió mucho. por si alguien le pasa por ejemplo en mi programa imprimo una tabla donde esta una serie de productos con un «for» así como en el ejemplo pero me pasaba que como las descripciones unas eran mas cortas y otras mas largas si intentaba cuadrar los espacios de las filas con las columnas manualmente no me funcionaba porque no todas las columnas las palabras son del mismo tamaño lo que hice fue usar esta función(String.format(«%1$-20s»,cadena);el numero 20 es el tamaño de la cadena) que asigna un tamaño fijo a el String que uno desee de esta forma todas las columnas tenían un mismo tamaño y no se me veía desordenado.

    for (int i = 0; i 15){

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.