首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将ESC/POS命令发送到usb打印机?

如何将ESC/POS命令发送到usb打印机?
EN

Stack Overflow用户
提问于 2016-11-05 23:39:46
回答 2查看 6.1K关注 0票数 1

我的目标是通过编程打开一个现金抽屉,但是我没有找到关于Java如何与Windows端口交互的详细信息,所以我无法让它工作。以下是我尝试过的方法( Java控制台中没有错误):

代码语言:javascript
复制
public void cashdrawerOpen()   {

    String code1 = "27 112 0 150 250"; //decimal
    String code2 = "1B 70 00 96 FA"; //hexadecimal
    String code = "ESCp0û."; //ascii

     PrintService service = PrintServiceLookup.lookupDefaultPrintService();
     System.out.println(service.getName());
     DocFlavor flavor = DocFlavor.BYTE_ARRAY.AUTOSENSE;
    DocPrintJob pj = service.createPrintJob();
     byte[] bytes;
     bytes=code2.getBytes();
     Doc doc=new SimpleDoc(bytes,flavor,null);
      try {
        pj.print(doc, null);
    } catch (PrintException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}


public void cashdrawerOpen2(){
    String code1 = "27 112 0 150 250";
    String code2 = "1B 70 00 96 FA";
    String code = "ESCp0û.";
    FileOutputStream os = null;
    try {
        os = new FileOutputStream("USB001:POS-58");
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
      PrintStream ps = new PrintStream(os);
      ps.print(code1.getBytes());
      ps.close();
}

然后我开始使用cmd,特别是跟随this线程,但是当我执行命令‘/b open.bat USB001’时,它只是说:‘覆盖USB001?(是/否/全部)’

有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-09 18:21:54

解决了。

我没有找到如何通过USB发送命令,我不得不模拟LPT端口。

如果您的打印机附带了名为TM虚拟端口驱动程序或类似的驱动程序(在我的示例中):

  1. 安装它并配置与GUI的打印机连接。
  2. 利用Java方法

若否,则:

  1. 共享控制面板中的打印机。
  2. 打开cmd作为管理员
  3. NET使用LPT1 [Computer-Name]\Printer /Persistent:Yes (在win8.1中不起作用)
  4. 来自Java: 公共cashdrawerOpen(){ String code2 = "1B700096FA";//十六进制FileOutputStream os = null;尝试{ os =新FileOutputStream(“LPT1 1:pos-58”);} catch (FileNotFoundException e ) { e.printStackTrace();} PrintStream ps =新PrintStream(os);ps.print( toAscii( code2));ps.close();} public StringBuilder toAscii(字符串十六进制){ StringBuilder output = new StringBuilder();对于(int i= 0;i< hex.length();i+=2) { String str = hex.substring(i,i+2);output.append((char)Integer.parseInt(str,16));}返回输出;}
票数 1
EN

Stack Overflow用户

发布于 2016-11-06 00:13:20

Well...the USB001文件必须已经存在于要复制到的位置,现在它询问您是否要覆盖它,因为您要将open.bat复制到完全相同的USB001文件名。

如果您总是希望覆盖USB001文件,那么也可以使用/Y开关,例如:

代码语言:javascript
复制
copy /B /Y open.bat USB001

您可以在命令提示符下查看用于复制的所有开关,输入:

代码语言:javascript
复制
copy /?
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40444457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档