кириллица в термальном принтере

212
12 сентября 2018, 20:20

взял код отсюда http://www.mets-blog.com/java-pos-thermal-printer-example/ там смущает вот эта строка bytes = text.getBytes("CP437");
в других кодировках крякозябры в общем как заставить печатать кириллицу?

Answer 1

Наверное все носители тайного знания как заставить печатать туповатый принтер кириллицу просто тупо вымерли и я остался один. А ведь были золотые времена в святые 90-е это была вообще золотая тема :)

В принтере в евонной памяти содержится некая таблица, в которую загружены шрифты и где напротив байта - стоит его буквенное изображение. Когда принтеру приходит команда печатать байт, он берет байт с ним идет в таблицу извлекает оттуда символ и посылает сигнал своим головкам изобразить символ. Соответственно, задача прогера состоит в том, чтобы шрифты загруженные в память принтера получали правильные байты (кодировка) или же если нет шрифтов загрузить таковые в принтер. Обычно это задача драйвера - драйвер берет на себя эту непосильную задачу.

Соответственно, задача распадается в нашем случае на 2 части:

  1. Загрузка шрифтов - зависит от модели принтера, обычно в мануале подробно описывается сей процесс (или решается тупо установкой драйвера). В тупых моделях принтеров бывает загружен только 1 шрифт с кодировкой CP-437 (US)
  2. Перекодировка байтов (если требуется - зависит от кодировки шрифта)

В общем давайте модель принтера - оттуда и будем плясать.

Update

В мануале расписаны ESC коды управления принтером. По идее, это все должен делать драйвер, но можно и самому.

Вам надо сначала перед печатью выставить кодовую страницу, что достигается следующей ESC последовательностью:

ESC t n

По простому надо в порт принтера записать три байта:

0x1B 0x74 0x11  //байты приведены в HEX 

После чего надо посылать ваш текст, но уже в кодировке KOI-8

Рекомендуется перед этим проинициализировать принтер посылкой команды

ESC @
Answer 2

Кодировка CP437 не содержит кирилицы. Если у вас символы кирилицы закодированны например в русскую кодировку CP1251 или КОИ-8, то на выходе у вас получится набор байт, который нельзя показать ввиду сказанного выше. Поэтому вам скорее всего надо декодировать в другую кодировку, содержащую кирилицу. Но возможен вариант трансфера где декодированные байты можно обратно закодировать с помощью того же CP437 и в результате у вас получится строка в прежней кодировке.

READ ALSO
Java чтение и запись none-blocked

Java чтение и запись none-blocked

Мне нужен способ чтение и записи в файл с использованием указателяТо есть что бы я мог поставить указатель на нужную мне позицию в файле и считать...

218
Java spring boot custom property type

Java spring boot custom property type

Я использую Java + Spring Boot, возникла необходимость добавить в файл applicationproperties поле - экземпляр какого-то своего типа (не String, не Integer, не

164
Android Studio post запрос url + port

Android Studio post запрос url + port

Это отлично работает с прямым url без порта на php, если я указываю ссылку без порта 3000

172