2017-01-03 172 views
0

我發現一個Java打印例子here如何打印PDF文件在Java中與打印對話框

不幸的是,試圖執行我有一個例外

Exception in thread "main" sun.print.PrintJobFlavorException: invalid flavor 
at sun.print.Win32PrintJob.print(Unknown Source) 
at application.UsePrintingServiceInJava.main(UsePrintingServiceInJava.java:55) 

我也試圖打印使用DocFlavor.INPUT_STREAM.PNG味道,而不是一個PDF格式PNG,這工作正常。可能是打印機本身有問題,還是必須更改代碼?

而且,如果你有一個更好的解決方案打印在Java中的PDF文件,讓我知道。

+0

檢查此問題[答案](http://stackoverflow.com/a/18962278/34088) – Gatusko

+0

@Gatusko - 解決方案顯示在[答案](http://stackoverflow.com/questions/16293859/print- A-PDF文件 - 使用 - 的PrinterJob式的Java/18962278#18962278)似乎是正確的,它會發送一個PrintJob到打印機(如我可以在Windows的 「PrintJob的」 窗口中看到的)。問題是,過了一段時間後,打印作業消失無效:文檔未打印。 – Prodoxon

回答

1

最後,Apache PDFBox解決我的問題。我下載了pdfbox-app-2.0.4.jar並將其添加到構建路徑。 現在執行以下代碼打印所需的.pdf文件:

public class Main { 

    public static void main(String[] args) throws Exception { 

     String filename = "C:/Users/Prodoxon/Documents/test.pdf"; 
     PDDocument document = PDDocument.load(new File (filename)); 

     //takes standard printer defined by OS 
     PrintService myPrintService = PrintServiceLookup.lookupDefaultPrintService(); 

     PrinterJob job = PrinterJob.getPrinterJob(); 
     job.setPageable(new PDFPageable(document)); 
     job.setPrintService(myPrintService); 
     job.print(); 

    }  

    private static PrintService findPrintService(String printerName) { 
     PrintService[] printServices = PrintServiceLookup.lookupPrintServices(null, null); 
     for (PrintService printService : printServices) { 
      if (printService.getName().trim().equals(printerName)) { 
       return printService; 
      } 
     } 
     return null; 
    } 

} 

即使它沒有顯示出打印對話框,我認爲這是一個很好的解決方案,如果你只是想打印文件。