2013-05-16 7 views
5

Ich verwende die Java Print Service API, um auf einem Belegdrucker zu drucken. Es druckt gut, schneidet aber nicht automatisch ab. Wie kann ich dem Drucker mitteilen, dass er automatisch schneidet?Java: Belegdrucker automatisches Schneiden

Hier ist der Code, den ich zu drucken bin mit:

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

Antwort

6

ich mir vorstellen würde es einen proprietären Befehl (in Form einer Bytefolge) Sie müssen an den Drucker senden es zu schneiden.

Für den TSP100 scheint this page auf 27, 100 und 3 zu verweisen, die die Bytes sind, die Sie benötigen.

Was auch immer das Modell, wenn Sie den Befehl in Form einer Folge von Bytes gefunden haben, sollten Sie in der Lage sein, es zu senden, um über einen ähnlichen Ansatz:

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

Mein Drucker ist ein Star TSP100 Drucker, aber dieser Befehl scheint nichts zu tun. –

+0

Meinst du, du hast die obigen Codes ausprobiert (was nicht funktioniert, weil sie für ein anderes Modell sind) oder die Codes für deinen Drucker? Von diesem Link (http://www.starmicronics.com/absolutefm/absolutefm/attachments/92/Application%20note%20-%20Star%20Micronics%20Printers%20with%20Booklog%20Software.pdf) die Einträge, die Sie im Byte wünschen Array scheint '27, 100, 3' zu sein. Funktioniert das überhaupt? – berry120

+0

Das hat es geschafft! Danke, dass du das für mich gefunden hast! –