Drukuj do określonej drukarki (IPP URI) w Javie
Czy Java może drukować na określonej drukarce IPP? Cały przykładowy kod i samouczki, które znalazłem, skupiają się na tym, jak wydrukować określony typ dokumentu, używając czegoś takiego:
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) {
}
}
Ten fragment po prostu drukuje na pierwszej znalezionej drukarce, która jest w stanie wydrukować dokument. W moim przypadku chcę wyszukać drukarkę według jej URI, alePrintServiceLookup
nie wydaje się to wspierać. Próbowałem użyć aPrintServiceAttributeSet
, zamiastPrintRequestAttributeSet
i dodającPrinterURI
atrybut, ale nie zwraca żadnych drukarek. Podejrzewam, że usługa wyszukiwania szuka drukarki, która może zmienić docelowy URI, zamiast szukać drukarki z tym URI.
W ostateczności pomyślałem o wyliczeniu wszystkichPrintService
zwrócone przezlookupPrintServices
, ale URI nie ma żadnego z atrybutów. Nazwa drukarki jest tam, ale potrzebuję URI.
W tle mój webapp musi wydrukować kod kreskowy na określonej drukarce, w oparciu o aktualnego użytkownika. Każdy użytkownik jest powiązany z identyfikatorem URI drukarki, który wskazuje drukarkę na serwerze CUPS. Identyfikator URI drukarki jest jedyną posiadaną przeze mnie informacją i nie mogę ograniczyć nazwy drukarki do zgodności z URI lub podciągiem URI.
Edytować: Aby trochę wyjaśnić, nie muszę renderować danych, wystarczy skopiować kopię do danej drukarki. Część, której nie rozumiem, to jak zidentyfikować drukarkę za pomocą jej identyfikatora URI IPP.