我必须使用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的经验,可以分享这些信息吗?
答案 0 :(得分:1)
将PDF文件直接发送到打印机只适用于本机支持PDF格式的打印机。这将由任何虚拟PDF打印机支持,但不是由大多数硬件打印机支持。如果要可靠地打印PDF文件,则需要使用库将其内容呈现到打印机中。
在SO中看一下这个问题:
Which Java based PDF rendering library should I use for printing?
<强>更新强> 上面的链接已被破坏,但除了进行谷歌搜索之外没有替代它。不幸的是,堆栈溢出所有者决定不欢迎与库建议相关的问题。