2017-01-03 174 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; 
    } 

} 

即使它没有显示出打印对话框,我认为这是一个很好的解决方案,如果你只是想打印文件。