使用^ FB或^ TB的Zebra编程语言(ZPL)II截断特定长度的文本

Ker*_*rry 5 truncate zpl-ii zpl

我正在编写代码来打印植物园的标签.每个标签都单独打印,但每个标签上都有不同的信息.每个标签都包含一个科学名称,其大小可以变化很大,因此可以超过2行(我们的标签尺寸为10厘米宽,2.5厘米高).当我们超过24个字符时,我们的问题主要出现在名称上(参见**行).如果我们选择一个不超过24个字符的名称,那么打印就可以了.还有更多它不会打印.如果我们从标签上取下所有其他"项目"并只留下"name"元素,那么它只打印前24个字符并截断其余部分(我们这样做是为了测试我们的^ FB块和另一个元素之间是否可能重叠可能导致这个问题).我们尝试使用其他使用^ FB的元素,我们发现它们显示相同的行为,但发生此问题的长度不同:例如"cc"(国家/地区代码的缩写)限制为21个字符.

有关更多信息:我们在BASIC环境中编译此代码并使用变量,例如":name:",":Acc.dt":"如下所示.我们的数据库提供了这些信息,我们检查了任何内部例程我们的代码在ZPL中运行良好,但我们最近不得不转向ZPL II(我们购买了新型号GX430t)并且必须修改我们的ZPL代码,此时此问题开始发生.

这是我们的代码:

^XA
^LH40,40
^MMT
^PW1200
^LL1200
^FO16,05^A0N,35,^FDAcc. num.^FS
^FO170,05^A0,35,^FV":accnum:"^FS
^FO360,05^A0,35,^FV":qual:"^FS
^FO350,35^A0N,30,^FDAcc.dt.^FS
^FO450,35^A0N,30,^FB790,3,0,L,
^FH\^FV":accdt:"^FS
^FO430,70^^A0N,25,^FB790,3,0,L,
^FH\^FDProv. type^FS
^FO560,70^A0N,25,^FV":provtype:"^FS
^FO800,225^A0N,30,^FB790,3,0,L,
^FV":cc:"^FS
**^FO10,100^A0N,40,^FB790,3,0,L,
^FV":name:"^FS**
^FO1000,05^A0,35,^FV":proptype:"^FS
^FO5,225^A0,25^FVColl.^FS 
^FO55,225^A0,25^FV":coll:"^FS
^FO375,225^A0,25,^FV":consstat:"^FS
^FO1000,70^A0,25,^FV":reqby:"^FS
^FO535,180^BCN,55,N,N,N^FV":qual:"^FS
^FO60,45^BCN,35,N,N,N^FV":accnum:"^FS
^PQ1,0,1,Y
^XZ
Run Code Online (Sandbox Code Playgroud)

以下是我们试图解决的问题(如果有些看起来像外卡,请道歉):

  1. 更改标签上的字体类型,大小和位置;
  2. 将^ FO改为^ FT;
  3. 看看我们的内部数据库逻辑;
  4. 带走^ FH \;
  5. 更改^ FB行中的值(我们尝试了几乎所有可能的排列);
  6. 手动输入超过24个字符的名称(使用记事本 - 没有数据库/编译器) - 同样的问题.

对此有任何想法将非常感谢克里

hec*_*vas 5

我以前遇到过这个问题,涉及打印机制造商、固件和语言。

首先,一些直接来自 2014 ZPL II 编程指南 (P1012728-009 Rev. A) 的释义解释。

^TB命令打印具有定义宽度和高度的文本块。文本块具有自动换行功能。如果文本超过块高度,文本将被截断。”

^FB(字段块)命令允许您将文本打印为定义的块类型格式。它可以使用为文本字符串指定的原点、字体和旋转将^FD(字段数据)字符串格式化为文本块,它包含一个自动换行功能。”

从技术上讲,文本块和字段块之间的区别在于前者的高度以为单位,后者以行数为单位。

还要注意,虽然没有提到,^FB命令也会截断不适合指定行数的文本,这里是A0命令的字体大小和FB命令的行间距现在在确定中发挥重要作用的地方是显示还是截断第二行或第三行。

顺便说一句,在其他语言(如 TSPL)中,文本块没有截断——如果你告诉块高 3 行但有足够的 4 行文本,第 4 行与第 3 行重叠以表明这一点——这可能看起来很糟糕,但比截断的数据丢失要好一些,不明显。

对于这两个命令:

  • “对您的数据使用^FT(字段排版)采用最后一行文本的基线原点,这意味着字段块将从底部到顶部填充。”
  • “使用^FO(字段原点)意味着字段块将从上到下填充。”

实际上,我只能使^FB命令按预期工作,但这可能是因为^TB未在我使用过的固件(ZPL II“兼容”蓝牙打印机)中实现。

您可以在Labelary Viewer 中为 2x2 标签测试以下代码段:

^XA
    ~TA0
    ^MTD
    ^MNW
    ^MMT
    ^MFN
    ~SD15
    ^PR6
    ^PON
    ^PMN
    ^PW406
    ^LS0
    ^LRN
    ^LL406
    ^LT0
    ^LH0,0
    ^CI0
^XZ
^XA
    ^FO324,10,0^FB386,2,0,C,0^A0R,36,28.8^FH^FD"The King" Cupcake^FS
    ^FO278,10,0^FB386,1,0,C,0^A0R,28,22.4^FH^FDUse By 11/24/2015 02:45 PM^FS
    ^FO152,10,0^FB386,1,0,C,0^A0R,24,19.2^FH^FD11/24/2015 02:45 PM^FS
    ^FO62,140,0^FB250,1,0,R,0^A0R,24,19.2^FH^FDSL: 4 hours^FS
    ^FO38,10,0^FB386,1,0,L,0^A0R,18,14.4^FH^FDPREP DATE:^FS
    ^FO8,10,0^FB386,1,0,L,0^A0R,28,22.4^FH^FD11/24/2015 10:45 AM^FS
    ^FO62,10,0^FB50,1,0,L,0^A0R,24,19.2^FH^FDEMP:^FS
    ^FO92,10,0^FB376,3,0,J,0^A0R,18,14.4^FH^FDIngredients: 1 1/2 cups all-purpose flour, 1 teaspoon baking powder, 1/2 teaspoon salt, 8 tablespoons (1 stick) unsalted butter, room temperature, 1 cup sugar, 3 large eggs, 1 1/2 teaspoons pure vanilla extract, 3/4 cup milk.^FS
    ^PQ3,,,Y
^XZ
Run Code Online (Sandbox Code Playgroud)

特别是,我在A0FD命令之前使用了FB。使用查看器,可以快速测试配料行从FTFO更改的效果,更改A0字体大小的效果以及将FB行数从3更改为2的效果(查看器不截断文字顺便说一句)。

当然,实际打印标签没有匹配项,因为您的 ZPL II “兼容”打印机可能会或可能不会根据其制造商和固件版本截断文本。

我希望这有帮助!