драйвера для промышленных принтеров этикеток и чеков ((проект открытых драйверов))

Полезные советы и программы от пользователей нашего форума.

Модератор: Модераторы разделов

Аватара пользователя
Denjs
Сообщения: 1685
ОС: SuSe 10.2

Re: драйвера для промышленных принтеров этикеток и чеков

Сообщение Denjs »

Ruslan Popov писал(а):
19.01.2011 23:12
P.S. После печати принтер начал мигать красным глазом и продолжал так делать пока я не открыл/закрыл крышку. Это нехорошо. Видимо, что-то не то ему послали. Надо разобраться.
P.P.S. Ну и чек отрывать очень неудобно.

это принтер этикток/наклеек. для печати на ленте, которую вы купили он не предназначен (хотя, да, может. + для отрыва чека нужен нож, который докупается отдельно).

по идее он ждет разрыва наклейки, или черной метки. не найдя этого, он видимо и моргал ошибку красным.
в спецификациях команд ZPLII еcть настройка длины ленты для печати на непрерывной ленте. но как это настраивать в CUPS-драйверах - не знаю. в размерах бумаги там ничего нет?
QDroid - Среда исполнения и фреймворк для QtScript.
OTPD - Открытые драйвера промышленных принтеров чеков и этикеток (кроссплатформенная подсистема печати).
Спасибо сказали:
BIgAndy
Сообщения: 1923

Re: драйвера для промышленных принтеров этикеток и чеков

Сообщение BIgAndy »

Denjs писал(а):
19.01.2011 23:59
это принтер этикток/наклеек. для печати на ленте, которую вы купили он не предназначен (хотя, да, может. + для отрыва чека нужен нож, который докупается отдельно).

У него есть режим печати continious, который можновыставить или в "драйвере" CUPS или в параметрах печати. И прекрасно печатает ленту.
Кроме того режим распознвания меток можно отключить на самом принтере.

но как это настраивать в CUPS-драйверах - не знаю. в размерах бумаги там ничего нет?

Есть. И предопределенные значения и custom.

Ruslan Popov писал(а):
19.01.2011 23:37
У меня CUPS 1.4.3 и в нём нет ни слова о Zebra, к сожалению.

Вложения
out.png
Спасибо сказали:
Аватара пользователя
Ruslan Popov
Сообщения: 106
ОС: Ubuntu 10
Контактная информация:

Re: драйвера для промышленных принтеров этикеток и чеков

Сообщение Ruslan Popov »

А у вас какой Linux. Думаю, в Ubuntu повырезали "проприетарное", поэтому у меня и нет такого пункта в списке.
Придётся перейти на прямое управление железкой.
Ubuntu Linux powered by Python/Django.
Мои проекты на GitHub.
Спасибо сказали:
BIgAndy
Сообщения: 1923

Re: драйвера для промышленных принтеров этикеток и чеков

Сообщение BIgAndy »

Ruslan Popov писал(а):
20.01.2011 09:36
А у вас какой Linux.
Придётся перейти на прямое управление железкой.

У меня федорообразные, в основном. Бубунтануты дистрибутивы как промышленную систему не рассматриваем вообще.

Думаю, в Ubuntu повырезали "проприетарное", поэтому у меня и нет такого пункта в списке.

А кто мешает установить с офсайта? Возможно у вас backen'ды какие-то не установлены.

Код: Выделить всё

$ rpm -qa | grep cups
cups-1.4.4-11.fc14.i686
gutenprint-cups-5.2.6-1.fc14.i686
cups-libs-1.4.4-11.fc14.i686
cups-lpd-1.4.4-11.fc14.i686
ghostscript-cups-8.71-16.fc14.i686

Зы. В cups 1.4.3 тоже работал
Спасибо сказали:
Аватара пользователя
Ruslan Popov
Сообщения: 106
ОС: Ubuntu 10
Контактная информация:

Re: драйвера для промышленных принтеров этикеток и чеков

Сообщение Ruslan Popov »

Denjs писал(а):
19.01.2011 16:55
На днях попробую залить на qdroid.berlios.de текущие исходники - почитав их уверен, вы сэкономите время связанное с инициализацией принтера и проверкой его состояний.

Решил работать с usblp0.
Ага, первые страницы документации по ZPL II объясняют что да как. В общем, очень похоже на старые добрые Esc последовательности.
Ubuntu Linux powered by Python/Django.
Мои проекты на GitHub.
Спасибо сказали:
Аватара пользователя
Denjs
Сообщения: 1685
ОС: SuSe 10.2

