Java: Printing
Enumerate local printers and print to the first one:
package org.example;
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.Attribute;
import javax.print.attribute.AttributeSet;
import javax.print.attribute.HashPrintRequestAttributeSet;
import java.io.FileInputStream;
public class Main {
public static void main(String[] args) throws Exception {
if (args.length != 1) {
System.err.println("No file specified");
}
String filename = args[0];
PrintService printer = null;
for (PrintService printService : PrintServiceLookup.lookupPrintServices(null, null)) {
System.out.println(printService.getName());
AttributeSet attributes = printService.getAttributes();
for (Attribute attribute : attributes.toArray()) {
System.out.printf(" %s: %s\n", attribute.getName(), attributes.get(attribute.getClass()).toString());
}
if (printer == null) {
printer = printService;
}
}
if (printer == null) {
System.err.println("No printers found");
return;
}
try (FileInputStream in = new FileInputStream(filename)) {
Doc document = new SimpleDoc(in, DocFlavor.INPUT_STREAM.AUTOSENSE, null);
DocPrintJob printJob = printer.createPrintJob();
printJob.print(document, new HashPrintRequestAttributeSet());
}
}
}