我有一个InterMec PC43T条形码打印机,我无法打印希腊字符。当我发送希腊字符以打印时,我会有字符应在哪里。当我用英语打印一些东西时,我会有正确的结果。
我将ZPL2命令发送到InterMec打印机(通过ZSIM)。以下是命令。
^xa
^by3
^ft430,80
^bci,80,y,n,n
^fd0000001978^fs
^ft360,320^adi,25,14^fd123457^fs
^ft140,320^adi,25,14^fd1245^fs
^ft300,270^adi,40,20^fd8794465^fs
^ft300,215^adi,40,20^fd99999/99999^fs
^ft430,175^adi,25,15^fd40125-ελληνικά -希腊语^fs
^xz
有人知道解决方案吗?
谢谢
您可以尝试使用cix参数(更改国际字体/编码),其中x是编码的数量。
可能是斑马代码第1253页 - 现代希腊字符集?
ci34 =代码页1253
用法的示例:
^FB559,,,C,^FT30,106^A@N,23,31,TT0003M_^FH^CI17^F8^FD_text_^FS^CI0
此解决方案不是UNICODE,但是如果您的固件支持它(根据文档,x.14.x
及更高),您可以强制使用希腊windows-1253
CodePage并使用1253代码表的HEX版本附加对于每个字符。
注意:尽管有名称,但
windows-1253
不需要Windows操作系统使用斑马打印机运行。
// ^XA = Start of label
// ^XZ = End of label
// ^CF = Font size
// ^FO = X,Y position on label
// ^CI34 = Code Page 1253 - Zebra x.14.x fimware or higher only
// ^FH = Allow "_FF" style escaped hex characters
^XA
^CF0,60
^CI34^FO50,50^FH^FD - Theta: _C8 ^FS
^CI34^FO50,100^FH^FD - Lambda: _CB ^FS
^XZ
这种方法的缺点是程序员必须要么必须:
- 在准备ZPL消息之前,将每个希腊字符动态映射到
cp1253
等效,或... - 使用编码转换器的字符将UTF字符映射到发送之前的
cp1253
等效物。许多编程语言都具有实现此目的的内置方法。警告,因为这些可能是终端或输出流中的奇怪符号。
因此,如果打印机直接支持Unicode数据,那是理想的解决方案,但是如果不是,则cp1253
可能是可行的选项。
trsef的答案之后。这是对我有用的Java课。有人可能会发现它有用并节省一些时间:
public class GreekToHexZPL {
public String convertText(String newText) {
StringBuilder sBuilder = new StringBuilder();
for (int i = 0; i < newText.length(); i++) {
switch (newText.charAt(i)) {
case 'Α':
sBuilder.append("_C1");
break;
case 'Β':
sBuilder.append("_C2");
break;
case 'Γ':
sBuilder.append("_C3");
break;
case 'Δ':
sBuilder.append("_C4");
break;
case 'Ε':
sBuilder.append("_C5");
break;
case 'Ζ':
sBuilder.append("_C6");
break;
case 'Η':
sBuilder.append("_C7");
break;
case 'Θ':
sBuilder.append("_C8");
break;
case 'Ι':
sBuilder.append("_C9");
break;
case 'Κ':
sBuilder.append("_CA");
break;
case 'Λ':
sBuilder.append("_CB");
break;
case 'Μ':
sBuilder.append("_CC");
break;
case 'Ν':
sBuilder.append("_CD");
break;
case 'Ξ':
sBuilder.append("_CE");
break;
case 'Ο':
sBuilder.append("_CF");
break;
case 'Π':
sBuilder.append("_D0");
break;
case 'Ρ':
sBuilder.append("_D1");
break;
case 'Σ':
sBuilder.append("_D3");
break;
case 'Τ':
sBuilder.append("_D4");
break;
case 'Υ':
sBuilder.append("_D5");
break;
case 'Φ':
sBuilder.append("_D6");
break;
case 'Χ':
sBuilder.append("_D7");
break;
case 'Ψ':
sBuilder.append("_D8");
break;
case 'Ω':
sBuilder.append("_D9");
break;
case 'Ϊ':
sBuilder.append("_DA");
break;
case 'Ϋ':
sBuilder.append("_DB");
break;
case 'ά':
sBuilder.append("_DC");
break;
case 'έ':
sBuilder.append("_DD");
break;
case 'ή':
sBuilder.append("_DE");
break;
case 'ί':
sBuilder.append("_DF");
break;
case 'ΰ':
sBuilder.append("_E0");
break;
case 'α':
sBuilder.append("_E1");
break;
case 'β':
sBuilder.append("_E2");
break;
case 'γ':
sBuilder.append("_E3");
break;
case 'δ':
sBuilder.append("_E4");
break;
case 'ε':
sBuilder.append("_E5");
break;
case 'ζ':
sBuilder.append("_E6");
break;
case 'η':
sBuilder.append("_E7");
break;
case 'θ':
sBuilder.append("_E8");
break;
case 'ι':
sBuilder.append("_E9");
break;
case 'κ':
sBuilder.append("_EA");
break;
case 'λ':
sBuilder.append("_EB");
break;
case 'μ':
sBuilder.append("_EC");
break;
case 'ν':
sBuilder.append("_ED");
break;
case 'ξ':
sBuilder.append("_EE");
break;
case 'ο':
sBuilder.append("_EF");
break;
case 'π':
sBuilder.append("_F0");
break;
case 'ρ':
sBuilder.append("_F1");
break;
case 'ς':
sBuilder.append("_F2");
break;
case 'σ':
sBuilder.append("_F3");
break;
case 'τ':
sBuilder.append("_F4");
break;
case 'υ':
sBuilder.append("_F5");
break;
case 'φ':
sBuilder.append("_F6");
break;
case 'χ':
sBuilder.append("_F7");
break;
case 'ψ':
sBuilder.append("_F8");
break;
case 'ω':
sBuilder.append("_F9");
break;
case 'ϊ':
sBuilder.append("_FA");
break;
case 'ϋ':
sBuilder.append("_FB");
break;
case 'ό':
sBuilder.append("_FC");
break;
case 'ύ':
sBuilder.append("_FD");
break;
case 'ώ':
sBuilder.append("_FE");
break;
case 'Ά':
sBuilder.append("_Α2");
break;
case 'Έ':
sBuilder.append("_Β8");
break;
case 'Ή':
sBuilder.append("_Β9");
break;
case 'Ί':
sBuilder.append("_ΒA");
break;
case 'Ό':
sBuilder.append("_ΒC");
break;
case 'Ύ':
sBuilder.append("_ΒE");
break;
case 'Ώ':
sBuilder.append("_ΒF");
break;
case 'A':
sBuilder.append("_41");
break;
case 'a':
sBuilder.append("_61");
break;
case 'B':
sBuilder.append("_42");
break;
case 'b':
sBuilder.append("_62");
break;
case 'C':
sBuilder.append("_43");
break;
case 'c':
sBuilder.append("_63");
break;
case 'D':
sBuilder.append("_44");
break;
case 'd':
sBuilder.append("_64");
break;
case 'E':
sBuilder.append("_45");
break;
case 'e':
sBuilder.append("_65");
break;
case 'F':
sBuilder.append("_46");
break;
case 'f':
sBuilder.append("_66");
break;
case 'G':
sBuilder.append("_47");
break;
case 'g':
sBuilder.append("_67");
break;
case 'H':
sBuilder.append("_48");
break;
case 'h':
sBuilder.append("_68");
break;
case 'I':
sBuilder.append("_49");
break;
case 'i':
sBuilder.append("_69");
break;
case 'J':
sBuilder.append("_4A");
break;
case 'j':
sBuilder.append("_6A");
break;
case 'K':
sBuilder.append("_4B");
break;
case 'k':
sBuilder.append("_6B");
break;
case 'L':
sBuilder.append("_4C");
break;
case 'l':
sBuilder.append("_6C");
break;
case 'M':
sBuilder.append("_4D");
break;
case 'm':
sBuilder.append("_6D");
break;
case 'N':
sBuilder.append("_4E");
break;
case 'n':
sBuilder.append("_6E");
break;
case 'O':
sBuilder.append("_4F");
break;
case 'o':
sBuilder.append("_6F");
break;
case 'P':
sBuilder.append("_50");
break;
case 'p':
sBuilder.append("_70");
break;
case 'R':
sBuilder.append("_52");
break;
case 'r':
sBuilder.append("_72");
break;
case 'S':
sBuilder.append("_53");
break;
case 's':
sBuilder.append("_73");
break;
case 'T':
sBuilder.append("_54");
break;
case 't':
sBuilder.append("_74");
break;
case 'U':
sBuilder.append("_55");
break;
case 'u':
sBuilder.append("_75");
break;
case 'V':
sBuilder.append("_56");
break;
case 'v':
sBuilder.append("_76");
break;
case 'Y':
sBuilder.append("_59");
break;
case 'y':
sBuilder.append("_79");
break;
case 'Z':
sBuilder.append("_5A");
break;
case 'z':
sBuilder.append("_7A");
break;
case ' ':
sBuilder.append(" ");
break;
default:
sBuilder.append(newText.charAt(i));
break;
}
}
return sBuilder.toString();
}
}