3

我正在尝试找到使用 ZPL 打印上标的解决方案。

例如,如果我有这个 ZPL 字符串:

string ZPLString =
    "^XA" +
    "^FO50,50" +
    "^A0N50,50" +
    "^FDHello, World!^FS" +
    "^XZ";

sendToZebraPrinter(ZPLString);

由于没有任何上标字符,我可以毫无问题地将其发送到我的打印机。但是如果我想使用这个字符串:

string ZPLString =
    "^XA" +
    "^FO50,50" +
    "^A0N50,50" +
    "^FDe = mc²^FS" +
    "^XZ";

sendToZebraPrinter(ZPLString);

上标不会本机打印。我想我需要访问一个国际字符集或其他东西,但我不知道该怎么做,特别是如果我只需要一个字符。我是否需要更改我的整个字符集,或者对其进行某种“替换”?

请注意,我们手动生成 ZPL 代码并直接在打印机上拍摄(不幸的是,这是我们的系统),绕过任何驱动程序或任何类型的 3rd 方开发组件。

4

2 回答 2

2

马克的回答正是我需要解决我的问题。以下是进一步阐明解决方案的附加信息:

  1. 要在数据中使用十六进制代码,您需要在 ^FD 命令前加上 ^FH_(其中 ^FH 告诉打印机 ^FD 中的数据将包含十六进制值,_ 定义十六进制代码标识符,以便它知道哪些数据是或未定义为十六进制代码而不是标准文本)

  2. 正如你提到的那样,我立即让这个工作。然后针对我发现(但不确定为什么)我不需要实际发送 ^CI13 来指定代码页 850 的其他打印机进行测试。即使我没有发送 ^CI13,² 也会出现在所有打印机上

  3. 在我的 .NET 应用程序中,由于某种原因,² 没有映射到 ZPL 代码页预期的正确十六进制代码(.NET 应用程序将² 转换为十六进制代码 b2 而不是 fd,但对于大多数标准字符转换为相同代码作为 ZPL 映射),所以在我的应用程序中,我创建了一个转换表,其中我在表中定义的任何字符都映射到 ZPL 十六进制代码,而我未定义的任何字符都允许保留为由应用程序转换)。

我从来没有使用过非默认代码页中的信息,并且我没有意识到在使用 ^FH 时可以将标准文本与十六进制混合(我认为如果您使用 ^FH ^FD 中的“所有”信息必须是十六进制)。所以马克提供的信息让我走上了正确的道路。

使用 Mark 提供的信息解决问题的最后一个示例是:

string ZPLString =
    "^XA" +
    "^FO50,50" +
    "^A0N50,50" +
    "^FH_" +
    "^FDe = mc_fd^FS" +
    "^XZ";

sendToZebraPrinter(ZPLString);
于 2014-05-15T12:16:28.363 回答
1

尝试使用^CI13选择代码页 850,然后_fd在您的字符串中使用上标2. 下划线用于指定一个十六进制字符。

于 2014-05-12T20:51:44.020 回答