无法执行静默打印:java

时间:2014-10-27 06:44:31

标签: java

为什么以下代码要求我每次运行时选择打印机?每当我运行下面的代码时,我试图立即执行静默打印。

有没有办法如何只设置一次打印机?

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);

    }
}

1 个答案:

答案 0 :(得分:0)

您使用

抓取默认打印机
PrintService myService = PrintServiceLookup.lookupDefaultPrintService(); 

然后你用

扔掉它
job.setPrintService(choosePrinter());

如果您需要默认打印机,请使用它。如果没有,请提示。如果您只想提示第一次,那么您有数据持久性问题,您应该将您的首选项存储在某处,然后再重新加载它们。加载时,请使用PrintServiceLookup.lookupPrintServices进行匹配,设置打印服务等。