1

我的目标是以编程方式打开一个现金抽屉,但我没有找到有关 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,特别是在这个线程之后,但是当我执行命令 'copy /b open.bat USB001' 它只是说:'覆盖 USB001 ?(是/否/全部)'

任何的想法?

4

2 回答 2

1

解决了。

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

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

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

如果不:

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

    public void cashdrawerOpen(){ 
        String code2 = "1B700096FA"; // my code in hex
        FileOutputStream os = null;
        try {
            os = new FileOutputStream("LPT1:POS-58");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
          PrintStream ps = new PrintStream(os);
        ps.print(toAscii(code2));
          ps.close();
    }
    
    public StringBuilder toAscii( String hex ){
    StringBuilder output = new StringBuilder();
    for (int i = 0; i < hex.length(); i+=2) {
    String str = hex.substring(i, i+2);
    output.append((char)Integer.parseInt(str, 16));
    }
     return output;
    
    }
    
于 2016-11-09T18:21:54.420 回答
-1

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

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

copy /B /Y open.bat USB001

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

copy /?
于 2016-11-06T00:13:20.870 回答