Есть ли в 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.
Для фона моему веб-приложению необходимо распечатать штрих-код на определенном принтере в зависимости от текущего пользователя. Каждый пользователь связан с URI принтера, который указывает на принтер на сервере CUPS. URI принтера - единственная информация, которую я имею, и я не могу ограничить имя принтера, чтобы оно совпадало с URI или подстрокой URI.
Редактировать: Чтобы уточнить, мне не нужно отображать данные, мне просто нужно скопировать большой двоичный объект на заданный принтер. Я не могу понять, как идентифицировать принтер по IP-адресу URI.