Frage

Gibt es eine Möglichkeit in Java zu einem bestimmten IPP-Drucker zu drucken? Alle Beispielcodes und Tutorials, die ich darauf konzentrieren, wie eine bestimmte Art von Dokument zu drucken, mit so etwas wie die folgenden gefunden habe:

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

Dieser Code-Schnipsel druckt einfach auf den ersten Drucker festgestellt, dass der Druck des Dokuments kann. In meinem Fall möchte ich einen Drucker durch seine URI nachzuschlagen, aber PrintServiceLookup scheint nicht, dies zu unterstützen. Ich habe einen PrintServiceAttributeSet versucht mit, statt PrintRequestAttributeSet, und das Hinzufügen eines PrinterURI Attribut, aber das liefert keine Drucker. Ich vermute, dass der Lookup-Service ist für einen Drucker suchen, der sein Ziel URI ändern kann, anstatt mit dem URI für den Drucker an.

Als letzter Ausweg, dachte ich gerade durch all die PrintServices von lookupPrintServices zurück aufzählt, aber die URI ist nicht in einem der Attribute. Der Druckername ist da, aber ich brauche die URI.

Für Hintergrund, mein Webapp braucht einen Barcode auf einen bestimmten Drucker zu drucken, basierend auf den aktuellen Benutzer. Jeder Benutzer wird mit einem Drucker zugeordnet URI, die auf einem CUP Server zu einem Drucker zeigt. Der Drucker-URI ist die einzige Information, die ich habe, und ich kann den Druckernamen nicht beschränkt den URI oder einen Teil der URI entsprechen.

Edit: ein bisschen Um zu klären, ich brauche nicht die Daten zu machen, ich brauche nur einen Klecks auf einen bestimmten Drucker zu kopieren. Der Teil kann ich nicht herausfinden, wie ein Drucker durch seine IPP URI zu identifizieren.

War es hilfreich?

Lösung

ich endlich einen Weg gefunden, dies zu tun, durch jipsi mit:

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);

Ich muss zugeben, ich bin enttäuscht, ein 3rd-Party-Bibliothek zu tun, etwas so scheinbar einfach wie das Drucken auf einem bestimmten Drucker.

verwenden, um mit

UPDATE

DR Punkte in den Kommentare out hat, dass jipsi einen neuen Hause und einen neuen Namen rel="nofollow.

Cups4J ist eine gute Alternative, aber wie der Name es schon sagt möglicherweise nicht richtig, wenn das Ziel ist kein CUPS-Server. Ich habe gute Ergebnisse hat Cups4J mit direkt an einen Zebra-Thermodrucker drucken.

Andere Tipps

Ich glaube nicht, dass Sie einen Drucker die Quere kommen können Sie möchten (ich glaube, der Java-Druckmechanismus früher IPP).

Sie können jedoch, wenn ich mich richtig erinnere Lage sein, den Druckauftrag lokal zu machen und versendet dann die Bytes des Ausgangsstroms auf den Ziel CUPS-Server „von Hand“. Wäre dies „gut genug“ für Sie?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top