发送十六进制命令到ESC / POS打印机Android

时间:2014-12-19 17:23:18

标签: java android printing hex thermal-printer

我正在开发一个需要直接打印到ESC / POS打印机的应用程序。打印很好,但是当向打印机发出命令时,它们只是打印!! 我尝试转换一些c#代码,而我尝试发送的命令是十六进制字符串,如下所示:

public static String PRINTLOGOCOMPANY = "\x1c\x70\x01\x30";

当然我知道这里有非法转义字符所以我把它改成了:

"\\x1c\\x70\\x01\\x30"

然后我转换为字节数组并尝试通过dataoutput流发送它,如下所示:

String WIDTH_1 ="\\x1d\\x57\\x120\\x01";

Log.i("Width String: ", WIDTH_1);
final byte [] width = WIDTH_1.getBytes();
final int portNo =  xxxx;
final String ipAddress = "xxx.xxx.x.xxx";

Thread thread = new Thread() {
    @Override
    public void run() {
        try {
            Socket sock = new Socket(ipAddress, portNo);
            DataOutputStream dOut = new DataOutputStream(sock.getOutputStream());
            dOut.writeInt(width.length);
            dOut.write(width);
            dOut.close();
            sock.close();
        } catch (UnknownHostException e) {

            e.printStackTrace();
            Log.i("Unknown Host Exception Error: ", String.valueOf(e));
        } catch (IOException e) {
            e.printStackTrace();
            Log.i("IO Exception Error: ", String.valueOf(e));
        }
    }
};
thread.start(

但它只是在另一端打印出来;

任何人都可以就此提出任何建议我非常感激。

1 个答案:

答案 0 :(得分:5)

如果我了解您的问题,您无法向打印机发送命令,它只会打印您的所有符号。您只需要发送字节。例如,打开您需要执行的操作:

Socket mSocket = new Socket(PRINTER_IP, PRINTER_PORT);
OutputStream mPrinter = mSocket.getOutputStream();
mPrinter.write(0x1B);
mPrinter.write(0x70);
mPrinter.write(0);              
mPrinter.write(200);  // t1 
mPrinter.write(255);  // t2