使用Java打印到特定的打印机(IPP URI)
Java中有什么方法可以打印到特定的IPP打印机?我发现所有示例代码和教程都集中在如何使用以下类似内容打印特定类型的文档上:
DocFlavor flavor = DocFlavor.INPUT_STREAM.POSTSCRIPT;PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
aset.add(MediaSizeName.ISO_A4);
PrintService[] pservices =
PrintServiceLookup.lookupPrintServices(flavor, aset);
if (pservices.length > 0) {
DocPrintJob pj = pservices[0].createPrintJob();
try {
FileInputStream fis = new FileInputStream("test.ps");
Doc doc = new SimpleDoc(fis, flavor, null);
pj.print(doc, aset);
} catch (FileNotFoundException fe) {
} catch (PrintException e) {
}
}
此代码段仅打印到找到的第一台能够打印文档的打印机。就我而言,我想通过其URI查找打印机,但PrintServiceLookup
似乎不支持此功能。我尝试使用PrintServiceAttributeSet
,而不是PrintRequestAttributeSet
,并添加了一个PrinterURI
属性,但这不会返回任何打印机。我怀疑查找服务正在寻找可以更改其目标URI的打印机,而不是寻找具有该URI的打印机。
作为最后的选择,我考虑过枚举由PrintService
返回的所有s
lookupPrintServices
,但是URI不在任何属性中。打印机名称在那里,但是我需要URI。
对于背景,我的Web应用程序需要根据当前用户将条形码打印到特定打印机。每个用户都与打印机URI关联,该打印机URI指向CUPS服务器上的打印机。打印机URI是我唯一的信息,我不能限制打印机名称以匹配URI或URI的子字符串。
为了澄清一点,我不需要渲染数据,我只需要将blob复制到给定的打印机即可。我不知道的部分是如何通过其IPP URI识别打印机。
回答:
我终于找到了一种方法,可以使用jipsi
:
URI printerURI = new URI("ipp://SERVER:631/printers/PRINTER_NAME");IppPrintService svc = new IppPrintService(printerURI);
InputStream stream = new BufferedInputStream(new FileInputStream("image.epl"));
DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
Doc myDoc = new SimpleDoc(stream, flavor, null);
DocPrintJob job = svc.createPrintJob();
job.print(myDoc, null);
我不得不承认,对于使用第三方库来执行某些看起来很简单的事情(例如打印到特定打印机)感到失望。
DR在评论中指出jipsi有一个新的住所和一个新名称。
Cups4J是一个不错的选择,但是顾名思义,如果目标不是CUPS服务器,它可能无法正常工作。使用Cups4J可以直接打印到Zebra热敏打印机上,我取得了很好的效果。
以上是 使用Java打印到特定的打印机(IPP URI) 的全部内容, 来源链接: utcz.com/qa/422918.html