如何从java应用程序打印PDF

时间:2012-09-11 13:47:03

标签: java pdf printing pdfbox

我必须使用java应用程序打印PDF文件。我尝试过这样的方法:

FileInputStream psStream = new FileInputStream("<path to file>");
PrintService service = getPrinterByName("some printer name");
if (service != null) {
    DocPrintJob printJob = service.createPrintJob();
    Doc document = new SimpleDoc(psStream, DocFlavor.INPUT_STREAM.AUTOSENSE, null);
    try {
        printJob.print(document, null);
    } catch (PrintException e) {
        e.printStackTrace();
    }
}

private PrintService[] getPrintersList() {
    DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
    PrintService[] services = PrintServiceLookup.lookupPrintServices(flavor, null);

    return services;
}

private PrintService getPrinterByName(String name) {
    PrintService[] list = getPrintersList();
    if (list.length > 0) {
        for (PrintService service : list) {
            if (service.getName().contains(name)) {
                return service;
            }
        }
    }
    return null;
}

当我在假打印机上测试时(我使用PDFCreator作为打印机)一切正常,但当我尝试在物理打印机上打印时,没有任何事情发生。

然后我使用了PDFBox。文件被打印出来,但文字之间有奇怪的点,在不应该的地方。

那么,也许有人有从java应用程序打印PDF的经验,可以分享这些信息吗?

1 个答案:

答案 0 :(得分:1)

将PDF文件直接发送到打印机只适用于本机支持PDF格式的打印机。这将由任何虚拟PDF打印机支持,但不是由大多数硬件打印机支持。如果要可靠地打印PDF文件,则需要使用库将其内容呈现到打印机中。

在SO中看一下这个问题:
Which Java based PDF rendering library should I use for printing?

<强>更新 上面的链接已被破坏,但除了进行谷歌搜索之外没有替代它。不幸的是,堆栈溢出所有者决定不欢迎与库建议相关的问题。