3

我必须使用 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 的经验并且可以分享这些信息?

4

1 回答 1

1

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

然后看一下 SO 中的这个问题:
我应该使用哪个基于 Java 的 PDF 渲染库进行打印?

更新: 上面的链接已损坏,但除了进行谷歌搜索之外,没有其他替代品。不幸的是,堆栈溢出所有者决定不欢迎与库推荐相关的问题。

于 2012-09-11T14:18:58.677 回答