Zebra 存储格式 - 来自 XML 的带有 [TAB] 字符的 QR

Zebra Stored Format - QR with [TAB] character from XML

我们正在实施 Oracle ERP,我的任务是重新设计我们的标签以适应新系统。我们的产品标签需要包含一个二维码,该二维码由 [TAB] 字符分隔的项目和批号编码。 Oracle 将向打印机发送包含可变数据的 XML 文件,以便与打印机上存储的格式一起使用。

硬编码工作正常,我得到一个用 'FOO[TAB]BAR':

编码的二维码
^XA
^FO50,50
^BQN,2,10^FH^FDQA,FOO_09BAR^FS
^PQ1,0,1,Y
^XZ

当我在打印机上创建存储格式时发生了奇怪的事情:

^XA
^DFE:QR_TEST.ZPL
^MCY
^FO50,50
^BQN,2,10^FN1^FH^FDQA,$$QR_CODE$$^FS
^FO50,350
^AON,30,30^FN1^FD$$QR_CODE$$^FS
^XZ

并发送以下 XML 文件:

<?xml version="1.0" standalone="no" ?>
<!DOCTYPE labels SYSTEM "label.dtd">
<labels _FORMAT="QR_TEST.ZPL" _QUANTITY="1" _PRINTERNAME="" _JOBNAME="TEST">
<label>
<variable name="$$QR_CODE$$">FOO_09BAR</variable>
</label>
</labels>

有趣的是,如果没有文本字段定义,标签不会打印。添加文本字段后,标签会打印,但生成的 QR 码会下降 'FOO' 并扫描为仅“_09BAR”,而文本字段会打印 'FOO_09BAR'.

更令人困惑的是,如果我将“_09”从 $$QR_CODE$$ 变量定义中删除,文本字段会按预期打印 'FOOBAR' 但 QR 码扫描为 'BAR',因此无论出于何种原因,QR 都会丢弃数据的前三个字符。

我已经在这个问题上追了一天,但没有任何进展,所以我想知道这里是否有比我更有经验的人可以阐明这个问题。

我的两个问题是:

  1. 为什么 QR 码丢掉了前三个字符?
  2. 如何使用可变数据在二维码中嵌入[TAB]字符 来自 XML?

为了其他任何试图解决相同问题的人的利益,这里是我得出的解决方案。不幸的是,Zebra 支持没有任何帮助,因为他们所能做的就是不断向我发送我已有的手册中的页面。他们无法向我发送工作示例。

解决方案涉及两件事:

  1. Select Zebra 称之为“8 位字节模式”。设置了模式,并且在数据字段中设置了指示要打印的字符数的参数。手册指出它被设置为 Bxxxx where "xxxx = number of data characters is represented by two bytes of BCD code"。实际上,有效的是格式化为 4 位数字的整数,即对于 26 个字符,使用 B0026。
  2. 要知道的第二件事是传递的变量必须包含介于“^FD”和“^FS”之间的所有数据,包括参数。

打印机上存储的格式如下所示:

^XA
^DFE:QR_TEST.ZPL
^MCY
^FO50,50
^BQN,2,10^FN1^FH^FD$$QR_CODE$$^FS
^XZ

将以下 XML 文件发送到打印机:

<?xml version="1.0" standalone="no" ?>
<!DOCTYPE labels SYSTEM "label.dtd">
<labels _FORMAT="QR_TEST.ZPL" _QUANTITY="1" _PRINTERNAME="" _JOBNAME="TEST">
<label>
<variable name="$$QR_CODE$$">QM,B0007FOO[TAB]BAR</variable>
</label>
</labels>

变量$$QR_CODE$$分解为:

  • Q = 纠错级别高
  • M = 手动字符模式
  • B = 8 位字节模式
  • 0007 = 后跟七个数据字符
  • FOO[TAB]BAR = 要在 QR 码中编码的字符。请注意 [TAB] 是一个 文字制表符,ASCII 字符 09

提供变量值的SQL必须提供以上所有内容,但这非常简单。到目前为止,这与我迄今为止测试过的长度从 10 到 25 个字符的项目和批号的组合完美无缺。如果我 运行 遇到任何困难或学到任何新东西,我会更新这个 post。