Recomiendo además instalar Bullzip PDF Printer qué es una impresora PDF muy útil para realizar pruebas de impresión sin necesidad de gastar hojas de papel.
A continuación el código fuente:
import javax.print.*; import javax.print.attribute.HashPrintRequestAttributeSet; import javax.print.attribute.PrintRequestAttributeSet; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; public class PrintTest { public static void main(String args[]) throws IOException { FileInputStream inputStream = null; try { inputStream = new FileInputStream("c:/archivo.pdf"); } catch (FileNotFoundException e) { e.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 e) { e.printStackTrace(); } } else { System.err.println("No existen impresoras instaladas"); } inputStream.close(); } }
Muy buen aporte, disculpa aprovechando de tu confianza como le puedo hacer que desde el código seleccionar la impresora?
ResponderEliminarBuen aporte, disculpa aprovechando de tu confianza desde ahi en el codigo como le puede hacer para que seleccione la impresora, que no tome la que esta por defecto.
ResponderEliminarbuenos dias disculpe las molestias pero si fuera tan amable de poder brinder un ejemplo de este codigo o otro ejemplo para jcreator que eso es lo que estoy buscando.
ResponderEliminarsalu2
Este código es genérico e independiente de cualquier IDE, sí estás haciendo una aplicación Swing en el IDE que estés trabajando la sección de código que está dentro del main deberías llevarla a una clase y un método, manejar el evento e invocarla desde ahi.
ResponderEliminarGracias!!! es una ayuda que perdurara en el tiempo.
ResponderEliminarMuy Buenas,
ResponderEliminarHe comprendido bien este código para ver las impresoras.
Lo que no entiendo es como podría hacer yo ahora para enviar un String a la impresora que yo seleccione.
A ver si quitas esa duda!
Es que no le mandas un string le mandas el documento PDF creado con el programa que nos menciono
EliminarMuy buenas,
ResponderEliminar¿Cómo haríamos para mandar un string a una de las impresoras instaladas?
Un saludo
hola mauricio mi problema es que estoy creando mi propio punto de venta para una tienda pero solo me falta printiar recivos.
ResponderEliminarmi printer es un epson tm-t88v
pero nose como implentarlo a recivir los parametros ayudeme por favor estoy que se me pierden las esperanzas de tanto buscar como hacerlo
Gracias por sus comentarios, en vista de las múltiples solicitudes, comparto el código Java para imprimir en una impresora nombrada y no en la que es por defecto.
ResponderEliminarIr al siguiente post para ver el código: http://ingmmurillo.blogspot.com/2013/03/codigo-java-para-imprimir-en-una.html
Hola, buen aporte. Intente copiar tu ejemplo pero cuando mando a imprimir me salen caracteres raros... de que puede ser?
ResponderEliminarHola, buen aporte. Intente copiar tu ejemplo pero cuando mando a imprimir me salen caracteres raros... de que puede ser?
ResponderEliminarhola exelente tu aporte a mi tambien me sale los caracteres raros y lo que me di cuenta esta que en las impresoras con resolucion 600 ppp me sale asi con las 1200 ppp imprime sin problema, lo que me interesaria saber es si hay alguna solucion para eso
ResponderEliminarcon las impresoras de 600 ppp no funcionan salen unos caracteres raros
ResponderEliminarGracias Angel por tus observaciones, espero revisar para encontrar una solución al tema
ResponderEliminarMauricio, llegue a estos posts y están buenos, como puede desde mi programa en al web, imprimir un voucher, pero que cuando el cliente, haga clic en el botón, salga de una por la impresora, sin que el usuario deba manipular la interfaz PDF, indican "Print" y luego cerrar esta ventana?, gracias, Juan
ResponderEliminarMuy buen codigo solo que no logro aplicarlo a un applet ¿me podrias ayudar porfavor?. Gracias.
ResponderEliminarMuy buen codigo pero no logro aplicarlo a un applet ¿me podrias ayudar?. Gracias.
ResponderEliminarPara imprimir desde un Applet necesitarás que el Applet esté firmado y solicitará al usuario que autorice la impresión. Recuerda que un applet tiene el acceso limitado a los recursos del sistema. Revisa este link con un código de referencia: http://stackoverflow.com/questions/438397/can-a-java-applet-use-the-printer
ResponderEliminarBuenos días, yo quiero imprimir un JFrame pero todo el recuadro, por ejemplo hice una factura y quiero poder imprimirla entera, pero no logro hacerlo. Ahora me imprime en blanco, antes me imprimía solo el JTextField. Yo ya tengo el JFrame armado, solo quiero agregar un JButton que lo que haga sea imprimir el recuadro, el JFrame. He encontrado códigos que lo deberían hacer, pero cuando pego el código en el JFrame no obtengo resultados.
EliminarLo que me gustaría saber es que código tengo que poner en una nueva clase que sea el código fuente para poder imprimir y el código que tengo que poner en el boton del JFrame para que llame al código de la otra clase así imprime.
Saludos.
mi correo es nicolaskaco [at] gmail . com
Hola, realizo un control de impresión de tickets utilizando Java, el ticket se toma en formato HTML. Tickets promedio (menos de un metro de longitud) se imprimen correctamente, el problema es cuando la longitud del ticket es mayor a 2 metros, el ticket se corta, no imprime completo. Se realizaron cambios en en tamaño del Page y en el PageFormat pero nada. Lo curioso es que siempre se corta en el mismo punto cuando se corta. El mismo ticket se envía con un control VisualBasic y se imprime de forma correcta, esto elimina la posibilidad de una configuración de la impresora. ¿Alguna idea qué puede estar pasando?
ResponderEliminarHola. Muy buen aporte. Me he instalado el Bull PDF Printer, y me imprime el documento que le envío.
ResponderEliminarPero tengo un problema y es que el documento no me lo imprime en la impresora que yo quiero. Es una OCE, la de la oficina, la cual requiere de usuario y contraseña (los cuales tengo almacenados en la configuracion de la "cola de impresora" de mi equipo). El código me detecta la impresora, se envía el documento a imprimir, pero no imprime nada. Pienso que esos datos ya los debería coger por defecto no?. O debería indicarle en las propiedades algo más?.
Gracias, un saludo
Estupendo código, hace lo que yo quiero, pero tengo un problema. A mi, no me corta el ticket cuando cierro el InputStream. He visto por google que hay una serie de caracteres que indican el corte del papel, pero no sé cómo adaptarlo al DocPrintJob. Podrías ayudarme con esto?.
ResponderEliminarGracias. Susana
Muy buena clase.
ResponderEliminarEn los dos codigos tengo lo siguiente si mando ainprimir al Bull PDF Printer realiza bien la impresión.Pero si tu cambias a la impresora HP Deskjet 5500 envía el archivo y se ve reflejado en la cola de impresión pero te manda Error impresión. Me puedes ayudar a solucionar este problema.
Saludos.
Bunas.
ResponderEliminarTengo una consulta alguien sabe como seleccionar o predeterminar la bandeja 2 de la impresora
auxilio enviar a imprimir la letra Ñ con el objeto simpledoc...¿¿¿
ResponderEliminarNecesito algún código para imprimir en una impresora térmica enviándole como parámetros datos de mi BD, es la primera vez que trabajo con estas impresoras y es mi trabajo final de programacion porfa ayudaaaaa :D dejo mi correo isc.daniel14@gmail.com
ResponderEliminarQue tal amigos alguien me podria decir : si tengo archivos renombrados por numeracion y dos de ellos se tienen el mismo numero de numeracion solo que uno de ellos es la primer cara y el otro la segunda como hago yo para imprimirlos al mismo tiempo ? porfavor agradezco mucho sus ayudas
ResponderEliminarRecuerda que sí usas una única impresora, existe la cola de impresión, primer archivo en llegar primero en imprimirse. La impresión que mencionas al mismo tiempo podrías hacerla 1) enviando a otra impresora y 2) usando Threads
EliminarMil Gracias ...
Eliminarcomo hago yo para imprimir dos archivos file con la clase InputStream al mismo tiempo? porfavor tengo este codigo..
ResponderEliminarpublic void imprimeManifiest() throws IOException {
FileInputStream inputStream = null;
String ruta = labelManifiesto.getText().trim();
try {
inputStream = new FileInputStream("//nas//Manifiestos/" + ruta + ".jpg");
} catch (FileNotFoundException e) {
JOptionPane.showMessageDialog(null, "No se encutra el archivo...\n" + e.getMessage());
}
if (inputStream == null) {
return;
}
//DocFlavor docFormat = DocFlavor.INPUT_STREAM.AUTOSENSE;
DocFlavor docFormat = DocFlavor.INPUT_STREAM.JPEG;
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 e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null, "Error Imprimiendo el codumento\n" + e.getMessage(), "ERROR IMPRIMIENDO", JOptionPane.ERROR_MESSAGE);
}
} else {
JOptionPane.showMessageDialog(null, "No existen Impresoras Instaladas...");
}
inputStream.close();
}
ME PUEDES AYUDAR CON ESO? por favor cualquier cosa a : reciboempresas@gmail.com
ResponderEliminarcon ese código salen caracteres raros por mi impresora :/
ResponderEliminarbuen aporte
ResponderEliminarBuenos días, yo quiero imprimir un JFrame pero todo el recuadro, por ejemplo hice una factura y quiero poder imprimirla entera, pero no logro hacerlo. Ahora me imprime en blanco, antes me imprimía solo el JTextField. Yo ya tengo el JFrame armado, solo quiero agregar un JButton que lo que haga sea imprimir el recuadro, el JFrame. He encontrado códigos que lo deberían hacer, pero cuando pego el código en el JFrame no obtengo resultados.
ResponderEliminarLo que me gustaría saber es que código tengo que poner en una nueva clase que sea el código fuente para poder imprimir y el código que tengo que poner en el boton del JFrame para que llame al código de la otra clase así imprime.
Saludos.
mi correo es nicolaskaco [at] gmail . com
hermano me gusta tu codigo pero tengo un problema al ejecutarlo todo bien el problema es que no para de enviar solicitudes de impresion a la impresora varias
ResponderEliminary para agregar el corte? Alguien sabe como hacerlo amigos?
ResponderEliminarhola buenos dias miren mi problema es que cuando la impresora no esta conectada me manda el archivo pdf a la cola de impresion pero cuando la impresora esta conectada y lista para imprimir no manda a imprimir el archivo
ResponderEliminarCómo hago para imprimir en una impresora de bouchers
ResponderEliminarHola he hecho algunas modificaciones al codigoque aportaste! de antemano agradezco mucho tu aporte ... por ahora tengo un problema al imprimir ya que me devuelve una serie de caracteres en varias hojas ... es decir el documento no esta siendo decodificado de manera correcta ... espero me pudieras orientar un poco acerca de este problema ... anexo el codigo!!
ResponderEliminarpublic void imprimir() {
String printerName = "";
String sql ="";
try{
sql = "SELECT * FROM tbl_impresoras WHERE tipo = '1'";
PreparedStatement pstm1 = cn.Conectar().prepareStatement(sql);
ResultSet rs = pstm1.executeQuery();
while(rs.next()){
printerName = rs.getString("impresora");
}
}catch(SQLException e){
JOptionPane.showMessageDialog(null,(e.getMessage()));
}
PrintService[] services = PrintServiceLookup.lookupPrintServices(null, null);
if(printerName.length() == 0){
JOptionPane.showMessageDialog(null, "No ha seleccionado una impresora ... vaya a configuraciones y seleccione una", "ERROR DE IMPRESORA", JOptionPane.ERROR_MESSAGE);
}else{
int encontrada = 0;
for(int i=0; i < services.length; i++){
if(services[i].getName().equals(printerName)){
try {
JOptionPane.showMessageDialog(null, "Imprimiendo orden de servicio en " + services[i].getName(), "IMPRESIÓN", JOptionPane.INFORMATION_MESSAGE);
FileInputStream fis = new FileInputStream("C:\\impresiones\\orden.pdf");
Doc pdfDoc = new SimpleDoc(fis, DocFlavor.INPUT_STREAM.AUTOSENSE, null);
DocPrintJob printJob = services[i].createPrintJob();
printJob.print(pdfDoc, new HashPrintRequestAttributeSet());
} catch (PrintException e) {
JOptionPane.showMessageDialog(null, e);
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
encontrada++;
break;
}
}
if(encontrada == 0){
JOptionPane.showMessageDialog(null, "No se encontro impresora seleccionada " + printerName + " = ", "ERROR DE IMPRESORA", JOptionPane.ERROR_MESSAGE);
}
}
}
Hola, buenas tardes.
ResponderEliminarAntes que nada muchas gracias por sus tutoriales.
Acabo de imprimir un archivo de texto siguiendo el tutorial, sin embargo cuando se imprime en la hoja se muestra el texto de la siguiente manera:
Linea 1
Linea 2
Linea 3
Es decir, en cada salto de linea va agregando espacios en blanco. ¿Hay algo que me haga falta configurar?
Les agradezco de antemano cualquier ayuda
Saludos
Buenas tardes.
ResponderEliminarAntes que nada muchas gracias por sus tutoriales.
Acabo de imprimir un archivo de texto con el metodo descrito en éste tutorial, sin embargo la impresión sale de la siguiente manera:
Linea 1
Linea 2
Linea 3
¿Hay algo que me falte configurar?
Les agradezco de antemano cualquier ayuda
Saludos
Hola!
ResponderEliminarMuy bueno tu artículo.
Yo tengo un problema que no se si tiene solución.
Estoy mostrando un diálogo nativo para la selección de la impresora, pero quiero detectar si el usuario selecciona la opción guardar a PDF o archivo, existe forma de hacer esto?
Si nuestro un diálogo common puedo detectar el destination pero ese diálogo no me sirve porque necesito el usuario pueda configurar más cosas antes de imprimir...
Desde ya muchas gracias!
Saludos!