有没有在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,它指向一个CUPS服务器上的打印机相关联。 打印机URI是我唯一的信息,我不能约束打印机名称相匹配的URI或URI的子。
编辑:要澄清一点,我并不需要渲染的数据,我只需要一个blob复制到指定的打印机。 我想不通的部分是如何识别它的IPP URI的打印机。