2013-07-18 19 views
5

Ich habe zwei peices von Code für Java unter Verwendung von Druck wie unten zu sehen:Druckdateien in Java mit Raster PTR Druckern

der ersten Code

for(int i = 0; i < files.length; i++) { 
    String file = "C:\\images\\colour\\"+files[i].getName(); 
    String filename = file; 
    PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet(); 
    DocFlavor flavor = DocFlavor.INPUT_STREAM.GIF; 
    PrintService printService[] = PrintServiceLookup.lookupPrintServices(flavor, pras); 
    PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService(); 
    PrintService service = ServiceUI.printDialog(null, 200, 200, printService, defaultService, DocFlavor.INPUT_STREAM.GIF, pras); 

    if (service != null) { 
     DocPrintJob job = service.createPrintJob(); 

     PrintJobListener listener = new PrintJobAdapter() { 
      public void printDataTransferCompleted(PrintJobEvent e) { 
       System.exit(0); 
      } 
     }; 

     job.addPrintJobListener(listener); 
     FileInputStream fis = new FileInputStream(filename); 
     DocAttributeSet das = new HashDocAttributeSet(); 
     Doc doc = new SimpleDoc(fis, flavor, das); 
     job.print(doc, pras); 

    } 
} 

Dieser Code hat einen Druckdialog und Drucke wie auf dem beabsichtigten Drucker

der zweite Code:

try { 
    PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet(); 
    pras.add(new Copies(1)); 

    PrintService pss[] = PrintServiceLookup.lookupPrintServices(DocFlavor.INPUT_STREAM.GIF, pras); 

    if (pss.length == 0) 
     throw new RuntimeException("No printer services available."); 

    PrintService ps = pss[3]; 
    System.out.println("Printing to " + ps); 
    DocPrintJob job = ps.createPrintJob(); 

    FileInputStream fin = new FileInputStream(files[i]); 
    Doc doc = new SimpleDoc(fin, DocFlavor.INPUT_STREAM.GIF, null); 
    job.print(doc, pras); 

    fin.close(); 
} 
catch (IOException ie) { 
    ie.printStackTrace(); 
} 
catch (PrintException pe) { 
    pe.printStackTrace(); 
} 

}

druckt ohne einen Druckdialog, was ich bin, aber das wird eine leere Seite an den Drucker drucken.

Jetzt kann Ziel ist es, nur einen dieser Codes zu verwenden, aber ich habe geliefert, was ich versucht habe. Ich muss Code 1 arbeiten, aber ohne DruckerDialog.

Wenn ich den printerDialog von Code 1 entferne, tut es im Grunde dasselbe wie Code 2 (druckt leer auf diesem Drucker).

Ich glaube, das Problem ist, mit den im Code übergebenen Parameter eines von PrintService service = ServiceUI.printDialog(null, 200, 200, printService, defaultService, DocFlavor.INPUT_STREAM.GIF, pras); nicht mehr

bestanden

Gibt es trotzdem, die Parameter von Printservice Service vorbei = ServiceUI.printDialog (null, 200, 200, Printservice, defaultService , DocFlavor.INPUT_STREAM.GIF, pras); in den Drucker ohne Verwendung eines Dialogs oder gibt es eine Möglichkeit, den Dialog zu überspringen, als ob der Benutzer ja geklickt hat?

Entschuldigen Sie sich zuerst für die sehr lange Post. Hoffe, dass jemand helfen kann, oder mir etwas Rat geben. Vielen Dank im Voraus

Antwort

0

Wenn Ihr Ziel ist nur eine Datei zu drucken, gibt es viel einfache Methoden, dies zu tun, wie java.awt.Desktop.print

heren den Code mit der Batch-Datei auszuführen i unten für eine bessere Format erwähnt

Process p; 
    String execBatchPath = "your file path"; 

    try { 
     p = Runtime.getRuntime().exec("cmd /c start " + execBatchPath); 
     p.waitFor(); 
    } catch (IOException e) { 
     FileIO.writeLog("IO exception while trying to run the batch"); 
     ErrorUtils.manageCatch(e); 
    } catch (InterruptedException e) { 
     FileIO.writeLog("Batch process was interrupted"); 
     ErrorUtils.manageCatch(e); 
    } 
+0

ist es möglich, Drucker mit dieser Methode anzugeben? –

+0

nein, aber das war meine Lösung für das gleiche Problem. Sie können eine Batch-Datei über Java mit dem Befehl 'rundll32 printui.dll, PrintUIEntry/y/q/n" Druckername "' schreiben und dann ausführen lassen. Dadurch wird der Standarddrucker auf dem Computer geändert, und der Befehl Desktop.print verwendet die Einstellungen Ihres Computers, sodass immer auf dem Drucker gedruckt wird, der derzeit als Standard festgelegt ist. führen Sie mit so etwas aus – user2464620

+0

Ich bearbeitete meine Antwort, um zu zeigen, wie die Batch-Datei – user2464620