Re: драйвера для промышленных принтеров этикеток и чеков

Сообщение Denjs »

Ruslan Popov писал(а):
20.01.2011 10:49
Ага, первые страницы документации по ZPL II объясняют что да как. В общем, очень похоже на старые добрые Esc последовательности.

Ну не совсем старые добрые))) в ZPLII идеология другая. вы не можете просто так "кинуть на принтер текст". вы должны начать этикетку (формат кажется в терминах документации) объявить размещение элемента, а текст передать отдельной командой.

при прямой работе с принтером 420d похоже есть незначительная трудность с русификацией. В том устройтве что было у меня, я обнаружил, что только нулевой шрифт может печатать русские буквы. ("^CF0,20,20" скажем) Кодировка - UTF8 (после команды "^CI28") И то - только как простая метка ("^FDтекст^FS") (а вот если ранее была дана команда "^FB" - текстовое поле с автопереносом - то русский текст почему-то не печатается).

По идее - туда можно загружать .ttf шрифты. по идее те-же Liberation шрифты свободные, и весят относительно не много (менее 100 кб (DejaVu вот шрифты более тяжеловесные)). Полагаю их можно использовать.
Собственно, вам возможно будет необходимо решать проблему с русификацией и загрузкой шрифтов.

Ещё обратите внимание что команды с тильды "~" исполняются сразу. А с апострофа -"^" буферизируются.
И пока вы не закончили формат (не отдали на принтер "^XZ") лучше не запрашивать у него статусы - у меня он почему-то _иногда_ сбрасывал все и после этого печатал пустую этикетку)

В приложении - класс модуля принтера для gk420d созданный на рождественских каникулах - "t_labelprinter_zebra_gk420d". там основные операции и подборка команд с описаниями - возможно будет полезно.

UPD: сейчас пришла мысль : а не оформить ли в последствии классы OTPD ещё и как модули расширения для Питона? но это не в скором будущем )))) у кого есть примеры?
Вложения
qdroid_otpd.t_labelprinter_zebra_gk420d.class.2011.01.20.zip
(42.85 КБ) 95 скачиваний
QDroid - Среда исполнения и фреймворк для QtScript.
OTPD - Открытые драйвера промышленных принтеров чеков и этикеток (кроссплатформенная подсистема печати).
Спасибо сказали:
Аватара пользователя
Ruslan Popov
Сообщения: 106
ОС: Ubuntu 10
Контактная информация:

Re: драйвера для промышленных принтеров этикеток и чеков

Сообщение Ruslan Popov »

Можете привести тестовую строчку для выводу русского текста?
Код посмотрю. Опыта написания расширений для Python пока не было.
Ubuntu Linux powered by Python/Django.
Мои проекты на GitHub.
Спасибо сказали:
Аватара пользователя
Denjs
Сообщения: 1685
ОС: SuSe 10.2

Re: драйвера для промышленных принтеров этикеток и чеков

Сообщение Denjs »

из исходников - в конце .cpp модуля принтера

Код: Выделить всё

/*
2011.01.13: Немного о косяках-1 .

внутри команды ^FB440,10,0,L,
русский юникодный текст не работает.

НЕ РАБОЧИЙ КОД:

^XA^LH190,0^FO0,0^FB440,10,0,L,
^CI28,
^CF0,20,20
^FO20,20
^FD(018)[привет]^FS
^XZ

выдаст: "(018)[     ]"

РАБОЧИЙ КОД:

^XA^LH190,0^FO0,0
^CI28,
^CF0,20,20
^FO20,20
^FD(018)[привет]^FS
^XZ

выдаст: "(018)[привет]"
*/

Это все естественно в UTF-8.
QDroid - Среда исполнения и фреймворк для QtScript.
OTPD - Открытые драйвера промышленных принтеров чеков и этикеток (кроссплатформенная подсистема печати).
Спасибо сказали:
Аватара пользователя
Ruslan Popov
Сообщения: 106
ОС: Ubuntu 10
Контактная информация:

Re: драйвера для промышленных принтеров этикеток и чеков

Сообщение Ruslan Popov »

Denjs писал(а):
20.01.2011 13:51
из исходников - в конце .cpp модуля принтера

Код: Выделить всё

РАБОЧИЙ КОД:

