我们正在研究Java内部的PDF文档的静默打印。打印将从桌面调用,而不是通过浏览器调用,因此我们无法使用JavaScript。 PDF Renderer是一种可操作的解决方案,但它们的渲染质量是不可接受的。 iText似乎不能与Java打印服务一起插件。有一些商业Java库,Qoppa的jPDFPrint,JPedal和ICEpdf,我们还没有尝试过。
有没有人有从Java静态打印的经验?
答案 0 :(得分:11)
Apache PDFBox。它目前处于孵化阶段,但PDF打印功能在此之前就已存在。在内部,它使用Java Print Services来创建打印作业,它还支持silent printing。
请注意它也需要Fontbox,并且当前(即将发布的0.8.0版本)包含了使用Type 0字体的文档的优雅后备。 1号字体打印正确;但是在0.7.3中,尝试使用Type 0字体打印文档会导致抛出异常。
答案 1 :(得分:2)
也许我误解了,但为什么不直接使用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.");
}
答案 2 :(得分:2)
这对我有用:
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.");
}
}
答案 3 :(得分:0)
请访问www.pdflib.com。它的商业性但PDFlib Lite可免费用于开源项目。它有java的绑定。
答案 4 :(得分:0)
在http://www.jpedal.org/support_egSP.php
使用JPedal有一个例子如果您需要全字体支持,则需要商业版的IcePdf。
答案 5 :(得分:0)
我有使Acrobat(Reader或Full)进行打印的经验,但它只是静音(它无人看管,但只取决于静音要求的'无声')。如果有兴趣,我可以向您发送进行所需DDE调用的本机代码。
答案 6 :(得分:0)
iText用于创建PDF文件(根据我从作者那里看到的帖子),因此可能不是您想要的。
为了这个目的,我已经非常成功地使用了Qoppa的jPDFPrint,但它并不便宜。如果你能负担得起,它是迄今为止我发现的最强大的解决方案。我对支持程度也印象深刻;他们甚至为我生成了一些自定义示例代码。
我尝试过PDFBox,但发现它不支持Acrobat的“缩小到可打印区域”页面缩放。不是每个人都会关心这个功能,但这对我来说至关重要。