如何从java代码向打印机发送包含ESC / POS命令的.text文件

时间:2012-12-06 23:43:12

标签: java printing

到目前为止我所拥有的是以下代码:

 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;

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

3 个答案:

答案 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设备。