^XA^LH190,0^FO0,0
^CI28,
^CF0,20,20
^FO20,20
^FD(018)[привет]^FS
^XZ
/*
выдаст: "(018)[привет]"
*/

Это все естественно в UTF-8.

Попробовал это. Принтер промотал 13 см ленты и напечатал мелким шрифтом русский текст, потом промотал ещё 26 см и остановился, моргая красным индикатором. Пришло время читать доку! ;)
Ubuntu Linux powered by Python/Django.
Мои проекты на GitHub.
Спасибо сказали:
Аватара пользователя
Denjs
Сообщения: 1685
ОС: SuSe 10.2

Re: драйвера для промышленных принтеров этикеток и чеков

Сообщение Denjs »

Ruslan Popov писал(а):
21.01.2011 22:23
промотал ещё 26 см и остановился, моргая красным индикатором.

Попробуйте добавить команду "^LLдлинаЧека"
^LL
Label Length
Description The ^LL command defines the length of the label. This command is necessary
when using continuous media (media not divided into separate labels by gaps, spaces, notches,
slots, or holes).
To affect the current label and be compatible with existing printers, ^LL must come before the
first ^FS (Field Separator) command. Once you have issued ^LL, the setting is retained until
you turn off the printer or send a new ^LL command.
Format ^LLy

скажем "^LL150" после этого он должен будет проматывать 150 точек на каждый чек.

Код: Выделить всё

^XA^LH190,0^FO0,0
^LL150
^CI28,
^CF0,20,20
^FO20,20
^FD(018)[привет]^FS
^XZ

Но советую купить ленту с наклейками, а не чековую))) вот такую например http://www.komus.ru/photo/full/45022_1.jpg
QDroid - Среда исполнения и фреймворк для QtScript.
OTPD - Открытые драйвера промышленных принтеров чеков и этикеток (кроссплатформенная подсистема печати).
Спасибо сказали:
Аватара пользователя
Ruslan Popov
Сообщения: 106
ОС: Ubuntu 10
Контактная информация:

Re: драйвера для промышленных принтеров этикеток и чеков

Сообщение Ruslan Popov »

Denjs писал(а):
22.01.2011 00:19
Ruslan Popov писал(а):
21.01.2011 22:23
промотал ещё 26 см и остановился, моргая красным индикатором.

Попробуйте добавить команду "^LLдлинаЧека"
^LL
Label Length
Description The ^LL command defines the length of the label. This command is necessary
when using continuous media (media not divided into separate labels by gaps, spaces, notches,
slots, or holes).
To affect the current label and be compatible with existing printers, ^LL must come before the
first ^FS (Field Separator) command. Once you have issued ^LL, the setting is retained until
you turn off the printer or send a new ^LL command.
Format ^LLy

скажем "^LL150" после этого он должен будет проматывать 150 точек на каждый чек.

Код: Выделить всё

^XA^LH190,0^FO0,0
^LL150
^CI28,
^CF0,20,20
^FO20,20
^FD(018)[привет]^FS
^XZ

Но советую купить ленту с наклейками, а не чековую))) вот такую например http://www.komus.ru/photo/full/45022_1.jpg

Мне как раз нужна чековая.
Ubuntu Linux powered by Python/Django.
Мои проекты на GitHub.
Спасибо сказали:
Аватара пользователя
Denjs
Сообщения: 1685
ОС: SuSe 10.2

Re: драйвера для промышленных принтеров этикеток и чеков

Сообщение Denjs »

Ruslan Popov писал(а):
22.01.2011 00:33
Мне как раз нужна чековая.
тогда просто вопрос - а нафига покупали принтер этикеток? купили бы принтер чеков который esc|pos поддерживает и вообще проблем не было бы)

^LL- отрабатывает?
QDroid - Среда исполнения и фреймворк для QtScript.
OTPD - Открытые драйвера промышленных принтеров чеков и этикеток (кроссплатформенная подсистема печати).
Спасибо сказали:
BIgAndy
Сообщения: 1923

Re: драйвера для промышленных принтеров этикеток и чеков

Сообщение BIgAndy »

Ruslan Popov писал(а):
22.01.2011 00:33
Мне как раз нужна чековая.

Может, надо было брать чековые принтеры? они в два раза дешевле
У нас используются star tsp 100. Прекрасно определяются капсом.
Спасибо сказали:
Аватара пользователя
Ruslan Popov
Сообщения: 106
ОС: Ubuntu 10
Контактная информация:

Re: драйвера для промышленных принтеров этикеток и чеков

