Hola!
Para imprimir en la impresora por defecto del sistema puedes guiarte por este código:
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:
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!