首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java中静默打印PDF

在Java中静默打印PDF
EN

Stack Overflow用户
提问于 2009-09-10 20:13:12
回答 7查看 32K关注 0票数 13

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

有没有人有在Java中使用PDF静默打印的经验?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-09-10 20:28:22

Apache PDFBox。它目前还处于孵化阶段,但PDF打印功能在此之前就已经出现了。在内部,它使用Java Print Services创建打印作业,并且还支持silent printing

请注意,它也需要Fontbox,并且当前版本(即将发布的0.8.0版本)包含了针对Type0字体文档的优雅回退。Type1字体可以正确打印;但是在0.7.3中,尝试使用Type0字体打印文档将导致抛出异常。

票数 11
EN

Stack Overflow用户

发布于 2009-09-10 20:52:56

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

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2012-05-10 09:16:35

这对我来说很有效:

代码语言:javascript
复制
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.");
    }       
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1407459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档