Сообщение Ruslan Popov »

BIgAndy писал(а):
22.01.2011 00:54
Ruslan Popov писал(а):
22.01.2011 00:33
Мне как раз нужна чековая.

Может, надо было брать чековые принтеры? они в два раза дешевле
У нас используются star tsp 100. Прекрасно определяются капсом.

Я тут спросил про USB принтеры, поддерживаемые в Linux. Сказали бери Zebra. Я взял :)
Ubuntu Linux powered by Python/Django.
Мои проекты на GitHub.
Спасибо сказали:
Аватара пользователя
Ruslan Popov
Сообщения: 106
ОС: Ubuntu 10
Контактная информация:

Re: драйвера для промышленных принтеров этикеток и чеков

Сообщение Ruslan Popov »

Denjs писал(а):
20.01.2011 12:31
В приложении - класс модуля принтера для gk420d созданный на рождественских каникулах - "t_labelprinter_zebra_gk420d". там основные операции и подборка команд с описаниями - возможно будет полезно.

Посмотрел код. Возникли вопросы. Как вы определяете состояние принтера. Метод GetState() найти не смог.
Я так понимаю, надо понять как задавать длину чека (очень много мотает, даже с использованием ^LL), и как получать состояние принтера. Я прочитал пока 70% ZPL II том 1, предполагаю, что там про состояния принтера точно ничего не будет, это разные сферы.
Ubuntu Linux powered by Python/Django.
Мои проекты на GitHub.
Спасибо сказали:
BIgAndy
Сообщения: 1923

Re: драйвера для промышленных принтеров этикеток и чеков

Сообщение BIgAndy »

Ruslan Popov писал(а):
22.01.2011 10:39
Я тут спросил про USB принтеры, поддерживаемые в Linux. Сказали бери Zebra. Я взял :)

Вам посоветовали наиболее общее решение. Но не наименее дешёвое. В любом случае, печатает нормально и то и то.

Скачал CUPS 1.4.6. Теперь он правильно отлавливает события от принтера при смене этикет-ленты с разрывами на ленту с маркерами. По крайней мере в диалогах печати всё меняется автоматически. (ес-сно, надо после смены ленты запустить принтер, в случае если жто 420серия. 140 сам прогоняет тест.

Zebra.ppd - базовый, поставляемый с CUPS

Zebra_technologies... - ppd файл, сгенерированный CUPS в процессе установки.

Ну, и для кучи ppd файл для Star 100-143tsp

UPD. Пришлось в архив запихать, ибо движок не дает заливать ppd файлы.
Вложения
priners_ppd_files.tar.gz
(7.85 КБ) 91 скачивание
Спасибо сказали:
Аватара пользователя
Denjs
Сообщения: 1685
ОС: SuSe 10.2

Re: драйвера для промышленных принтеров этикеток и чеков

Сообщение Denjs »

Ruslan Popov писал(а):
22.01.2011 10:51
Denjs писал(а):
20.01.2011 12:31
В приложении - класс модуля принтера для gk420d созданный на рождественских каникулах - "t_labelprinter_zebra_gk420d". там основные операции и подборка команд с описаниями - возможно будет полезно.

Посмотрел код. Возникли вопросы. Как вы определяете состояние принтера. Метод GetState() найти не смог.

void t_labelprinter_zebra_gk420d::Update_PhyzicalDeviceAttr()
PS: Насчет именования метода GetState() подумаю)

Я так понимаю, надо понять как задавать длину чека (очень много мотает, даже с использованием ^LL), и как получать состояние принтера. Я прочитал пока 70% ZPL II том 1, предполагаю, что там про состояния принтера точно ничего не будет, это разные сферы.

есть оно там. есть. "~HI", "~HS" и пр.
замечу - описание ZPLII лучше скачать с сайта зебры. там по крайней мере наиболее поздние версии с полным набором команд.

Кстати - как компромисный вариант - если уж вы купили девайс, и вернуть/обменять его никак уже - то можно попробовать перевести его в режим EPL или ZPL . ("первый EPL" или "первый ZPL") - это вроде как языки предназначенные для печати чеков - т.е. они ближе к esc/pos чем чем к ZPLII.
Возможно будет проще.... в некоторых местах.
QDroid - Среда исполнения и фреймворк для QtScript.
OTPD - Открытые драйвера промышленных принтеров чеков и этикеток (кроссплатформенная подсистема печати).
Спасибо сказали:
Аватара пользователя
Ruslan Popov
Сообщения: 106
ОС: Ubuntu 10
Контактная информация:

