如何打印PDF文件在Java中与打印对话框
问题描述:
我发现一个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文件,让我知道。
答
最后,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;
}
}
即使它没有显示出打印对话框,我认为这是一个很好的解决方案,如果你只是想打印文件。
检查此问题[答案](http://stackoverflow.com/a/18962278/34088) – Gatusko
@Gatusko - 解决方案显示在[答案](http://stackoverflow.com/questions/16293859/print- A-PDF文件 - 使用 - 的PrinterJob式的Java/18962278#18962278)似乎是正确的,它会发送一个PrintJob到打印机(如我可以在Windows的 “PrintJob的” 窗口中看到的)。问题是,过了一段时间后,打印作业消失无效:文档未打印。 – Prodoxon