Android 使用热敏打印机打印条形码

Android 使用热敏打印机打印条形码,android,printing,thermal-printer,Android,Printing,Thermal Printer,我能够打印文本,但当涉及到条形码时,它不会显示或只是显示不规则的文本 这是我的源代码 //barcode 128 byte[] formats = {(byte) 0x1d, (byte) 0x6b, (byte) 0x73,(byte) 0x0d}; byte[] contents = content.getBytes(); byte[] bytes = new byte[formats.

我能够打印文本,但当涉及到条形码时,它不会显示或只是显示不规则的文本

这是我的源代码

//barcode 128
                byte[] formats  = {(byte) 0x1d, (byte) 0x6b, (byte) 0x73,(byte) 0x0d};
                byte[] contents = content.getBytes();

                byte[] bytes    = new byte[formats.length + contents.length];

                System.arraycopy(formats, 0, bytes, 0, formats.length );
                System.arraycopy(contents, 0, bytes, formats.length, contents.length);


                usbCtrl.sendByte(bytes, dev);

                usbCtrl.sendByte(LineFeed(), dev);
但是结果条形码没有显示,我是不是遗漏了什么

请帮帮我

编辑

我发现ESC/POS代码:

GS k m d1…dk NUL或GS k m n d1…d k


但是当我尝试这个方法时,仍然得到了相同的结果,
GS k
POS代码有两个版本(正如您已经发现的):

此版本仅适用于纯ASCII数据,因为它使用
0x00
(NUL)作为终止符。

此版本使用附加长度字节
n
来指示数据部分(它也仅适用于某些编码,包括
CODE128

您的代码在命令字节中有一个杂散的
0x0d
,并且可能使用了错误的格式

如果计划打印纯ASCII数据格式,请使用以下命令:

byte[] formats  = {(byte) 0x1d, (byte) 0x6b, (byte) 0x49};
byte[] contents = content.getBytes();

byte[] bytes    = new byte[formats.length + contents.length + 1];

System.arraycopy(formats, 0, bytes, 0, formats.length );
System.arraycopy(contents, 0, bytes, formats.length, contents.length);

// add a terminating NULL
bytes[formats.length + contents.length] = (byte) 0x00;
或更安全的版本,因为它也具有预期的数据长度:

byte[] contents = content.getBytes();
// include the content length after the mode selector (0x49)
byte[] formats  = {(byte) 0x1d, (byte) 0x6b, (byte) 0x49, (byte)content.length};

byte[] bytes    = new byte[formats.length + contents.length];

System.arraycopy(formats, 0, bytes, 0, formats.length );
System.arraycopy(contents, 0, bytes, formats.length, contents.length);
如果两者都不起作用,则打印机可能根本不支持
CODE128


5890是一种足够常见的规格,市场上有许多廉价的“随车即用”替代品,它们省去了更复杂的条形码实现,只包括简单的编码,如
EAN8
EAN13
等。

检查您的打印机是否支持条形码打印。。您正在使用哪台热敏打印机我使用的是永利型号:POS-5890H USB纸宽58毫米,我在规格上看到了它的支持条形码OK明天我会试试您的代码希望它能工作,谢谢,我会在几个小时后回来工作-我会用我们自己的代码128函数再次检查:)好的,小编辑:它是十六进制0x49(十进制73)对于CODE128打印输出。结果如下:您的代码在打印机类型ZJ-5802DD上运行良好蓝牙以前不工作,但现在可以,所以我认为我的USB打印机不支持打印条形码,无论如何非常感谢您对我的帮助和清楚的解释,我很高兴您的代码工作,也许我必须更改我的打印机USB:D
byte[] formats  = {(byte) 0x1d, (byte) 0x6b, (byte) 0x49};
byte[] contents = content.getBytes();

byte[] bytes    = new byte[formats.length + contents.length + 1];

System.arraycopy(formats, 0, bytes, 0, formats.length );
System.arraycopy(contents, 0, bytes, formats.length, contents.length);

// add a terminating NULL
bytes[formats.length + contents.length] = (byte) 0x00;
byte[] contents = content.getBytes();
// include the content length after the mode selector (0x49)
byte[] formats  = {(byte) 0x1d, (byte) 0x6b, (byte) 0x49, (byte)content.length};

byte[] bytes    = new byte[formats.length + contents.length];

System.arraycopy(formats, 0, bytes, 0, formats.length );
System.arraycopy(contents, 0, bytes, formats.length, contents.length);