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

时间:2016-11-05 23:39:46

标签: java cmd ports escpos

我的目标是以编程方式打开现金抽屉,但我没有找到有关Java如何与Windows端口交互的详细信息,因此我无法使其正常工作。这些是我尝试过的方法(在Java控制台中没有错误):

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线程一起玩,但是当我执行命令'copy / b open.bat USB001'时,它只是说:'覆盖USB001? (是/否/全部)'

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

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

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

copy /B /Y open.bat USB001

您可以通过输入以下命令在命令提示符下查看COPY的所有开关:

copy /?

答案 1 :(得分:0)

解决。

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

如果您的打印机附带名为TM Virtual Port Driver的驱动程序或类似的东西(在我的情况下):

  1. 安装它并使用GUI配置打印机连接。
  2. 使用Java方法
  3. 如果不是:

    1. 在控制面板中共享打印机。
    2. 以管理员身份打开cmd
    3. NET USE LPT1 \ [Computer-Name] \ Printer     /持久性:是(在win8.1中不起作用)
    4. 来自Java的
    5. T