2015-04-27 186 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