Как печатать греческие символы из команд zpl
У меня есть принтер штрих-кода Intermec PC43t, и я не могу печатать греческие символы. Когда я отправляю греческие символы для печати, у меня есть точки, где символы должны быть. Когда я печатаю что-то на английском, я получаю правильный результат.
Я отправляю команды ZPL2 на принтер Intermec (через Zsim). Ниже приведены команды.
^ XA
^ by3
^ FT430,80
^ BCI, 80, Y, N, N
^ FD00001978 ^ 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
Кто-нибудь знает решение?
Спасибо
2 ответа
Вы можете попробовать использовать параметр 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
кодовую страницу и добавьте, используя шестнадцатеричную версию кодовой таблицы 1253 для каждого символа.
Примечание: несмотря на название,
windows-1253
не требует, чтобы операционная система Windows работала с принтером Zebra.
// ^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
Недостатком этого подхода является то, что программист должен:
- Динамически отображать каждый греческий символ в
cp1253
перед подготовкой сообщения ZPL или... - Используйте преобразователь кодировки символов для сопоставления символа 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();
}
}