2013-05-16 63 views
5

我正在使用Java Print Service API打印到收據打印機。它打印效果不錯,但完成後不會自動剪切。如何告訴打印機自動切割?Java:收據打印機自動切割

下面是我用打印的代碼:

 String defaultPrinter = 
        PrintServiceLookup.lookupDefaultPrintService().getName(); 
       System.out.println("Default printer: " + defaultPrinter); 
       PrintService service = PrintServiceLookup.lookupDefaultPrintService(); 

       InputStream is=null; 
       try { 
        printString+="\f"; 
        System.out.println(printString); 
        is = new ByteArrayInputStream(printString.getBytes("UTF8"));      
       } catch (UnsupportedEncodingException e1) { 
        // TODO Auto-generated catch block 
        e1.printStackTrace(); 
       } 

       PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet(); 
       pras.add(new Copies(1)); 


       DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE; 

       Doc doc = new SimpleDoc(is, flavor, null); 

       DocPrintJob job = service.createPrintJob(); 

       PrintJobWatcher pjw = new PrintJobWatcher(job); 
       try { 
        job.print(doc, pras); 
       } catch (PrintException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
       pjw.waitForDone(); 
       try { 
        is.close(); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 

回答

6

我會想象有一個專有命令(一個字節序列的形式),你需要發送到打印機削減它。

對於TSP100,this page似乎暗指27,100和3是您需要的字節。

不管是什麼模式,當你在一個字節序列的形式存在的命令,你應該能夠使用類似的方法將其發送到上面:

DocPrintJob job = PrintServiceLookup.lookupDefaultPrintService().createPrintJob(); 
byte[] bytes = {27, 100, 3}; 
DocFlavor flavor = DocFlavor.BYTE_ARRAY.AUTOSENSE; 
Doc doc = new SimpleDoc(bytes, flavor, null); 
job.print(doc, null); 
+0

我的打印機是一星TSP100打印機,但這個命令似乎沒有做任何事情。 –

+0

你的意思是你試過上面的代碼(這將不起作用,因爲它們是用於不同的型號)或代碼到你的打印機?從這個鏈接(http://www.starmicronics.com/absolutefm/absolutefm/attachments/92/Application%20note%20-%20Star%20Micronics%20Printers%20with%20Booklog%20Software.pdf)你想在字節中的條目數組看起來是'27,100,3'。這是否有用? – berry120

+0

這樣做!非常感謝您爲我找到這個! –