Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.09.17;
Скачать: CL | DM;

Вниз

Принтер Zebra - с чего начать чайнику?   Найти похожие ветки 

 
kaif ©   (2006-08-28 02:22) [0]

У заказчика есть такой принтер. Я с принтерами напрямую вообще не работал, тем более с такими.
С чего начать?
Тем более, что у меня такого принтера под рукой нет, а у заказчика максимум, что можно сделать - отлаживать что-то уже работающее.
Подскажите какой-нибудь самый простой пример типа "Hello world" для
принтера Zebra.
Мне нужно из программы, написанной на Delphi, послать на него этикетку (штрих-код плюс некоторый текст).
Я нашел файл EPL2_Manula.pdf. Там описаны какие-то команды. Возможно я смогу сам разобраться, если пойму, как вообще эти команды посылаются на принтер из дельфийской программы.

Буду благодарен за любой простой пример.
С уважением.


 
boriskb ©   (2006-08-28 07:42) [1]

kaif ©   (28.08.06 2:22)

Соболезную
Я с ними намучился...
Ужасно капризная штука в плане настройки.
Сейчас у меня два работают, но я до сих пор не понимаю "Как?"  :)

Если нет документации могу выслать.
есть с z  и без неё.


 
Сергей М. ©   (2006-08-28 11:49) [2]


> kaif ©   (28.08.06 02:22)


см. [1]

Мне пришлось столкнуться с моделью Zebra LP2824 - штука действительно капризная.

Единственное что могу подсказать - не лезь в EPL напрямую, это задача драйвера принтера.
Тебе следует узнать у заказчика, какие типоразмеры (большинство из них стандартизовано) этикеток он планирует использовать. Дальше все до смешного просто - какими-угодно средствами (хоть в том же Excel, программно или вручную) делаешь дизайн этикетки конкретного типоразмера и отправляешь все это на печать на зарегистрированный Zebra-принтер. Все остальное по идее должен сделать Zebra-драйвер: принять вх.поток (канву будущего изображения, сформированную тем же Excel"ом по команде печати листа), преобразовать его в EPL2-формат, сформировать задание и запулить его в очередь спулера.


 
Ломброзо ©   (2006-08-28 12:33) [3]

Сергей М. ©   (28.08.06 11:49) [2]

Про типоразмеры согласен, но вот про способ вывода - категорически нет. Действительно, печатать можно двумя способами: 1) подготовкой изображения этикетки и отправкой оного спулеру Windows 2) вызовом нативных команд принтера. В первом случае придётся или искать алгоритмы формирования штрих-кодов, или специальные шрифты, или компоненты, умеющие генерировать штрих-код.

Алгоритмы я отринул сразу.

Шрифты в принципе в интернете кое-где валяются, но как правило или платные, или демонстрационные, или корявые. К тому же контрольную сумму при использовании шрифтов все равно придётся рассчитывать самому.

Компоненты тоже имеются, и обычно тоже платные (не знаю, как для Delphi, но для дотнета обычно просят денежку).

В чем преимущество EPL:
1) этикетка всегда получается читаемая сканером
2) в вашем распоряжении практически все стандарты штрих-кодирования.

В общем, в итоге я сделал так: определил интерфейс и написал для зебры две реализации - рабочую, использующую для печати этикеток команды EPL, и "заглушку", формирующую этикетку при помощи GDI.


 
Ломброзо ©   (2006-08-28 12:39) [4]

На принтер команды посылаются через параллельный или последовательный порт, с которым можно работать как с файлом через функции WinAPI (см. CreateFile, ReadFile, WriteFile) или через какой-нить компонент для работы с COM и LPT-портами.


 
Сергей М. ©   (2006-08-28 13:01) [5]


> Ломброзо ©   (28.08.06 12:33) [3]


> про способ вывода - категорически нет


Любой драйвер любого дивайса как-раз и существует для сопряжения двух интерфейсов.
Конкретно в случае с Win-принтером (не важно, зебра там или еще какой-то зверь) его драйвер как раз и занимается сопряжением GDI и одним или более нативных языковых интерфейсов принтера.

Здесь что-то не так ? Аргументируй ...


 
Сергей М. ©   (2006-08-28 13:05) [6]


> Ломброзо


Разумеется, если речь идет о прямом выводе на порт принтера (минуя драйвер принтера и спулер), следует пользовать непосредственно нативный язык. С этим я согласен. Но случай ли это автора - об этом нужно спросить у автора, если он конечно владеет деталями.


 
VICTOR_   (2006-08-28 13:08) [7]

Могу предложить вариант(правда не непосредственно работающий с EPL).
1.Устанавливается драйвер
http://www.zebra.com/id/zebra/na/en/index/products/printers/desktop/lp2824.4.tabs.html
2.Устанавливается программа Create-A-Label Tools v.3.06.(далее CAL)
Насколько мне известо - она бесплатна, хотя сейчас и снята с поддержки фирмой Zebra.
3.В программе CAL настраивается внешний вид етикетки и сохраняется в виде шаблона *.lbl(делается 1 раз)
4.В Delphi - формируется тестовый файл определенного формата(см. справку к программе CAL), в котором передаются все параметры - название, цена, штрихкод и т.д. и запускается выполнение CAL с передачей ему в качестве параметра - текстового файла
lv.exe /cmd news18x30A.cmd

Данный вариант работает на нескольких фирмах с Zebra LP2824.
Среди замеченный недостатков - при печати партиями более 5 штук к ряду на одной из фирм иногда недопечатывало етикетки. Хотя это, возможно, были глюки драйвера либо самого принтера.


 
Gorlum ©   (2006-08-28 14:08) [8]

Изучай EPL и всё - язык очень простой (ну пара дней на изучение и ещё пара дней на опробирование результатов) и результат будет гарантировано хороший.

Из Delphi я делал текстовый файл с командами и копировал его в порт принтера. Вот и всё


 
Gorlum ©   (2006-08-28 14:10) [9]

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


 
Сергей М. ©   (2006-08-28 14:37) [10]


> делал текстовый файл с командами


Покажи образчик сего творения, если не затруднит ..


 
Gorlum ©   (2006-08-28 14:44) [11]

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


 
Ломброзо ©   (2006-08-28 14:50) [12]

Сергей М. ©   (28.08.06 14:37) [10]

На инсталляционном диске есть примеры bat-файлов и файлов с последовательностями команд. В самом простом случае нужно скопировать файл, содержащий последовательность команд, в порт: copy file.txt  LPT1.


 
Сергей М. ©   (2006-08-28 14:52) [13]


> Ломброзо ©   (28.08.06 14:50) [12]


И вот здесь-то и поджидает засада.


 
Gorlum ©   (2006-08-28 14:55) [14]

Ну хоть сразу пиши, что имеешь ввиду...


 
Ломброзо ©   (2006-08-28 14:58) [15]

Где засада? Просто удобная лазейка для отладки. Кроме того, если расшарить принтер как сетевой, то можно печатать и так: copy file.txt \\comp\zebra2824


 
Gorlum ©   (2006-08-28 15:01) [16]

Если шрифты имеются ввиду - то это не засада, а технический нюанс, который решается за 10 минут


 
Сергей М. ©   (2006-08-28 15:16) [17]

Засада в неадекватности реакции принтера на требование к нему напечатать след.этикетку, в то время как он занят интерпретацией/исполнением EPL2-предложения для печати предыдущей этикетки.

Засада имеет место, когда от LP2824 (про другие ничего не могу сказать) требуют  выполнить встроенный рендеринг текста, в то время как предыдущее аналогичное требование находится в этот момент в стадии выполнения.

Упомянутой засады нет, если упомянутой Зебре поступает готовая (сформированная штатным драйвером) битовая маска будущего изображения вместо предложения внутреннего рендеринга того же изображения.


 
Ломброзо ©   (2006-08-28 15:24) [18]

Ну, примитивы синхронизации никто не отменял


 
Gorlum ©   (2006-08-28 15:30) [19]

Хм, вообще этот процесс занимает не минуты...
пара секунд - максимум.
Ну и [18], конечно.


 
Сергей М. ©   (2006-08-28 16:46) [20]


> Ломброзо ©   (28.08.06 15:24) [18]
>
> примитивы синхронизации никто не отменял


А в батниках в демо-примерах к дивайсу на это, конечно же, заострено особое внимание)

Или как ?)
Или готов процитировать опровержение ?


> Gorlum ©   (28.08.06 15:30) [19]
>
> Хм, вообще этот процесс занимает не минуты...
> пара секунд - максимум.


Какой такой "процесс" ?)


 
kaif ©   (2006-08-28 16:54) [21]

Спасибо всем!

Из Ваших сообщений я понял на данный момент вот что:
1. Есть два способа общаться с принтером: на нативных командах и через универсальную графическую канву Windows. В отношении Zebra первый способ даст более гарантированное качество печати (что может оказаться важным для сканеров штрих-кодов), второй способ проще в отношении реализации и совместимости разных принтеров, но требует рисовать штрихкоды самому.
2. Язык EPL действительно имеет отношение к этой теме, я не зря скачал по нему мануал. И нативный подход мне кажется интуитивно более верным в данном случае.
3. Не имея под рукой принтера отлаживать это все будет довольно сложно.

Я попытался пока что хотя бы обратиться к принтеру вообще (у меня под рукой нет Зебры, только LaserJet 5L). Собрав что-то из обрывков текстов VCL, я соорудил вот это вот:

procedure TForm1.Button1Click(Sender: TObject);
var
 hLPT1: THandle;
 Buffer: array[0..1023] of Char;
 IpNumberOfBytesWritten: DWORD;
begin
 hLPT1 := CreateFile("LPT1", GENERIC_READ or GENERIC_WRITE, 0,
  nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);

 if hLPT1 = INVALID_HANDLE_VALUE then
    raise EAbort.CreateFmt("Ошибка открытия порта: %d",[GetLastError]);
 try
   FillChar(Buffer, StrLen(Buffer), "A");
   if not WriteFile(hLPT1, Buffer, StrLen(Buffer), IpNumberOfBytesWritten, nil) then
     raise EAbort.CreateFmt("Ошибка записи в порт: %d",[GetLastError]);
 finally
   CloseHandle(hLPT1);
 end;
end;


Потрясающе, но это получилось!
Принтер напечатал строку из букв "AAAAAAAAA..."

----------
Теперь хочу понять следующее. Видимо я должен попытаться написать в буфер команду на языке EPL.
Может у кого-то есть пример самой простой команды (набора команд) для какой-нибудь этикетки?
Дальше я уже сам разберусь по мануалу ELP.

Жаль, что у меня под рукой нет этой Зебры сейчас. :(


 
Сергей М. ©   (2006-08-28 17:01) [22]

Скачай себе ZebraDesigner - многое сразу прояснится.


 
horse ©   (2006-08-28 17:08) [23]

Пробовал не одну Зебру. Использовал FastReport и дрова принтера - проблем не имел. Печатаешь все что хочешь как на обычный принтер.
Зачем лезть к нему напрямую? Люди же для нас придумали ООП и наследственность - используйте уже написааный код до вас.


 
Ломброзо ©   (2006-08-28 17:09) [24]

Этикетка 3x2 см, EAN13
------------------------------
O
N
D7
Q168,16
q240
A6,6,0,1,1,1,N,"Our company"
A6,25,0,1,1,1,N,"28.08.06"
A6,45,0,1,1,1,N,"IVANOV P 01.01.01"
B6,71,0,E30,2,6,45,B,"000102390006"
P1
--------------------------------


 
kaif ©   (2006-08-28 17:18) [25]

2 Ломброзо ©   (28.08.06 17:09) [24]
Спасибо!
А как насчет русского языка там дело обстоит?
Не придется ли мне грузить туда фонты?
Я не представляю вообще, как это сделать...

2 horse ©   (28.08.06 17:08) [23]
А штрих-код в FК я смогу сделать хороший, например EAN13?


 
Ломброзо ©   (2006-08-28 17:31) [26]

Русский не пробовал, но сомневаюсь в том, что нативный шрифт поддерживает кириллицу.
Оппоненты наверное в чем-то правы, в том смысле, что если есть нормальная  софтинка, умеющая формировать растровое изображение этикетки, то лучше использовать её. Я же был ограничен дотнетом и условием  не использовать ПО третьих производителей, поэтому заюзал нативный драйвер, но в то же время оставил лазейку для использование стандартного.


 
Alex>   (2006-08-28 17:41) [27]

2 kaif   EAN13 у FastReport есть, только что посмотрел :)


 
kaif ©   (2006-08-28 17:45) [28]

У меня есть лицензионный FastReport. И его я так или иначе намерен использовать в программе для печати на обычные принтеры.
Так что если в FR мне удастся получить качественный штрих-код, то, пожалуй, я воспользуюсь этим вариантом.
А как юзать FR в этом случае?
Каждая этикетка соотвествует одной странице?
У меня этикетки здоровые (где-то квадратный дециметр каждая).


 
kaif ©   (2006-08-28 17:49) [29]

Да, я уже вижу, что FR имеет целый ряд форматов штрих-кода и может печатать их под разными углами. Интересно, насколько это хорошо впишется в разрешение принтера.


 
horse ©   (2006-08-28 17:54) [30]

Разрешение дает нормальное, правда, чесноговоря коды напечатанные не на наклейке, а на обычной бумаге на обычном лазарнике читаются лучше.

> Каждая этикетка соотвествует одной странице?

Да. Делать можно все что угодно, хоть всю базу сразу на печать отправить. ФР - очень гибкая штука!
Величина этикеток не имеет никакого значения, у меня тоже большие.


 
kaif ©   (2006-08-28 18:28) [31]

Ну что же. Всем спасибо огромное!
С учетом того, что принтера под рукой для серьезных экспериментов пока  нет, то скорее всего я начну с FastReport-а, чтобы сразу добиться хотя бы какой-то печати. Если штрих-код будет плохо читаться, тогда уже стану думать: разбираться с разрешением принтера или переходить на EPL.


 
Gorlum ©   (2006-08-29 11:18) [32]

На разрешени принтера я бы грешить вообще не стал... (ну если только головка век свой отживает)

Даже 203 dpi может печатать очень мелкие коды... Просто они читаться будут сканером с более высоким размешением.

А по шрифтам - так это да - их грузить надо.



Страницы: 1 вся ветка

Текущий архив: 2006.09.17;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.055 c
8-1141248230
ShAB_v2.0
2006-03-02 00:23
2006.09.17
Как усреднить цвета до одного цвета?


4-1145873897
Velimir
2006-04-24 14:18
2006.09.17
Работа с портом с конкретным адресом. Запись и чтение


15-1156752262
Nic
2006-08-28 12:04
2006.09.17
Какие бывают...


15-1156374725
Rule
2006-08-24 03:12
2006.09.17
Наконецто перебрался в Москву !!!


15-1156694224
Griha
2006-08-27 19:57
2006.09.17
Скрыть от приложения деактивацию его окна (WM_ACTIVATE)