2016-11-18 3 views
1

Ich versuche, eine Textdatei mit dem angegebenen Code zu drucken. Alles funktioniert gut: Der Job wird in die Druckerwarteschlange des Druckers geladen. Nach einiger Zeit verschwindet es jedoch und nichts wird gedruckt. Außerdem gibt es keine Ausnahme oder Fehler im Code. Alles funktioniert gut, außer dass es nicht gedruckt wird. Ich verwende keine Druck-API.Drucken von Textdatei mit Java

public class PipedPrint implements Runnable { 
    PipedOutputStream pos = new PipedOutputStream(); 
    PipedInputStream pis = new PipedInputStream(); 
    byte[] abPrinterBytes = null; 

    private void mainProcess() throws IOException, PrintException, InterruptedException { 
     abPrinterBytes = getBytesFromFile(); 
     pis.connect(pos); 
     Thread randWriter = new Thread(this); 
     randWriter.start(); 
     PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet(); 
     DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE; 
     PrintService printService[] = PrintServiceLookup.lookupPrintServices(flavor, pras); 
     PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService(); 
     PrintService service = ServiceUI.printDialog(null, 200, 200, printService, defaultService, flavor, pras); 
     if (defaultService != null) { 
      DocPrintJob job = defaultService.createPrintJob(); 
      DocAttributeSet das = new HashDocAttributeSet(); 
      Doc doc = new SimpleDoc(pis, flavor, das); 
      System.out.println("Main::Fired Print"); 
      job.print(doc, pras); 
      System.out.println("Main::Done Print"); 
     } 
     randWriter.join(); 
     System.out.println("Main::Join Over"); 
    } 

    private byte[] getBytesFromFile() throws IOException { 
     File fFile = new File("C:\\Users\\Wijdan\\Documents\\NetBeansProjects\\demo_print\\src\\demo_print\\pass.txt"); //File to print 
     byte[] abFileBytes = new byte[(int) fFile.length()]; 
     BufferedInputStream in = new BufferedInputStream(new FileInputStream(fFile)); 
     for (int i = 0; i < abFileBytes.length; i += in .read(abFileBytes, i, (abFileBytes.length - i))); 
     return abFileBytes; 
    } 

    public void run() { 
     try { 
      Thread.sleep(5000); 
      System.out.println("RandWriter started Writing"); 
      for (int i = 0; i < abPrinterBytes.length; i += 400) { 
       pos.write(abPrinterBytes, i, ((i + 400) < abPrinterBytes.length) ? 400 : (abPrinterBytes.length - i)); 
       System.out.println("Thread:: Wrote bytes. Sleeping...."); 
       Thread.sleep(500); 
      } 
      pos.close(); 
      System.out.println("Thread::Closed pos. Exitting Thread..."); 
     } catch (Exception ie) { 
      ie.printStackTrace(); 
     } 
    } 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     PipedPrint t1 = new PipedPrint(); 
     try { 
      t1.mainProcess(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

haben Sie versucht zu debuggen? –

+0

was genau sollte ich debuggen? – Wijdan

+0

Ich habe vergessen, ms eine Notiz zu erwähnen, auch geöffnet, nachdem ich die Drucktaste im Druckdialog gedrückt habe – Wijdan

Antwort

0

Überprüfen Sie, ob

  1. Alle Importe:

    import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.PipedInputStream; import java.io.PipedOutputStream;

    import javax.print.Doc; import javax.print.DocFlavor; import javax.print.DocPrintJob; import javax.print.PrintException; import javax.print.PrintService; import javax.print.PrintServiceLookup; import javax.print.ServiceUI; import javax.print.SimpleDoc; import javax.print.attribute.DocAttributeSet; import javax.print.attribute.HashDocAttributeSet; import javax.print.attribute.HashPrintRequestAttributeSet; import javax.print.attribute.PrintRequestAttributeSet;

  2. t Stellen Sie sicher, er Dateipfad

  3. Ihre aktuellen Drucker wird als Standarddrucker auf Ihrem System gültig ist, und wenn es

+0

alles scheint in Ordnung zu sein geht es in der Druckerwarteschlange und dann dsappers von dort – Wijdan

+0

Sie wollen sagen, die Datei wird verschwinden aus der Druckwarteschlange richtig? –

+0

Nach dem Einrichten des Druckers als Standarddrucker gibt es keine Ausgabe auf der Konsole und das Problem bleibt bestehen. – Wijdan

0

arbeitet habe ich versucht, den Code war es funktioniert in meinem Fall in Ordnung. Mein Druckername ist HP LaserJet 4250.

Ich denke, dass ihre Ausgabe der Dateigröße sein kann, die Sie zum Drucken geben. Versuchen Sie, die Datei in Blöcken zu senden, anstatt alle gleichzeitig zu senden.

Aber auch wenn ich auf "Abbrechen" im UI-Bildschirm Teil zum Abbrechen des Druckes klicken, es gibt immer noch den Ausdruck.

Verwandte Themen