2013-05-16 2 views
5

Utilizzo l'API del servizio di stampa Java per stampare su una stampante di ricevute. Stampa bene, ma non taglia automaticamente una volta terminato. Come dire alla stampante di tagliare automaticamente?Java: taglio automatico della stampante di ricevute

Ecco il codice che sto usando per la stampa:

 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(); 
       } 

risposta

6

posso immaginare che ci sia un comando di proprietà (sotto forma di una sequenza di byte) è necessario inviare alla stampante per tagliarlo.

Per il TSP100, this page sembra alludere a 27, 100 e 3 sono i byte necessari.

Qualunque sia il modello, quando hai trovato il comando sotto forma di una sequenza di byte, si dovrebbe essere in grado di inviarlo utilizzando un approccio simile al precedente:

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

La mia stampante è una stella TSP100 stampante, ma questo comando non sembra fare nulla. –

+0

Vuoi dire che hai provato i codici sopra (che non funzioneranno perché sono per un modello diverso) o i codici della tua stampante? Da questo collegamento (http://www.starmicronics.com/absolutefm/absolutefm/attachments/92/Application%20note%20-%20Star%20Micronics%20Printers%20with%20Booklog%20Software.pdf) le voci desiderate nel byte l'array sembra essere '27, 100, 3'. Funziona affatto? – berry120

+0

Questo l'ha fatto! Grazie mille per averlo trovato! –