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

时间:2013-08-29 13:48:08

标签: truncate zpl zpl-ii

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

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

这是我们的代码:

^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

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

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

1 个答案:

答案 0 :(得分:4)

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

首先,直接从2014年ZPL II编程指南(P1012728-009 Rev. A)中解释了一些解释。

^ TB 命令打印一个具有已定义宽度和高度的文本块。文本块具有自动自动换行功能。如果文本超出块高度,则文本为截短的“。

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

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

另请注意,虽然未提及, ^ FB 命令也会截断不符合指定行数的文本,而这里的字体大小为 A0 命令和 FB 命令的行间距现在在确定是显示还是截断第二行或第三行时起着重要作用。

顺便提一下,在TSPL等其他语言中没有文本块的截断 - 如果你告诉块高度为3行,但是4行有足够的文本,第4行与第3行重叠表示 - 可能看起来很糟糕,但它比截断的数据丢失更好,这并不明显。

对于这两个命令:

  • “为您的数据使用 ^ FT (字段排版)获取基线来源 最后一行文本,意味着字段将是 从下到上填充。“
  • “使用 ^ FO (字段来源)表示字段块将从上到下填充。”

实际上,我只能按照预期使 ^ FB 命令工作,但这可能是因为 ^ TB 未在固件I中实现与之合作(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

特别是,我已经使用 FB A0 FD 命令之前。使用查看器,您可以快速测试在成分行中更改 FT FO 的效果,更改 A0 字体大小的效果以及将 FB 行数从3改为2的效果(查看器不会截断文本btw)。

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

我希望有所帮助!