2014-10-27 85 views
0

爲什麼下面的代碼在每次運行時都要求選擇打印機?當我運行下面的代碼時,我試圖一次執行無聲打印。無法執行無聲打印: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

如果你在windows上嘗試通過'Devices&Printers'設置默認打印機 – 2014-10-27 06:55:08

+0

@JavaBond不知道,該怎麼做? - 任何建議 – 2014-10-27 07:05:18

+0

對於Windows 7:轉到開始 - >設備和打印機。在這裏選擇打印機,右鍵點擊並從菜單 – 2014-10-27 07:09:14

回答

0

你抓與

PrintService myService = PrintServiceLookup.lookupDefaultPrintService(); 

默認打印機但你折騰廢除

job.setPrintService(choosePrinter()); 

如果你想默認的打印機,使用它。如果沒有,提示。如果你只想提示第一次,那麼你有一個數據持久性問題,你應該將你的偏好存儲在某個地方,然後再重新加載它們。當你加載它們時,使用你的PrintServiceLookup.lookupPrintServices進行匹配,設置打印服務等。