Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: venceras en 27 de Mayo 2016, 01:22

Título: Imprimir desde Java en puerto USB impresora predeterminada o elegir impresora
Publicado por: venceras en 27 de Mayo 2016, 01:22
Buenas tardes compañeros del foro

Estoy incursionando en la programación  java y encuentro algunas dudas, específicamente sobre la forma de imprimir en puertos usb.

Tengo una impresora Epson CX3900 en cuyas propiedades, Hardware aparece ubicada en el puerto :Port_#0004.Hub_#0002.  en Windows 10:

uso las siguientes sentecias para reorientar la salida la la impresora:

        FileOutputStream fact = new FileOutputStream("\\Port_#0004.Hub_#0002");       
        PrintStream out = new PrintStream(fact);
        System.setOut(out);

al correr el programa me genera el siguiente mensaje:
java.io.FileNotFoundException: \\Port_#0004.Hub_#0002 (La ruta de acceso especificada no es válida)

Si con las mismas intrucciones envio la salida a un  documento, si obtengo la salida apropiada.

        FileOutputStream fact = new FileOutputStream("Factura.txt");     
        PrintStream out = new PrintStream(fact);
        System.setOut(out);
les aclaro que probe tambien cambiando la instrucción a :
        FileOutputStream fact = new FileOutputStream("//Port_#0004.Hub_#0002");

Que estoy haciendo mal o cual es la forma o sintaxis correcta?

De ante mano gracias por su ayuda.
Título: Re:Imprimir desde Java en puerto USB impresora predeterminada o elegir impresora
Publicado por: César Krall en 04 de Junio 2016, 23:27
Hola!

Para imprimir en la impresora por defecto del sistema puedes guiarte por este código:

Código: [Seleccionar]
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();
    }
}


Si quieres elegir la impresora donde imprimir utiliza su nombre dentro del sistema como en este ejemplo:

Código: [Seleccionar]
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();
 
}

Saludos!