andyah
Goto Top

Java - drucken auf Netzwerkdrucker

Hi NG,

wie kann ich Drucke auf einem Netzwerkdrucker ausgeben?

Im Netz habe ich leider nichts gefunden.

Ein Paar Zeilen Code wären hilfreich.

Gruß
Andy

Content-ID: 247676

Url: https://administrator.de/contentid/247676

Ausgedruckt am: 08.11.2024 um 05:11 Uhr

ITvortex
ITvortex 28.08.2014 um 12:00:27 Uhr
Goto Top
Zitat von @AndyAh:

wie kann ich Drucke auf einem Netzwerkdrucker ausgeben?


Inwiefern sollte sich ein Netzwerkdrucker zu einem Lokal installierten Drucker unterscheiden?

Wenn du einen Netzwerkdrucker über Java installieren willst dann ist das was anderes, den Drucken ohne das der Drucker installiert ist kann Windows nicht, warum sollte es also Java können?

Ich weiß nicht ob ich dich richtig verstanden habe, aber drucken geht z.B. so:


     
    import javax.print.*;
    import javax.print.attribute.*;
    import java.io.*;
    import javax.print.event.PrintJobListener;
    import javax.print.event.PrintJobEvent;
    import java.awt.GraphicsEnvironment;
     
     
    private MyDruckListener drucker = new MyDruckListener();
     
    public PrintDocument(String strFilename, int iDevice)
    {
    try
    {
    PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
    //setzt das auszudruckend Dokument fest
    DocFlavor flavor = DocFlavor.INPUT_STREAM.XXX; //hier nachsehen, welches man benötigt!
    PrintService printService = PrintServiceLookup.lookupPrintServices(
    flavor, pras);
    PrintService defaultService = PrintServiceLookup.
    lookupDefaultPrintService();
     
    PrintService service = null;
    //wenn als Device -1 übergeben wird, wird ein Dialog für das drucken auswählen ausgegeben!
    if (iDevice == -1)
    {
    service = ServiceUI.printDialog(GraphicsEnvironment.
    getLocalGraphicsEnvironment().
    getDefaultScreenDevice().
    getDefaultConfiguration(), 200, 200,
    printService, defaultService, flavor, pras);
    }
    //ansonsten wird der 1te (Standard/Default) Drucker genommen
    else
    {
    //wenn es keine Drucker gibt und das Device niedriger ist als die Länge
    if (printService != null && printService.length != 0 && printService.length > iDevice)
    {
    service = printService[iDevice];
    }
    //ansonsten standarddevice
    else if(printService != null && printService.length != 0)
    {
    service = printService;
    }
    }
    //wenn der Dateiename null ist, wird die Druckfunktion beendet!
    if(strFilename == null)
    {
    return;
    }
    //wenn der Service nicht null ist, wird ausgedruckt
    if (service != null)
    {
    DocPrintJob job = service.createPrintJob();
    //fügt listener hinzu
    job.addPrintJobListener(drucker);
    FileInputStream fis = new FileInputStream(strFilename);
    DocAttributeSet das = new HashDocAttributeSet();
    Doc doc = new SimpleDoc(fis, flavor, das);
    job.print(doc, pras);
    }
    }
    //wenn kein Druckerdevice gefunden wurde!!
    catch (ArrayIndexOutOfBoundsException ex)
    {
    ex.printStackTrace();
    System.out.println("Keine Drucker gefunden!!");  
    }
    //bei sonstigen Exceptions!
    catch (Exception ex)
    {
    ex.printStackTrace();
    }
    }
     
    private class MyDruckListener implements PrintJobListener
    {
    public void printDataTransferCompleted(PrintJobEvent printJobEvent)
    {
    System.out.println("Daten wurden zum Drucker geschickt!");  
    }
     
    public void printJobCompleted(PrintJobEvent printJobEvent)
    {
    System.out.println("Drucker hat fertig gedruckt!");  
    }
     
    public void printJobFailed(PrintJobEvent printJobEvent)
    {
    System.out.println("Fehler beim Drucken!");  
    }
     
    public void printJobCanceled(PrintJobEvent printJobEvent)
    {
    System.out.println("Abbruch des druckes!");  
    }
     
    public void printJobNoMoreEvents(PrintJobEvent printJobEvent)
    {
    System.out.println("JobNoMoreEvents!");  
    }
     
    public void printJobRequiresAttention(PrintJobEvent printJobEvent)
    {
    System.out.println("JobRequieresAttention!");  
    }
    }
AndyAh
AndyAh 28.08.2014 um 12:11:38 Uhr
Goto Top
Hi,

eigentlich wollte ich nur einfachen Text drucken. Der Drucker ist natürlich in Windows und Linux eingebunden.

Gruß
Andy
ITvortex
ITvortex 28.08.2014 um 12:19:22 Uhr
Goto Top
Hier eine Anleitung: http://www.torsten-horn.de/techdocs/java-print.htm


Gruß
ITvortex
AndyAh
AndyAh 28.08.2014 um 14:10:35 Uhr
Goto Top
Hi,

ich habe im WikiBook für Java zwar ein Beispiel gefunden:

import java.awt.Toolkit;

 class PrinterInfo2
 {
   public static void main( String args )
   {
     Toolkit tk = Toolkit.getDefaultToolkit();
     PrintJob pj = tk.getPrintJob( new Frame(), "", null );  //dummy-Frame erzeugen  
     if ( pj != null )
     {  // FileOutputStream in PrintWriter packen
       PrintWriter pw = new PrintWriter( new FileOutputStream( "PRN:" ));  
       pw.println( "Hallo lieber Drucker" );  
       pw.println( "... und das ist Zeile2 ..." );  
       pw.close();  // resource freigeben
     }
  }
 }


das aber so nicht funktioniert. Ich nehme an, das sich der Drucker am PRN: stört. Wie muss ich das Beispiel umschreiben, dass es funktioniert?

Gruß
Andy
ITvortex
ITvortex 28.08.2014 um 15:38:32 Uhr
Goto Top
Wenn du eine Datei ohne Druckerauswahl drucken möchtest dann brauchst du folgenden Code:

Desktop.getDesktop().print(new File("C://Users/xxx/Desktop/axyf.txt"));  

Hierbei wird der Standarddrucker verwendet.

Mit Druckerauswahl:

http://wiki.byte-welt.net/wiki/Drucken_von_Dokumenten_in_Java

Gruß
ITvortex
AndyAh
AndyAh 29.08.2014 um 11:01:53 Uhr
Goto Top
Hi,

der obere Tipp funktioniert. Aber den Tipp aus dem Link bekomme ich leider nicht zum Laufen.

Gruß
Andy
ITvortex
ITvortex 29.08.2014 um 11:19:28 Uhr
Goto Top
Was genau darf ich unter nicht zum Laufen verstehen?

Bite etwas ausführlicher erklären: Programmcode und Fehlermeldungen.

Gruß
ITvortex