Java: Coupe automatique d'imprimante de reçu


J'utilise l'API Java Print Service pour imprimer sur une imprimante de reçus. Il imprime bien, mais ne coupe pas automatiquement une fois terminé. Comment dire à l'imprimante de couper automatiquement?

Voici le code que j'utilise pour imprimer:

       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();
                }
Author: James Harpe, 2013-05-16

1 answers

J'imagine qu'il existe une commande propriétaire (sous la forme d'une séquence d'octets) que vous devez envoyer à l'imprimante pour la couper.

Pour le TSP100, cette page semble faire allusion à 27, 100 et 3 étant les octets dont vous avez besoin.

Quel que soit le modèle, lorsque vous avez trouvé la commande sous la forme d'une séquence d'octets, vous devriez pouvoir l'envoyer en utilisant une approche similaire à ci-dessus:

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);
 7
Author: Michael Berry, 2013-05-21 11:48:26