从Java内部无声打印PDF

我们正在研究从Java内部静态打印PDF文档。 打印将从桌面调用,而不是通过浏览器调用,因此我们无法使用JavaScript。 PDF Renderer是一种可操作的解决方案,但它们的渲染质量是不可接受的。 iText似乎不能与Java打印服务一起插件。 有一些商业Java库,Qoppa的jPDFPrint,JPedal和ICEpdf,我们还没有尝试过。

有没有人有从Java静态打印的经验?

Apache PDFBox 。 它目前处于孵化阶段,但PDF打印function在此之前就已存在。 在内部,它使用Java Print Services创建打印作业,并且还支持静默打印 。

请注意它也需要Fontbox,并且当前(即将发布的0.8.0版本)包含了使用Type 0字体的文档的优雅后备。 1号字体打印正确; 但是在0.7.3中,尝试使用Type 0字体打印文档会导致抛出exception。

也许我误解了,但为什么不直接使用Print Service API呢? 以下适用于我(假设您将PDF文档作为字节数组):

DocFlavor flavor = DocFlavor.BYTE_ARRAY.PDF; PrintService[] services = PrintServiceLookup.lookupPrintServices(flavor, null); if (services.length > 0) { DocPrintJob printJob = services[0].createPrintJob(); Doc document = new SimpleDoc(pdfBytes, flavor, null) printJob.print(document, null); } else { System.out.println("No PDF printer available."); } 

这对我有用:

 public void print() { DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE; PrintService[] services = PrintServiceLookup.lookupPrintServices(flavor, null); FileInputStream psStream = null; try { psStream = new FileInputStream("c:\\test.pdf"); } catch (FileNotFoundException ffne) { ffne.printStackTrace(); } if (psStream == null) { return; } if (services.length > 0) { PrintService myService = null; for(PrintService service : services) { System.out.println(service.getName()); if(service.getName().contains("my printer")) { myService = service; break; } } DocPrintJob printJob = myService.createPrintJob(); Doc document = new SimpleDoc(psStream, flavor, null); try { printJob.print(document, null); } catch (PrintException e) { // TODO Auto-generated catch block e.printStackTrace(); } } else { System.out.println("No PDF printer available."); } } 

请访问www.pdflib.com。 它的商业性但PDFlib Lite可免费用于开源项目。 它有java的绑定。

在http://www.jpedal.org/support_egSP.php上有一个使用JPedal的例子

如果您需要全字体支持,则需要商业版的IcePdf。

我有使Acrobat(Reader或Full)进行打印的经验,但它不是静音(它是无人看管的,但只取决于静音要求的’沉默’)。 如果有兴趣,我可以向您发送进行所需DDE调用的本机代码。

iText用于创建PDF文件(根据我从作者那里看到的post),因此可能不是您想要的。

为了这个目的,我已经非常成功地使用了Qoppa的jPDFPrint,但它并不便宜。 如果你能负担得起,它是迄今为止我发现的最强大的解决方案。 我对支持程度也印象深刻; 他们甚至为我生成了一些自定义示例代码。

我试过PDFBox,但发现它不支持Acrobat的“缩小到可打印区域”页面缩放。 不是每个人都会关心这个function,但这对我来说至关重要。