6

我正在编写代码来打印植物园的标签。每个标签都是单独打印的,但每个标签上的信息不同。每个标签都包含一个科学名称,其大小差异很大,因此可以超过 2 行(我们的标签尺寸为 10 厘米宽 x 2.5 厘米高)。当我们超过 24 个字符时,我们的问题主要出现在名称上(参见带 ** 的行)。如果我们选择一个不超过 24 个字符的名称,那么它会打印得很好。任何更多它都不会打印。如果我们从标签中删除所有其他“项目”并只留下“名称”元素,那么它只打印前 24 个字符并截断其余字符(我们这样做是为了测试 ^FB 块和另一个元素之间是否可能重叠可能导致此问题)。

补充信息:我们在 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

这是我们试图解决的问题(如果有些看起来像通配符,我们深表歉意):

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

对此的任何想法将不胜感激克里

4

1 回答 1

5

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

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

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

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

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

另请注意,尽管没有提及,^FB命令也会截断不适合指定行数的文本,这里是A0命令的字体大小和FB命令的行间距现在在确定是否显示或截断第二行或第三行。

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

对于这两个命令:

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

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

您可以在标签查看器中为 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

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

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

我希望这会有所帮助!

于 2016-07-19T17:18:44.237 回答