2015-04-27 151 views
3

此类用于打印出一个文件。我有一个JButton(未在下面的代码中显示)运行此代码并打开一个打印对话框。但是,当我点击打印时,它开始打印,但如果文本不占用整个页面,它将停止,并且不会从打印机中弹出。我是否错过可能导致此问题的内容?在打印机中停止纸张 - Java打印问题

try{ 
     FileInputStream textStream; 
     PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet(); 
     textStream = new FileInputStream(testFileName); 
     DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE; 
     Doc test = new SimpleDoc(textStream, flavor, null); 

     PrintService[] services = PrintServiceLookup.lookupPrintServices(flavor, aset); 

     PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService(); 

     if(services.length == 0){ 
      if(defaultService==null){ 
       System.out.println("NO PRINTERS"); 
      }else{ 
       DocPrintJob job = defaultService.createPrintJob(); 
       job.print(test, aset); 
      } 
     }else{ 

      PrintService service = ServiceUI.printDialog(null, 200, 200, services, defaultService, flavor, aset); 


      if(service != null){ 
       DocPrintJob job = service.createPrintJob(); 
       job.print(test, aset); 
      } 
     } 

    }catch (IOException | PrintException e){ 
     e.printStackTrace(); 
    } 
+0

您是否收到错误信息 - 无论是与打印机本身还是程序?任何有关这方面的额外信息都可能有所帮助。 – snickers10m

+0

不,根本没有错误消息。它只停在打印机中。我去打印其他东西(不是来自我的程序),它开始打印在打印机剩余页面的底部。 – camm73

+0

我必须说,这是打印机参与我所听说过的最奇怪的行为。您是否有权访问另一台打印机或有一位朋友可以通过他们自己的打印机运行程序?这听起来像是它可能是打印机的问题,而不是Java。 – snickers10m

回答

0

javax.print和你的代码的工作是这样的:

看了一些(未指定= INPUT_STREAM.AUTOSENSE)格式的InputStream(某些文件)和 “提交”(.print)PrintJob的到操作系统打印机系统。

接下来发生的事情完全取决于您的操作系统设置,如正确安装的打印机驱动程序和打印机连接。

在您的情况下,目标队列可能不支持您尝试打印的文件格式(又名PDL)。甚至基于文本的PDL也使用ESC sequences进行打印机控制。 Windows和Unix/Mac系统有不同的方法。默认情况下,CUPS可以处理PDF或Postscript等PDL。

一旦job.print()方法结束,由操作系统来处理打印数据。要跟踪问题,您应该检查您的操作系统打印机系统。在Unix上可能是CUPS