Как работать с китайским POS принтером из Java в linux?

Здравствуйте.

Имеется принтер, подключается через USB. Необходимо организовать печать на нем из Java (текста и изображений).

Я вижу несколько возможных путей:
1) Устройство подключается как /dev/usb/lp0 и можно вызвать запись в файл "/dev/usb/lp0". Но при этом не удается печатать русские буквы (перебор кодировок не помог) и непонятно, как печатать изображения.
2) Печатать на него как на принтер. К сожалению, мне не удалось найти драйверов для него (вернее, они идут в комплекте, но когда я установил их по инструкции производителя, у меня рухнул CUPS).
3) Наткнулся на библиотеку JavaPOS. Но среди поддерживаемых устройств там нет моего принтера, возможно, он аналогичен какому-то другому, но непонятно, как определить, какому.

Собственно, по каждому возможному направлению развития возникают проблемы, мне хотелось бы узнать, по какому логичнее было бы двигаться и как их решить?

Заранее спасибо за ответы.

В качестве операционной системы используется Linux Mint 16. Принтер точно поддерживает русские буквы и печать изображений, под Windows есть драйверы и из Word спокойно все печатается.
  • Вопрос задан
  • 4240 просмотров
Решения вопроса 1
@klirichek
Это линейный принтер (lp). Он может просто печатать напрямую текст, который в него отправляют (т.е. просто открываете нужный порт и шлёте в него байтики).
С помощью escape-последовательностей можно переключать принтер в графический режим и управлять дополнительными фичами, специфическими для POS (например, открывать крышку кассы. Или автоматически печатать штрих-код).
Т.е. в простейшем случае - переводите принтер в нужную кодовую страницу с помощью esc-последовательности и потом просто шлёте в него текст в нужной кодировке.

Если воспользоваться драйвером, то все возможности принтера сводятся к графической печати (это растровый фильтр CUPS. И, кстати @ntkt не совсем прав насчёт поддержки PostScript. PPD файлы в cups это своя собственная сущность, так у них принято описывать вообще все принтеры.) Тогда у вас появляется "стандартный" принтер с форматом бумаги шириной 58 мм. Весь рендеринг в растр берёт на себя CUPS, а фильтр лишь парсит настройки печати и затем добавляет нужные escape-последоватльности для вывода растра.

К слову, фильтр, похоже, был написан индусами :)
Настройки в PPD не показывает, а сам вылетает. Да и к тому же предоставлен только в виде 32-битного бинаря. Я провозился с ним пару дней, пытаясь настроить. В итоге психанул и написал свой фильтр. Он работает.

https://github.com/klirichek/zj-58
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
ntkt
@ntkt
Потомственный рыцарь клавиатуры и паяльника
Вот содержимое readme: pastebin.com/HQgBsGgk
Вот содержимое скрипта установки: pastebin.com/Arzbs9XS
Ответ написан
Комментировать
ntkt
@ntkt
Потомственный рыцарь клавиатуры и паяльника
А что именно рухнуло? Там и драйверов-то, по сути, нет, только PPD-файл, т.е. принтер поддерживает PostScript, и свой самодельный фильтр для растровых изображений (rastertozj58).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы