到目前为止我所拥有的是以下代码:
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;
代码工作正常,但如果包含命令的文件打印机不解释命令,它会继续打印文件的确切字符串内容。 那么如何向爱普生收据打印机发送命令?
答案 0 :(得分:5)
正如已经发现的那样,命令可能不是直接以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完成。
答案 1 :(得分:1)
最后一步是在输入文件中使用真正的ASCII值插入打印机命令 - 例如,转义字符是ASCII值0x1B。这可以通过使用允许插入任何ASCII值的编辑器来完成,例如十六进制编辑器或Notepad ++的字符面板(在编辑菜单下),或者通过以编程方式修改从文件读取后发送到打印机的数据。
答案 2 :(得分:1)
运行linux(Ubuntu 12)时,打印机驱动程序出现此问题 通用+文本。 选择通用+原始队列,使打印机的行为更像ESC POS设备。