【问题标题】:How to print QR code (or bitmap) to thermal printer?如何将二维码(或位图)打印到热敏打印机?
【发布时间】:2022-01-05 12:38:58
【问题描述】:

我正在使用在 linux/windows 和 android 上运行的软件。
在 linux 和 windows 上,它通过生成位图并通过ESC * 发送到串行热敏打印机来打印二维码。
在 android 上它使用蓝牙,但对于特定设备(具有 android 4.4 的平板电脑),打印机实际上是串行的。所以,它应该和在 linux 或 windows 上一样工作。

只有它没有,它会打印出这个烂摊子:

打印机自检打印一个二维码,所以我认为它确实支持二维码。我不知道它是哪个品牌/型号,搜索“80-IV-UR 热敏打印机”产量不多。

所以我继续尝试实施GS ( k。这就是我所在的地方:
GS ( k 165: 0x1D 0x28 0x6B 0x04 0x00 0x31 0x41 0x32 0x00 (n1 0x31, 模型 1)
GS ( k 167: 0x1D 0x28 0x6B 0x03 0x00 0x31 0x43 0x08 (n 0x08)
GS ( k 169: 0x1D 0x28 0x6B 0x03 0x00 0x31 0x45 0x31 (n 0x31, ECC M)
GS ( k 180: 0x1D 0x28 0x6B 0x0E 0x00 0x31 0x50 0x30 0x69 0x20 0x61 0x6D 0x20 0x61 0x20 0x74 0x65 0x73 0x74 (pL 14 pH 0 "我是一个测试")
GS ( k 181: 0x1D 0x28 0x6B 0x03 0x00 0x31 0x51 0x30 (m 0x30)
GS ( k 182: 0x1D 0x28 0x6B 0x03 0x00 0x31 0x52 0x30 (m 0x30)

但是,当打印机到达收据的这一部分时,它就会停止。
打印 1:打印 QR 之前的所有内容
打印 2:不打印任何内容
打印 3:打印 QR 之前的所有内容
打印 4:不打印任何内容
...

是我使用这些命令有误还是其他地方有问题?
GS ( k 182 (传输大小) 是可选的吗?
这些 ESC/POS 命令是否得到广泛支持?从什么时候开始?
GS的数据部分(k 180字节/十六进制也是如此还是应该是ASCII?

【问题讨论】:

  • 打印机供应商必须是 EPSON,这一点很重要。如果不是EPSON,可能不支持ESC/POS控制序列。
  • @kunif 绝大多数供应商都支持爱普生的 ESC/POS 标准。我不知道这台特定打印机的供应商是哪家,但自检页面确实说明了“命令标准:EPSON(ESC/POS)”。
  • 主要使用的命令会兼容。但对于 EPSON 以外的供应商而言,并非所有产品在每个细节上都兼容。您需要提供准确的供应商/型号信息或获取/提供该规范的文档。
  • @kunif 不幸的是我没有这样的信息,这是一个廉价的塑料盒,带有一个 android 平板电脑、一个串行热敏打印机和一个行显示器......猜测是为了。 :)

标签: c qr-code thermal-printer escpos


【解决方案1】:

结果证明我的 ESC/POS 代码没有问题。在跟踪并找到软件打印的点后,我运行了自己的测试并将其发送到串行端口,生成一个二维码。
这是我用来参考的:

uint8_t myEscTst[] = { 0x1B, 0x40, 0x1B, 0x21, 0x00, 'H', 'e', 'l', 'l', 'o', ',', ' ', 't', 'h', 'e', 'r', 'm', 'a', 'l', ' ', 'w', 'o', 'r', 'l', 'd', '!', 0x1B, 0x64, 0x03 };
write(serialFD, myEscTst, sizeof(myEscTst));

uint8_t qrEsc165[] = { 0x1D, 0x28, 0x6B, 0x04, 0x00, 0x31, 0x41, 0x32, 0x00 }; 
write(serialFD, qrEsc165, sizeof(qrEsc165));

uint8_t qrEsc167[] = { 0x1D, 0x28, 0x6B, 0x03, 0x00, 0x31, 0x43, 0x08 }; 
write(serialFD, qrEsc167, sizeof(qrEsc167));

uint8_t qrEsc169[] = { 0x1D, 0x28, 0x6B, 0x03, 0x00, 0x31, 0x45, 0x31 }; 
write(serialFD, qrEsc169, sizeof(qrEsc169));

uint8_t qrEsc180[] = { 0x1D, 0x28, 0x6B, 0x0E, 0x00, 0x31, 0x50, 0x30, 'i', ' ', 'a', 'm', ' ', 'a', ' ', 't', 'e', 's', 't' }; 
write(serialFD, qrEsc180, sizeof(qrEsc180));

uint8_t qrEsc181[] = { 0x1D, 0x28, 0x6B, 0x03, 0x00, 0x31, 0x51, 0x30 }; 
write(serialFD, qrEsc181, sizeof(qrEsc181));

uint8_t qrEsc182[] = { 0x1D, 0x28, 0x6B, 0x03, 0x00, 0x31, 0x52, 0x30 }; 
write(serialFD, qrEsc182, sizeof(qrEsc182));

uint8_t qrEscLn3[] = { 0x1B, 0x64, 0x03 }; 
write(serialFD, qrEscLn3, sizeof(qrEscLn3));

【讨论】:

    猜你喜欢
    • 2014-06-27
    • 1970-01-01
    • 2019-08-27
    • 2014-12-13
    • 1970-01-01
    • 1970-01-01
    • 2012-10-05
    • 2016-05-05
    相关资源
    最近更新 更多