【问题标题】:ZPL passing parameters to the labels prints with misplaced dataZPL 将参数传递给带有错位数据的标签打印
【发布时间】:2014-08-25 23:25:47
【问题描述】:

我们正在使用 Zebra Designer Pro 创建模板。我们在模板上放置了各种标签,我们在运行时通过代码动态地将值传递给这些模板。

我们通过在代码中创建 ZPL 并附加我们想要在 ZPL 中打印的各种参数值来做到这一点。创建标签的方法如下:

        private string GetPrinterInstruction(string templateName, IList<string> variables, int numberOfCopies)
        {
            StringBuilder printerInstruction = new StringBuilder();

            //start the label format and sets the field origin
            printerInstruction.AppendLine("^XA");

            //Template
            printerInstruction.AppendLine("^XF");
            printerInstruction.AppendLine(templateName);
            //Field Separator
            printerInstruction.AppendLine("^FS");


            // for each Variable
            for (var i = 1; i <= variables.Count; i++)
            {
                //Assign field number FN1..FN2
                printerInstruction.AppendLine("^FN");
                printerInstruction.AppendLine(i.ToString());

                //Indicate start of field data
                printerInstruction.AppendLine("^FD");

                //Field data
                printerInstruction.AppendLine(variables[i - 1]);

                //Field Separator
                printerInstruction.AppendLine("^FS");
            }

            //Printing Quantities of Labels,
            printerInstruction.AppendLine("^PQ" + numberOfCopies);

            //indicates the end of the print field and the end of the label format.
            printerInstruction.AppendLine("^XZ");
            return printerInstruction.ToString();
        }

void PrintLabel(CasthouseDataContext casthouseDataContext, Printer printer, LabelType.LabelTypeCodes labelTypeCode, IList<string> variables, int numberOfCopies)
        {
            try
            {

                string printerInstruction = GetPrinterInstruction(templateName, variables, numberOfCopies);

                CodePrinter.SendStringToPrinter(printerName, labelTemplateName, printerInstruction);

            }
            catch (Exception ex)
            {
                ExceptionManager.HandleException(ex, ExceptionPolicies.Service);
            }
        }

请在下面找到正在生成的 ZPL 文件,用于将参数传递给打印机上的模板:

^XA
^XF
E:Label.ZPL
^FS
^FN
1
^FD

^FS
^FN
2
^FD

^FS
^FN
3
^FD

^FS
^FN
4
^FD
EEEEEEEEEEE
^FS
^FN
5
^FD
BBBBBBBBBB
^FS
^FN
6
^FD
11111111
^FS
^FN
7
^FD
16/08/2014
^FS
^FN
8
^FD
2411
^FS
^FN
9
^FD
11
^FS
^FN
10
^FD
2422
^FS
^FN
11
^FD
644444
^FS
^FN
12
^FD
6
^FS
^FN
13
^FD
1
^FS
^FN
14
^FD

^FS
^FN
15
^FD

^FS
^FN
16
^FD
6
^FS
^FN
17
^FD

^FS
^FN
18
^FD
ACCCCC
^FS
^FN
19
^FD

^FS
^FN
20
^FD
ABCCCC
^FS
^FN
21
^FD

^FS
^FN
22
^FD
66666666
^FS
^FN
23
^FD
666666
^FS
^FN
24
^FD
NNNNNNNNN
^FS
^FN
25
^FD

^FS
^FN
26
^FD
ABCCC
^FS
^FN
2222222
^FD
1111111111
^FS
^FN
28
^FD
111111
^FS
^FN
29
^FD
111111111
^FS
^FN
30
^FD
1111111111
^FS
^PQ1
^XZ

但是打印在标签上的数据是一致的,并且由于我们没有在正确的占位符中获取数据而被放错了位置。请帮助我们如何解决此问题。

【问题讨论】:

  • 提供示例 ZPL 输出和示例标签图像以查看究竟发生了什么。
  • 能否请您发布正在构建的 ZPL。此外,当您在 Zebra Designer pro 中生成模板时,您使用哪种标签作为占位符来获取值。
  • 我们正在使用输入字段来创建占位符并传递放置在这些输入字段中的参数

标签: c# zpl


【解决方案1】:

不要使用输入字段。替换代码中的输入字段如下:

  1. 打开需要添加新字段(要显示的参数)的标签。
  2. 在工具箱上,选择文本 > 固定文本。
  3. 输入参数名称。请注意,字符串应该可以搜索并替换为数据库中的参数值。点击完成

使用打印对话框中的打印到文件选项为文件生成 ZPL。将生成的 ZPL 文件将包含文本向导对话框中提到的参数名称。

在代码中使用此 ZPL 文件。现在,不要使用 ZPL 文件传递​​参数值,而是使用已生成的 ZPL 文件并将值替换为参数名称,如下所示:

//pass the zpl generated from Zebra Designer Pro into this menthod
public string replaceParameterValues(string zplForLabel)
{
    StringBuilder zpl = new StringBuilder();
    zpl.Apppend(zplForLabel);
    //do this for all the paramters
    zpl = zpl.Replace("<ParemeterName>", valueForTheParamter);

    //pass this zpl to the printer for printing as it will contain 
    //all the values for the parameters 
    return zpl.ToString();
}

这将删除您创建 ZPL 以传递参数的依赖关系。

【讨论】:

  • 非常感谢尼朋。真的很难相信这个东西也会这样工作,我们可以完全摆脱自己生成 ZPL 文件的麻烦。这真的很酷。
  • 对于任何使用 Code39 的任性旅行者,ZPL 输出的小写 39 条码会附加一个 + 字符。 &lt;,&gt; 也被转换。我正在使用 . 和所有大写字母来使用此功能,例如:.SERIALBAR.ZPLString = ZPLString.Replace(".SERIALBAR.", Serial);
  • 如果我使用 Zebra 字体以外的任何字体,这种方法似乎不起作用,因为文本随后生成为图形字段。有没有办法处理这种情况?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-10
  • 1970-01-01
  • 1970-01-01
  • 2011-07-14
相关资源
最近更新 更多