Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2006.09.17;
Скачать: [xml.tar.bz2];

Вниз

Принтер 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.059 c
15-1156741216
begin...end
2006-08-28 09:00
2006.09.17
28 августа. С Днём рождения!


2-1156761566
dyv
2006-08-28 14:39
2006.09.17
Менеджер файлов


15-1156138331
default
2006-08-21 09:32
2006.09.17
Задачка


15-1156762544
Crazy monkey
2006-08-28 14:55
2006.09.17
Знакомства в сети


2-1156832936
evgenij_
2006-08-29 10:28
2006.09.17
С какой табл.работает ADOQuery





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский