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
Creo que no se subio totalmente el codigo
Bruno ahi ya actualice el códgio, tambien puse para que lo puedan descargar
No se porque no pones los imports, o todo el proyecto incluyendo la interfaz grafica.
amigo excelente el codigo imprime ok pero los espacios entre lineas salen muy desapartados
como podria solucionar esto.
amigo me podrias ayudar tengo dias
amigo si pudistes corregir ese problema?
Amigo y las clases PrinterMatrix y Extenso? no las defines en ninguna parte..te agradeceria si completaras tu codigo
no son clases, primero adiciona la libreria util y luego la importa en ese error.
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
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.
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.
OYE AMIGO DONDE SE GUARDA ESE ARCHIVO??
Hola.. Disculpa.. no logro.. realizar con exito la importación.. puedes. explcarme
Donde agrego el nombre de la impresora donde deseo imprimir
Hola Jorge, la impresora se configura directamente en el sistema operativo, la impresiona envia directo a la impresora principal
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
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
Hola, tienes algo de como abrir una caja registradora al imprimir el tiket ¡?
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
Como se puede probar que imprima directo pero en una impresora normal ¡?
================================================================================
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 ¡?
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…
oye bro encontraste algo para cortar el papel ?
Creo que eso dependera del tipo de impresora que tengas, pero prueba con este codigo y cuentanos tu experienceia
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.
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);
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
Hola Tesla, para poder imprimir logo y codigo de barras te recomiedo que utilises el Jasper Report. http://community.jaspersoft.com/
Hola
Como seria usando jasper report, ayuda por favor.
amigo pudiste solucionar eso del logo ?
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
Hola Tello, aca te dejo algunos enlaces con la documentación del Util.jar
https://docs.oracle.com/javase/7/docs/api/java/util/jar/JarFile.html
y este otro
http://www.programcreek.com/java-api-examples/java.util.jar.JarFile
Espero que te sirva. Saludos
Eso es otra clase, amigo parece que no quieres enseñarnos
Luis mas arriba en los comentarios explique que se necesita la libreria Util.jar unicamente que que funcione.
Amigo con este código se puede imprimir en cualquier impresora de tickets?
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.
Pero al generar el archivo txt automáticamente se manda a imprimir o ¿se tiene que hacer otro paso? gracias por tus comentarios
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.
Muchas gracias admin, otra duda y disculpa la molestia, cuando reviso el archivo «.txt » todo sale desacomodado no hay problema?
Carlos en el txt no sale ordenado pero al imprimir sale normal
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
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»);
amigo ayuda no me imprime como puedo selecionar la impresora al momento de presionar el boton muchas gracias
amigo me tira 2 paginas en la impresion porque pasa eso
gracias
Por qué a mi me saca solo una linea?
================================= < ES TODO LO QUE IMPRIME
Ya has correjido este error? como lo hiciste=?
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.
lo mismo me pasa a mi
me podrias ayudar que reconozca la clase PrinterMatrix
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
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.
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
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
como le puedo dar las medidas exastas de un ticket de la bodega aurrera
porque me sale muy grande
Hola buenas tardes,
Alguien tiene el codigo con los imports o sin errores que me lo regale? es muy buen codigo.
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????
Oye viejo, en el archivo de texto me están apareciendo espacios en blanco al final. Cómo los pudo quitar?
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
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());
}
Gracias por tu aporte sorullo
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.
Hola ya pudiste resolverlo esto? me pasa lo mismo
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?
viejo que chevere, funiona muy bien ahora como puedo cambiar el tipo de letra. o el tamaño.
es posible,,,
gracias
hola alquien sabe como puedo imprimir con papel fiscal en impresora normal?
Hola como puedo imprimir una imagen
Disculpa amigo solucionaste lo de la imagen??
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();
}
Hola Claudia, debes importar la clase Util.jar. puedes descargarlo desde esta url http://www.programcreek.com/java-api-examples/java.util.jar.JarFile
Una consulta, el tema de cortar la hoja? alguien logró hacerlo?
Gracias
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
Disculpa estaba revisando tu código, en la linea
PrintService service = findPrintService(printerName, printService);
findPrintService es algún otro método??
si, me olvide de poner la clase, es una clase q encontre por alli, la modifique,
Alguien pudo hacer que el tamaño del ticket sea automatico, no siempre van a comprar 1 producto
ticket de 40 columnas x n filas
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.
oye luis al fin que hiciste a mi tambien me pasa lo mismo . ayudame por favor
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);
buenas no tengo tipo de impresora asi..pero yo hice en netbeans y para q se ajuste bien tenes q hacer algunos calculos..
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.
tu mismo tienes la respuesta bro.
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)
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
tu impresora que marca y modelo es??
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
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
Hola
¿Podría imprimir un email recibido directamente en una impresora de tiquet ?
Gracias
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
Hola buenos dias como podria cambiar el tamaño de la letra
TE AMO, ME AYUDASTE MUCHISIMO. TE AMO MALDITA SEA.
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?
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!
================================
me podrias ayudar tengo una impresora igual de 58mm
oye amig como puedo hacer que seleccione la impresora ???? me puedes ayudar porfa
amigo si llega a funcionar te voy a buscar hasta darte un beso
Alguien que haga un VideoTutorial?
Saludos!
Como puedo imprimir una imagen. en el encabezado de un ticket. usando los metodos anteriores o de q otra manera. gracias de antemano
Hola alguien me puede ayudar para ajustar el tamaño de mi impresión para una impresora matricial Epson FX-890 por que me deja una parte de la impresión vacía
mi correo rody.fernandez.saa@gmail.com
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.
alguien sabe como imprimir ñ o acentos
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.
hola, normalmente el ticket es de altura indeterminada, pero si quieres limitar la cantidad de lineas productos, eso lo haces en tu app.
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
se me genera un archivo PDF pero al intentar abrirlo me dice error en PDF
y el archivo txt no se donde se guarda
Excelente post, una duda es posible cambiar el tamaño de la letra ?
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.
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 …..
necesito listar los productos…como hago eso
gracias
como se le hace para cambiar el tamaño de letra al imprimir? gracias
alguien que haya logrado reducir el tamaño de la fuente ?
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
hola, esta libreria genera un archivo txt, y luego lo envia directamente a la impresora, es util para impresoras o ticketeras matriciales.
despues de años, lo subi a un repo en GIT, funcionando con un ejemplo.
https://github.com/LunaSystemsPeru/Ticket_Matricial.git
hola mano, como hago para poder agregar mas columnas(columna cantidad, columna precio unitario,columna sub total), por favor necesito ayuda en eso.
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
oye me podrias mandar el codigo para generar un ticket
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.
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
Para cambiar el tamaño de fuente (letra), ¿sabran algo?
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){