2016-11-18 128 views
1

打印文本文件,我想用給定的代碼,以打印文本文件。一切正常:作業進入打印機的打印隊列。然而,一段時間後,它消失了,沒有任何東西被打印出來。此外,代碼中沒有例外或錯誤。一切都很好,除非不打印。我沒有使用打印API。與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

你嘗試調試嗎? –

+0

我應該調試什麼特定的? – Wijdan

+0

我忘了提毫秒一個音符也開我在打印對話框擊中打印按鈕後 – Wijdan

回答

0

檢查

  1. 所有進口:

    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. 確保ŧ他的文件路徑是否有效

  3. 您當前的打印機設置爲你的系統默認打印機,如果工作

+0

一切似乎是罰款它將出現在打印隊列,然後dsappers從那裏 – Wijdan

+0

你的意思是說文件正從打印隊列中消失的權利? –

+0

將打印機設置爲默認打印機後,控制檯上沒有輸出,問題依然存在。 – Wijdan

0

我想你的代碼,它是在我的情況下正常工作。我的打印機名稱的HP LaserJet 4250

我認爲他們可能是你給打印文件大小的問題。請嘗試以塊的形式發送文件,而不是一次發送全部文件。

但是,即使當我點擊用戶界面屏幕部分用於取消打印「取消」,它仍然給打印輸出。