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

52514 Visto 32 Hoy

85 thoughts on “Metodo para imprimir ticket en Java”

      1. amigo excelente el codigo imprime ok pero los espacios entre lineas salen muy desapartados
        como podria solucionar esto.

  1. Amigo y las clases PrinterMatrix y Extenso? no las defines en ninguna parte..te agradeceria si completaras tu codigo

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

    1. Hola Jorge, la impresora se configura directamente en el sistema operativo, la impresiona envia directo a la impresora principal

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

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

  5. ================================================================================
    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);
          
  6. 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

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

  8. 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”);

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

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

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

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

  13. Hola buenas tardes,
    Alguien tiene el codigo con los imports o sin errores que me lo regale? es muy buen codigo.

  14. 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????

  15. Oye viejo, en el archivo de texto me están apareciendo espacios en blanco al final. Cómo los pudo quitar?

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

  17. 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());
    }

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

  19. 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?

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

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

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

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

  24. 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?

  25. 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!
    ================================

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

Deja un comentario

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