我试图找到一个使用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代码并直接在打印机上拍摄(不幸的是这是我们的系统),绕过任何驱动程序或任何类型的第三方开发组件。
答案 0 :(得分:1)
马克的回答完全解释了我解决问题所需要的东西。以下是进一步澄清解决方案的其他信息:
要在数据中使用十六进制代码,您需要在^ FD命令前加上^ FH_(其中^ FH告诉打印机^ FD中的数据将包含十六进制值,_定义十六进制代码标识符,所以它知道哪些数据被定义为十六进制代码而不是标准文本
我完全像你提到的那样立即开始工作。然后测试我发现的其他打印机(但不知道为什么),我不需要实际发送^ CI13来指定代码页850.即使我没有发送^ CI13,²也出现在所有打印机上
在我的.NET应用程序中,由于某种原因,²没有映射到ZPL代码页预期的正确十六进制代码(.NET应用程序转换为²代码为b2而不是fd,但对于大多数标准字符转换为与ZPL映射相同的代码)所以在我的应用程序中我创建了一个转换表,其中我在表中定义的任何字符都映射到ZPL十六进制代码和我没有定义的任何字符我允许保持转换通过申请)。
我从未使用非默认代码页中的信息,我没有意识到使用^ FH时你可以将标准文本与十六进制混合(我想如果你使用^ FH那么“全部”信息在^中FD必须是十六进制)。所以Mark提供的信息让我走上了正确的道路。
使用Mark提供的信息解决问题的最后一个例子是:
string ZPLString =
"^XA" +
"^FO50,50" +
"^A0N50,50" +
"^FH_" +
"^FDe = mc_fd^FS" +
"^XZ";
sendToZebraPrinter(ZPLString);
答案 1 :(得分:0)
尝试使用^CI13
选择代码页850,然后在字符串中使用_fd
作为上标2
。下划线用于指定十六进制字符。