Auf einem bestimmten Drucker (IPP-URI) in Java drucken

Gibt es in Java eine Möglichkeit, auf einem bestimmten IPP-Drucker zu drucken? Alle Beispielcodes und Lernprogramme, die ich gefunden habe, befassen sich mit dem Drucken eines bestimmten Dokumenttyps, wobei Folgendes verwendet wird:

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) { 
    }
}

Dieses Snippet wird einfach auf dem ersten gefundenen Drucker gedruckt, der das Dokument drucken kann. In meinem Fall möchte ich einen Drucker anhand seiner URI suchen, aberPrintServiceLookup scheint dies nicht zu unterstützen. Ich habe versucht mit einemPrintServiceAttributeSet, anstattPrintRequestAttributeSetund Hinzufügen von aPrinterURI Attribut, aber das gibt keine Drucker zurück. Ich vermute, der Suchdienst sucht nach einem Drucker, der seinen Ziel-URI ändern kann, anstatt nach dem Drucker mit diesem URI zu suchen.

Als letzten Ausweg habe ich darüber nachgedacht, nur alle aufzuzählenPrintServices zurückgegeben vonlookupPrintServices, aber der URI befindet sich in keinem der Attribute. Der Druckername ist dort, aber ich benötige den URI.

Für den Hintergrund muss meine Webanwendung einen Barcode auf einem bestimmten Drucker basierend auf dem aktuellen Benutzer drucken. Jedem Benutzer ist eine Drucker-URI zugeordnet, die auf einen Drucker auf einem CUPS-Server verweist. Die Drucker-URI ist die einzige Information, die ich habe, und ich kann den Druckernamen nicht so einschränken, dass er mit der URI oder einer Teilzeichenfolge der URI übereinstimmt.

Bearbeiten: Um ein wenig zu verdeutlichen, muss ich die Daten nicht rendern, sondern nur einen Blob auf einen bestimmten Drucker kopieren. Der Teil, den ich nicht herausfinden kann, ist, wie man einen Drucker anhand seines IPP-URI identifiziert.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage