4

到目前为止,我有以下代码:

 FileInputStream fin =new FileInputStream(filename);
 DocFlavor df = DocFlavor.INPUT_STREAM.AUTOSENSE;                    
 Doc d = new SimpleDoc(fin, df, null);   
 PrintService P = PrintServiceLookup.lookupDefaultPrintService();

  if (P != null) {              
     DocPrintJob job = P.createPrintJob();  
     job.print(d, null);  
            }
    fin.close;

代码工作正常,但如果文件包含命令,打印机不会解释命令,它会继续打印文件的确切字符串内容。那么如何向爱普生收据打印机发送命令?

4

3 回答 3

6

正如已经发现的那样,命令可能必须直接发送而不是 ESC/POS 格式,但您需要将代码解释为 Java 代码中的十六进制并以我发布的方式发送到打印机,无论是来自文件还是字符串。作为示例,而不是通过以下方式初始化 Epson 收据打印机:

  PRINT #1, CHR$(&H1B);"@";

并在收据打印机中剪纸,代码可能是:

  PRINT #1, CHR$(&H1D);"V";CHR$(1);

所以这就是它对我的工作方式。

    char[] initEP = new char[]{0x1b, '@'};
    char[] cutP = new char[]{0x1d,'V',1};
    String Ptxt=  new String(initEP)+ " text data \n \n \n"+ new String(cutP);

代替

    Doc d = new SimpleDoc(new FileInputStream(filename), df, null);  

采用

    InputStream pis = new ByteArrayInputStream(Ptxt.getBytes());
    Doc d = new SimpleDoc(pis, df, null);

然而,它可能是一种将代码作为命令格式发送的方法,但到目前为止还无法做到这一点。并且不确定它是否可以从java完成。

于 2012-12-09T01:39:15.800 回答
1

最后一步是使用输入文件中的真实 ASCII 值插入打印机命令——例如,转义字符是 ASCII 值 0x1B。这可以通过使用允许插入任何 ASCII 值的编辑器来完成,例如十六进制编辑器或 Notepad++ 的字符面板(在“编辑”菜单下),或者通过在从文件读取数据后以编程方式修改发送到打印机的数据。

于 2012-12-07T17:04:42.853 回答
1

在运行 linux(Ubuntu 12)时,当打印机驱动程序为通用 + 文本时会出现此问题。选择通用 + 原始队列,使打印机的行为更像 ESC POS 设备。

于 2013-08-11T11:13:46.303 回答