Re: драйвера для промышленных принтеров этикеток и чеков

Сообщение Ruslan Popov »

BIgAndy писал(а):
22.01.2011 12:26
Ruslan Popov писал(а):
22.01.2011 10:39
Я тут спросил про USB принтеры, поддерживаемые в Linux. Сказали бери Zebra. Я взял :)

Вам посоветовали наиболее общее решение. Но не наименее дешёвое. В любом случае, печатает нормально и то и то.

Ну и хорошо. Цена меня не волнует.

BIgAndy писал(а):
22.01.2011 12:26
Скачал CUPS 1.4.6. Теперь он правильно отлавливает события от принтера при смене этикет-ленты с разрывами на ленту с маркерами. По крайней мере в диалогах печати всё меняется автоматически. (ес-сно, надо после смены ленты запустить принтер, в случае если жто 420серия. 140 сам прогоняет тест.

Zebra.ppd - базовый, поставляемый с CUPS

Zebra_technologies... - ppd файл, сгенерированный CUPS в процессе установки.

Ну, и для кучи ppd файл для Star 100-143tsp

Вы забыли приложить файлики.

Denjs писал(а):
22.01.2011 12:51
Ruslan Popov писал(а):
22.01.2011 10:51
Denjs писал(а):
20.01.2011 12:31
В приложении - класс модуля принтера для gk420d созданный на рождественских каникулах - "t_labelprinter_zebra_gk420d". там основные операции и подборка команд с описаниями - возможно будет полезно.

Посмотрел код. Возникли вопросы. Как вы определяете состояние принтера. Метод GetState() найти не смог.

void t_labelprinter_zebra_gk420d::Update_PhyzicalDeviceAttr()
PS: Насчет именования метода GetState() подумаю)


Да там в коде этот метод у вас используется, поэтому я его и искал.

Denjs писал(а):
22.01.2011 12:51
Я так понимаю, надо понять как задавать длину чека (очень много мотает, даже с использованием ^LL), и как получать состояние принтера. Я прочитал пока 70% ZPL II том 1, предполагаю, что там про состояния принтера точно ничего не будет, это разные сферы.

есть оно там. есть. "~HI", "~HS" и пр.
замечу - описание ZPLII лучше скачать с сайта зебры. там по крайней мере наиболее поздние версии с полным набором команд.


Оттуда качал.

Denjs писал(а):
22.01.2011 12:51
Кстати - как компромисный вариант - если уж вы купили девайс, и вернуть/обменять его никак уже - то можно попробовать перевести его в режим EPL или ZPL . ("первый EPL" или "первый ZPL") - это вроде как языки предназначенные для печати чеков - т.е. они ближе к esc/pos чем чем к ZPLII.
Возможно будет проще.... в некоторых местах.

Обменять/вернуть можно, но это делает другой человек и опять потеряем месяц, а то и больше.
Надо почитать про переключение режима.
Ubuntu Linux powered by Python/Django.
Мои проекты на GitHub.
Спасибо сказали:
Аватара пользователя
Denjs
Сообщения: 1685
ОС: SuSe 10.2

Re: драйвера для промышленных принтеров этикеток и чеков

Сообщение Denjs »

Ruslan Popov писал(а):
22.01.2011 13:48
void t_labelprinter_zebra_gk420d::Update_PhyzicalDeviceAttr()
>>PS: Насчет именования метода GetState() подумаю)
Да там в коде этот метод у вас используется, поэтому я его и искал.
GetState() - это метод класса отвечающего за связь с устройством.
_comm_device->GetState() - это мы пытаемся узнать у модуля связи его состояние. это не относится к состоянию устройства к которому данный модуль связи "подключает нас"
т.е. грубо гововоря мы пытаемся узнать состояние канала связи. (потому что устройство может быть одно, а каналы связи - разные - сеть, послеовательное подключение, или usb например)

логика работы с устройством, команды ZPLII - полностью и только в классе t_labelprinter_zebra_gk420d.
QDroid - Среда исполнения и фреймворк для QtScript.
OTPD - Открытые драйвера промышленных принтеров чеков и этикеток (кроссплатформенная подсистема печати).
Спасибо сказали:
BIgAndy
Сообщения: 1923

Re: драйвера для промышленных принтеров этикеток и чеков

Сообщение BIgAndy »

Ruslan Popov писал(а):
22.01.2011 13:48
Вы забыли приложить файлики.

Приложил в архиве.
Спасибо сказали:
Аватара пользователя
Ruslan Popov
Сообщения: 106
ОС: Ubuntu 10
Контактная информация:

Re: драйвера для промышленных принтеров этикеток и чеков

Сообщение Ruslan Popov »

Результат экспериментов:

Код: Выделить всё

root@n150:/home/rad# echo '~HS' > /dev/usblp0
root@n150:/home/rad# cat /dev/usblp0
030,0,0,1032,000,0,0,0,000,0,0,0
000,0,0,0,0,2,6,0,00000000,1,000
1234,0
root@n150:/home/rad# echo '~HI' > /dev/usblp0
root@n150:/home/rad# cat /dev/usblp0
GK420d-200dpi,V61.17.5Z,8,2104KB
root@n150:/home/rad# python
Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41)
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> p = open('/dev/usblp0', 'rw')
>>> p.write('~HS')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IOError: [Errno 9] Bad file descriptor
>>>

Так, как же питоном с этим взаимодействовать. Надо подумать ;)
Ubuntu Linux powered by Python/Django.
Мои проекты на GitHub.
Спасибо сказали:
Аватара пользователя
Ruslan Popov
Сообщения: 106
ОС: Ubuntu 10
Контактная информация:

Re: драйвера для промышленных принтеров этикеток и чеков

Сообщение Ruslan Popov »

Правильный подход:

Код: Выделить всё

>>> p = open('/dev/usblp0', 'w')
>>> p.write('~HS')
>>> p.readlines()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IOError: File not open for reading
>>> p.close()
>>> p = open('/dev/usblp0', 'r')
>>> p.readlines()
['\x02030,0,0,1032,000,0,0,0,000,0,0,0\x03\r\n', '\x02000,0,0,0,0,2,6,0,00000000,1,000\x03\r\n', '\x021234,0\x03\r\n']
>>> p.close()
>>>
Ubuntu Linux powered by Python/Django.
Мои проекты на GitHub.
Спасибо сказали:
elw00d
Сообщения: 3

Re: драйвера для промышленных принтеров этикеток и чеков

Сообщение elw00d »

Подскажите пожалуйста, можно ли как-то печатать в страничном режиме действительно длинные чеки ?
У меня чек длиной около 20 см, и когда я начинаю его печатать, в одну страницу он не влезает в любом случае, и позиционирование у элементов, которые не влезли, сбивается.
Приходится печатать сначала одну, потом другую страницу. Но в этом случае между страницами возникает трехсантиметровый пробел, и в этом основная проблема.
Можно ли как-нибудь избавиться от этого промежутка или хотя бы уменьшить его ? 1 см было бы норм по сути.
Спасибо сказали:
Аватара пользователя
Denjs
Сообщения: 1685
ОС: SuSe 10.2

Re: драйвера для промышленных принтеров этикеток и чеков

Сообщение Denjs »

elw00d писал(а):
28.01.2011 15:23
Подскажите пожалуйста, можно ли как-то печатать в страничном режиме действительно длинные чеки ?
У меня чек длиной около 20 см, и когда я начинаю его печатать, в одну страницу он не влезает в любом случае, и позиционирование у элементов, которые не влезли, сбивается.
Приходится печатать сначала одну, потом другую страницу. Но в этом случае между страницами возникает трехсантиметровый пробел, и в этом основная проблема.
Можно ли как-нибудь избавиться от этого промежутка или хотя бы уменьшить его ? 1 см было бы норм по сути.

Что именно вы имеете в виду под "страничным режимом"? какие драйвера вы используете? или вы работаете с принтером на уровне esc/pos?

Если вы работаете с принтером на уровне esc/pos (и мы говорим про "страничный режим" как он определен в спецификациях языка esc/pos, см команду "[ESC] L ")(?), то размер "страницы" ограничен памятью принтера. Как только вы закрываете "страницу" (команда [FF] - код 0x0C) - страница выводится на печать из внутреннего буфера принтера.
но никаких "3-х сантиметров" там не наблюдается (например - см. сканы демок OTPD, стр. 3 ) - т.е. вы можете дробить вашу "длинную страницу" на множество мелких.

