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

时间:2016-01-28 09:10:54

标签: android printing thermal-printer

我能够打印文字,但是当涉及到条形码时,它始终没有显示或只显示数字参数

这是我的源代码

 $(this).nextAll('.tileinfo:first').addClass('active');

但结果条形码没有显示,我错过了什么

请帮帮我

修改

我找到了ESC / POS代码:

  

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

但仍然无法正常工作

1 个答案:

答案 0 :(得分:3)

GS k POS代码有两个版本(正如您已经发现的那样):

GS k    - print one dimensional barcode  
   m    - barcode mode selector  
   [d]k - data bytes
   NUL  - terminator

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

GS k    - print one dimensional barcode  
   m    - barcode mode selector  
   n    - content length in bytes
   [d]k - data bytes

此版本使用额外的长度字节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是一个很常见的规格,市场上有很多便宜的“插入式”替代产品,省​​去了更复杂的条形码实现,只包括EAN8EAN13这样的简单编码等