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

21778 Visto 40 Hoy

51 thoughts on “Metodo para imprimir ticket en Java

  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

  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.

  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?

Deja un comentario

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