代码之家  ›  专栏  ›  技术社区  ›  Conrad Eggan

斑马存储格式-XML中带有[TAB]字符的QR

  •  1
  • Conrad Eggan  · 技术社区  · 10 年前

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

    硬编码很好,我得到了一个用“FOO[TAB]BAR”编码的QR:

    ^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”。

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

    我在这件事上已经追赶了一天,没有任何进展,所以我想知道这里是否有人比我更有经验,可以对这个问题有所了解。

    我的两个问题是:

    1. 为什么QR码掉了前三个字符?
    2. 如何使用可变数据在二维码中嵌入[TAB]字符 从XML?
    1 回复  |  直到 10 年前
        1
  •  2
  •   Conrad Eggan    10 年前

    为了其他试图解决同一问题的人的利益,这里是我得出的解决方案。不幸的是,斑马的支持无济于事,因为他们所能做的就是不断地向我发送我已经拥有的手册中的页面。他们无法给我一个有效的例子。

    解决方案涉及两件事:

    1. 选择Zebra所称的“8位字节模式”。设置模式,并在数据字段中设置指示要打印的字符数的参数。手册规定,它被设置为Bxxxx,其中“xxxx=数据字符数由两个字节的BCD代码表示”。实际上,有效的是格式化为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个字符长度的物品和批号的组合,这一切都非常完美。如果我遇到任何困难或学到任何新东西,我会更新这篇文章。