А вот если же вы говорите про какие-то другие драйвера (OPOS, CUPS, Windows ?) то хотя вопрос не по топику - но наверное это может быть настроено размером страницы, шириной полей и пр.? нет?
QDroid - Среда исполнения и фреймворк для QtScript.
OTPD - Открытые драйвера промышленных принтеров чеков и этикеток (кроссплатформенная подсистема печати).
Спасибо сказали:
BIgAndy
Сообщения: 1923

Re: драйвера для промышленных принтеров этикеток и чеков

Сообщение BIgAndy »

elw00d писал(а):
28.01.2011 15:23
Подскажите пожалуйста, можно ли как-то печатать в страничном режиме действительно длинные чеки ?
У меня чек длиной около 20 см, и когда я начинаю его печатать, в одну страницу он не влезает в любом случае, и позиционирование у элементов, которые не влезли, сбивается.

Да, можно. Star 143 и Zebra 420t прекрасно это делают. Просто надо установить соответствующую длину чека в настройках программы.
Чекопринтер Star вообще печатает, пока в него заливаешь данные. Ограничения на длину чека нет.
Спасибо сказали:
elw00d
Сообщения: 3

Re: драйвера для промышленных принтеров этикеток и чеков

Сообщение elw00d »

Работаю напрямую, посылая текст и управляющие коды на COM-порт. Принтер PP5200 если что.
Вкратце все делаю по-простому - инициализирую принтер, перевожу в page mode, устанавливаю размер страницы (это можно и не делать, результат тот же).
Потом печатаю вызовами setVerticalAbsolutePosition() / отступ пробелами / text / 0x0A.
В конце вызываю PrintAndReturnToTextMode (0x0C). Пробовал использовать PrintRepeatable (0x1B 0x0C) и потом Cancel чтобы очистить буфер и начать новую страницу, но промежуток остается.
Еще пробовал функцию "Print and feed n lines" - 0x1B 0x64 n, почему-то не работает вообще (чуть двигает листок в лотке и усе).
Такое ощущение, будто принтер при печати страницы всегда делает перед началом собственно печати некий пробел.
Даже при печати тестовой страницы он его сделал.

Да, можно. Star 143 и Zebra 420t прекрасно это делают. Просто надо установить соответствующую длину чека в настройках программы.
Чекопринтер Star вообще печатает, пока в него заливаешь данные. Ограничения на длину чека нет.

Хорошо, если мой тоже умеет так :) А Вы печатаете в текстовом режиме или в страничном ?
Спасибо сказали:
BIgAndy
Сообщения: 1923

Re: драйвера для промышленных принтеров этикеток и чеков

Сообщение BIgAndy »

elw00d писал(а):
28.01.2011 15:54
Хорошо, если мой тоже умеет так :) А Вы печатаете в текстовом режиме или в страничном ?

O_O ????
Это как спросить: "Принтер черно-белый или лазерный?"
Вы о чём?
Спасибо сказали:
Аватара пользователя
Denjs
Сообщения: 1685
ОС: SuSe 10.2

Re: драйвера для промышленных принтеров этикеток и чеков

Сообщение Denjs »

PP5200 принтер поддерживает сисетму команд esc|pos. Она ориентирована на непрерывную печать - т.е. длина чека - это весьма условная фикция.
т.е. "в строчном режиме (line-mode) сколько вы на него будете поливать - столько он и будет печатать - хоть весь рулон изведите.
В отличии от страничных языков типа ZPLII, EPLII - которые требуют определения размера этикетки.

setVerticalAbsolutePosition()
ЭТО ОТКУДА? что то за метод и кем он поддерживается?

Вообще у посифлексов - свой гемор с командами esc\pos. там много всего реализовано не так как оно описано в спецификациях esc|pos - особенно касательно страничного режима. Если вы скачатете мои исходники - то там увидите много матов в адрес производителей.

Если вы хотите разобраться как печатать на этот принтер командами esc|pos - то предлагаю вам ознакомиться с исходниками модуля принтера ( t_posprinter_posiflex_pp5200.cpp лкжит в исходниках в каталоге ./QDroid/OTPD_project_copy4qdlibs/OTPD/classes/printer_modules).
или скачайте все и соберите otpd_phtmlrender (./QDroid/OTPD_project_copy4qdlibs/_solutions_and_demos/otpd_phtmlrender)

исходники вам надо будет выкачивать в составе QDroid - http://prdownload.berlios.de/qdroid/QDROID....sources.tar.gz
более позднее пока не выложил. возможно сегодня-завтра выложу.

