我们正在研究从Java中静默打印PDF文档。打印将从桌面调用,而不是通过浏览器,因此我们不能使用JavaScript。PDF渲染器是一个可操作的解决方案,但其渲染质量是不可接受的。iText似乎不能与Java打印服务一起插入。有一些商业Java库,Qoppa的jPDFPrint,JPedal和ICEpdf,我们还没有试用过。
有没有人有在Java中使用PDF静默打印的经验?
发布于 2009-09-10 20:28:22
Apache PDFBox。它目前还处于孵化阶段,但PDF打印功能在此之前就已经出现了。在内部,它使用Java Print Services创建打印作业,并且还支持silent printing。
请注意,它也需要Fontbox,并且当前版本(即将发布的0.8.0版本)包含了针对Type0字体文档的优雅回退。Type1字体可以正确打印;但是在0.7.3中,尝试使用Type0字体打印文档将导致抛出异常。
发布于 2009-09-10 20:52:56
也许我误解了,但是为什么不直接使用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.");
}发布于 2012-05-10 09:16:35
这对我来说很有效:
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.");
}
}https://stackoverflow.com/questions/1407459
复制相似问题