为什么以下代码要求我每次运行时选择打印机?每当我运行下面的代码时,我试图立即执行静默打印。
有没有办法如何只设置一次打印机?
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import java.io.IOException;
import java.net.URL;
import java.util.Arrays;
import javax.print.DocFlavor;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.Sides;
import org.apache.pdfbox.pdmodel.PDDocument;
public class PdfBoxPrint {
public static PrintService choosePrinter() {
PrinterJob printJob = PrinterJob.getPrinterJob();
if(printJob.printDialog()) {
return printJob.getPrintService();
}
else {
return null;
}
}
public static void main(String[] args) throws IOException, PrinterException {
DocFlavor flavor = DocFlavor.SERVICE_FORMATTED.PAGEABLE;
PrintRequestAttributeSet patts = new HashPrintRequestAttributeSet();
patts.add(Sides.DUPLEX);
PrintService[] ps = PrintServiceLookup.lookupPrintServices(flavor, patts);
if (ps.length == 0) {
throw new IllegalStateException("No Printer found");
}
System.out.println("Available printers: " + Arrays.asList(ps));//Prints default: "Available printers: [Win32 Printer : Fax]"
// Locate the default print service for this environment.
PrintService myService = PrintServiceLookup.lookupDefaultPrintService();
// Create and return a PrintJob capable of handling data from
// any of the supported document flavors.
System.out.println("Default Printer: "+myService.getName());
PrinterJob job = PrinterJob.getPrinterJob();
job.setPrintService(choosePrinter());
URL myURL = new URL("[SOME LINK TO A PDF]");
PDDocument pdf=PDDocument.load(myURL);
pdf.silentPrint(job);
}
}
答案 0 :(得分:0)
您使用
抓取默认打印机PrintService myService = PrintServiceLookup.lookupDefaultPrintService();
然后你用
扔掉它job.setPrintService(choosePrinter());
如果您需要默认打印机,请使用它。如果没有,请提示。如果您只想提示第一次,那么您有数据持久性问题,您应该将您的首选项存储在某处,然后再重新加载它们。加载时,请使用PrintServiceLookup.lookupPrintServices
进行匹配,设置打印服务等。