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

我认为他们可能是你给打印文件大小的问题。请尝试以块的形式发送文件,而不是一次发送全部文件。

但是,即使当我点击用户界面屏幕部分用于取消打印“取消”,它仍然给打印输出。