2016-11-18 27 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

印刷ダイアログで印刷ボタンを押した後もmsメモを開くのを忘れた – 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

すべてがうまくいくように見えますが、そこから印刷キューに入れてからダサッパを入れます。 – Wijdan

+0

ファイルが印刷キューから消えてしまっていると言いますか? –

+0

プリンタをデフォルトプリンタとして設定した後、コンソールに出力されず、問題は解決しません。 – Wijdan

0

を働いている場合、私はそれが私の場合には罰金働いていたあなたのコードを試してみましたです。私のプリンタ名はHP LaserJet 4250です。

私はそれらが印刷のために与えているファイルサイズの問題かもしれないと思います。一度にすべてを送信するのではなく、チャンクでファイルを送信してみてください。

しかし、印刷をキャンセルするためのUI画面の部分で[キャンセル]をクリックしても、依然として印刷が行われます。