Запустите демо печать (в otpd_phtmlrender ), поиграйтесь с тегами, потом как подберете что вам нужно - переведите принтер в режим hex-дампа, и отслеживайте что посылается на принтер. Там есть даже параметры выбранные методом подбора)))

Но скажите - вы уверены что вам нужен именно страничный режим печати? вы хотите позиционировать произвольно текст или как? обычно kine-mode и "простого текста" достаточно.
QDroid - Среда исполнения и фреймворк для QtScript.
OTPD - Открытые драйвера промышленных принтеров чеков и этикеток (кроссплатформенная подсистема печати).
Спасибо сказали:
Аватара пользователя
Denjs
Сообщения: 1685
ОС: SuSe 10.2

Re: драйвера для промышленных принтеров этикеток и чеков

Сообщение Denjs »

BIgAndy писал(а):
28.01.2011 16:39
elw00d писал(а):
28.01.2011 15:54
Хорошо, если мой тоже умеет так :) А Вы печатаете в текстовом режиме или в страничном ?

O_O ???? <...>
Вы о чём?

вероятно elw00d имел в виду режимы принтера - line-mode и page-mode - в том виде, как это определено в документации на esc/pos.

а BIgAndy, как я понимаю имеет в виду настройки принтера доступные через общие CUPS-драйвера.
QDroid - Среда исполнения и фреймворк для QtScript.
OTPD - Открытые драйвера промышленных принтеров чеков и этикеток (кроссплатформенная подсистема печати).
Спасибо сказали:
Аватара пользователя
Denjs
Сообщения: 1685
ОС: SuSe 10.2

Re: драйвера для промышленных принтеров этикеток и чеков

Сообщение Denjs »

вот ещё кусок комментов и матов (из файла t_posprinter_posiflex_pp5200.cpp ) относитлельно посифлекса и промотки после страничного режима
Полагаю - это то, что касается вашей проблемы с промоткой после выхода из страничного режима.
обратите внимание на ту часть, которая "Высота промотки страницы при поступлении FF (0x0С) определяется в соответствии с параметром Y - последний пармметр из 4-х ".
(это все касается команд esc|pos конечно.)

Код: Выделить всё

        /*2008.02.02
        боле того: у PP-5200 изменен порядок параметров в команде [ESC]W (зона печати)
        передаются в следующем порядке: X dY dX Y
         т.е. полностью это будет выглядеть как [ESC] W Xl Xh dYl dYh dXl dXh Yl Yh
            (суфиксы "l" и "h" - означают старший и младший байты.)
        где X,Y - координаты левого верхнего угла зоны печати относительно левого _нижнего_ угла
         (под левым нижним уголом понимается зона предполагаемого окончания печати в page mode)
         dX, dY - ширина и высота зоны печати.

           Высота промотки страницы при поступлении FF (0x0С) определяется
        в соответствии с параметром Y - последний пармметр из 4-х
           Далее - параметр dY в принципе игнорируется.(очень на то похоже)
        при печати данных через LF - при достижении левого края происходит перевод строки
        но при достижении нижнего края зоны печати никакого "обрезания" не происходит.
         при продолжении печати - при достижении нижнего края - от которого отсчитывались координаты
        - произойдет "закольцовывание" и печать продолжится "с самого верха".
           Что происходит с картинкой - не проверял.

         Возможно так будет понятнее: (можно сказать что параметры передаются как X Y dX dY
             но Y - интерпретируется как набор параметров.
            он аналогично учитывается при выходе из Pagemode.

         при определении этом существуют следующие ограничения :
            X<>(dX+?).
            Y<>(dY+?).
            ? - определяет некоторую погрешность. у меня это было "+1" и "-0"
            т.е. если X=150 то если dX=151 или 150 то команда будет проигнорированна,
            и все данные до определения следующей зоны печати тоже
            и хотя Y врожде игнорируется, но как видимо "не совсем"...
(!)         при определении зоны печати менее 50 (1|200 unit) принтер повисает. помогает только выключение питания.

????        после выхода из страничного режима - все что было в буфере до входа

          При переходе в страницный режим печати - опреледяется максимальная зона печати.
        (27 строчек, 10 см)


        тестированно на принтере с прошивкой
        "FIRMWARE VERSION 1.6 EURO"
        куплено в "атол".
        */
QDroid - Среда исполнения и фреймворк для QtScript.
OTPD - Открытые драйвера промышленных принтеров чеков и этикеток (кроссплатформенная подсистема печати).
Спасибо сказали:
Ответить