public static void main(String args[]) throws FileNotFoundException, IOException, PrintException { //Archivo que se desea imprimir FileInputStream inputStream = new FileInputStream("c:/archivo.pdf"); //Formato de Documento DocFlavor docFormat = DocFlavor.INPUT_STREAM.AUTOSENSE; //Lectura de Documento Doc document = new SimpleDoc(inputStream, docFormat, null); //Nombre de la impresora String printerName = "HP3015"; //Inclusion del nombre de impresora y sus atributos AttributeSet attributeSet = new HashAttributeSet(); attributeSet.add(new PrinterName(printerName, null)); attributeSet = new HashAttributeSet(); //Soporte de color o no attributeSet.add(ColorSupported.NOT_SUPPORTED); //Busqueda de la impresora por el nombre asignado en attributeSet PrintService[] services = PrintServiceLookup.lookupPrintServices(docFormat, attributeSet); System.out.println("Imprimiendo en : " + services[0].getName()); DocPrintJob printJob = services[0].createPrintJob(); //Envio a la impresora printJob.print(document, new HashPrintRequestAttributeSet()); inputStream.close(); }
Bienvenidos a mí blog, en éste espacio comparto mis experiencias y conocimientos relacionados con las tecnologías de integración de sistemas, lenguajes de programación, desarrollo de software, bases de datos y Agilismo. Sí tienes comentarios, inquietudes o sugerencias, no dudes en escribirlos...
Buscar en el Blog
viernes, 8 de marzo de 2013
Código Java para imprimir en una impresora nombrada
En ésta publicación comparto el código Java para imprimir en una impresora nombrada.
Suscribirse a:
Enviar comentarios (Atom)
Buenas como hago para mostrar opciones de impresion como que detecte todas me las muestre y elegir cual usar???me das alguna idea???
ResponderEliminarpublic static void listarImpresoras() {
EliminarPrintService[] printServices = PrintServiceLookup.lookupPrintServices(null, null);
System.out.println("Lista de impresoras disponibles");
for (PrintService printService: printServices) {
System.out.println("\t" + printService.getName());
}
}
Muchas gracias por el codigo
ResponderEliminary ayudando al compañero que pregunta como elegir la impresora y opciones de impresión.. A ver si esto te ayuda un poco, yo obtengo asi el nombre de la impresora.
PrinterJob job = PrinterJob.getPrinterJob();
job.printDialog();
String impresora=job.getPrintService().getName();
Muchas gracias por la el código...
ResponderEliminarY tratando de ayudar a quien pregunta como elegir el nombre de la impresora... a ver si esto te ayuda un poco
PrinterJob job = PrinterJob.getPrinterJob();
job.printDialog();
String impresora=job.getPrintService().getName();
Muchas gracias por la el código...
ResponderEliminarY tratando de ayudar a quien pregunta como elegir el nombre de la impresora... a ver si esto te ayuda un poco
PrinterJob job = PrinterJob.getPrinterJob();
job.printDialog();
String impresora=job.getPrintService().getName();
Disculpa, pero tengo una pregunta... resulta que tu código funciona de maravilla pero yo necesito que si le doy X nombre vaya a esa impresora he imprima sobre ella... pero hago el ejercicio y sale en la impresora predeterminada o en la que imprimió por ultima vez, tienes alguna idea como pueda manejar ese problema.
ResponderEliminarPara el amigo de arriba, puedes hacerlo de esta manera:
ResponderEliminar//En caso de que tengamos varias impresoras configuradas
PrintService myPrinter = null;
for (int i = 0; i < services.length; i++){
if (services[i].getName().equals(printerName)){
myPrinter = services[i];
System.out.println("Imprimiendo en : " + services[i].getName());
break;
}
}
DocPrintJob printJob = myPrinter.createPrintJob();
//Envio a la impresora
PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
printJob.print(document, aset);
inputStream.close();
Hola, de que manera puedo pasarle una cadena y que sea eso lo que me imprima ?
ResponderEliminarEn la línea 4 reemplaza por InputStream inputstream = new ByteArrayInputStream("Cadena de texto".getBytes(StandardCharsets.UTF_8));
EliminarEste comentario ha sido eliminado por el autor.
ResponderEliminareste còdigo me sirve para enviar a imprimir las boletas en un restaurante ?
ResponderEliminarNecesito mandar a imprimir un archivo PDF pero lo que quiero es..... Al momento de dar clic en el botón imprimir se me abra una ventana para seleccionar la impresora, escoger el número de hoja que quiero imprimir (del total del documento) etc.
ResponderEliminarPrueba con lo que nos ayudó Julián:
EliminarPrinterJob job = PrinterJob.getPrinterJob();
job.printDialog();
String impresora=job.getPrintService().getName();
Saludos,
Buenas tardes, su codigo me funciona muy bien para imprimir, pero no me ejecuta la impresion en la impresora nombrada, siempre me la tira a la impresora por defecto, obtengo el nombre tal cual pusieron en los comentarios y lo seteo en el campo del nombre de su codigo, pero siempre me envia la impresion al impresor por defecto, en mi caso tengo 2 impresores, de ante mano gracias por su respuesta
ResponderEliminartengo este codigo public void imprimirnomina() {
ResponderEliminarPrinterJob job = PrinterJob.getPrinterJob();
job.setPrintable(this);
//Si el usuario presiona imprimir en el dialogo de impresión,
//entonces intenta imprimir todas las lineas de texto
boolean ok = job.printDialog();
if (ok) {
try {
job.print();
} catch (PrinterException ex) {
/* The job did not successfully complete */
}
}
}
como puedo hacer que mande a imprimir a una impresora que yo escoja pasando su nombre como una cadena por ejempleo String impresora="hp 200";
un favor mi impresora no esta funcionando correctamente quedo imprimiendo el ultimo tema q descargue de internet como hago para restaurarla y que me permita imprimir otras cosas?
ResponderEliminarBuenas, el codigo me funciono perfercto. Ahora si quiero enviar un pagina HTML que carga datos dinamicos, como deberia de hacer???
ResponderEliminarYo tengo un formulario que el cliente carga su informacion, luego al darle confirmar, algunos datos van a un HTML que no se mostraria y SI deberia de imprimirse, pero no logro hacerlo. Alguien que pueda ayudar?
Muchas gracias
Buenas, una consulta. Tengo un formulario al cual los clientes llenan sus datos, eso genera un HTML que no se muestra pero que se debe imprimir.
ResponderEliminarEl codigo de arriba me funciono perfecto, pero no puedo hacer que imprima el HTML, alguna ayuda???
Gracias
Ayuda, me dice que esta imprimiendo pero no me sale nada por la impresora ni en la cola de impresion
ResponderEliminarOye buenas tardes ,espero que todavía estes en este blog yo tengo un problema se me ocurrió mandar a imprimir desde una aplicación web en spring mvc pero cuando la tengo en eclipse y la pruebo imprime correctamente pero cuando subo el war a tomcat ya no manda a imprimir tengo que realizar alguna configuración el código es este y la versión
ResponderEliminarque estoy utilizando es java 1.8
public class Ticket {
private String contentTicket = "PRODUCTMARKET\n"+
"DOMICILIO CONOCIDO MEXICO,MEXICO\n"+
"=============================\n"+
"ATIZAPAN,\n"+
"RFC: XXX-999999-XX9\n"+
"Caja # {{box}} - Ticket # {{ticket}}\n"+
"LE ATENDIO: {{cajero}}\n"+
"{{dateTime}}\n"+
"=============================\n"+
"{{items}}\n"+
"=============================\n"+
//"SUBTOTAL: {{subTotal}}\n"+
//"IVA: {{tax}}\n"+
"TOTAL: {{total}}\n\n"+
//"RECIBIDO: {{recibo}}\n"+
//"CAMBIO: {{change}}\n\n"+
"=============================\n"+
"GRACIAS POR SU COMPRA...\n"+
"ESPERAMOS SU VISITA NUEVAMENTE {{nameLocal}}\n"+
"\n"+
"\n";
//El constructor que setea los valores a la instancia
public Ticket(String box, String ticket, String caissier, String dateTime, String items, String total) {
this.contentTicket = this.contentTicket.replace("{{box}}", box);
this.contentTicket = this.contentTicket.replace("{{ticket}}", ticket);
this.contentTicket = this.contentTicket.replace("{{cajero}}", caissier);
this.contentTicket = this.contentTicket.replace("{{dateTime}}", dateTime);
this.contentTicket = this.contentTicket.replace("{{items}}", items);
this.contentTicket = this.contentTicket.replace("{{total}}", total);
}
public void print() {
//Especificamos el tipo de dato a imprimir
//Tipo: bytes; Subtipo: autodetectado
DocFlavor flavor = DocFlavor.BYTE_ARRAY.AUTOSENSE;
//Aca obtenemos el servicio de impresion por defatul
//Si no quieres ver el dialogo de seleccionar impresora usa esto
//PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService();
//Con esto mostramos el dialogo para seleccionar impresora
//Si quieres ver el dialogo de seleccionar impresora usalo
//Solo mostrara las impresoras que soporte arreglo de bits
PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
PrintService printService[] = PrintServiceLookup.lookupPrintServices(flavor, pras);
PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService();
PrintService service = ServiceUI.printDialog(null, 700, 200, printService, defaultService, flavor, pras);
//Creamos un arreglo de tipo byte
byte[] bytes;
//Aca convertimos el string(cuerpo del ticket) a bytes tal como
//lo maneja la impresora(mas bien ticketera :p)
bytes = this.contentTicket.getBytes();
//Creamos un documento a imprimir, a el se le appendeara
//el arreglo de bytes
Doc doc = new SimpleDoc(bytes,flavor,null);
//Creamos un trabajo de impresión
DocPrintJob job = service.createPrintJob();
//Imprimimos dentro de un try de a huevo
try {
//El metodo print imprime
job.print(doc, null);
} catch (Exception er) {
JOptionPane.showMessageDialog(null,"Error al imprimir: " + er.getMessage());
}
}
}
muy buen aporte. me gustaria saber como puedo implementar la cantidad de impresiones que deseo!!
ResponderEliminarespero me puedan ayudar.
porque envia a impresion pero no imprime? prove con varios pdf y envia pero no imprime
ResponderEliminarenvia todo a impresion pero no imprime, probe con varios pdf y es lo mismo
ResponderEliminar