powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Принтер этикеток, сетевой. Как напечатать.
15 сообщений из 40, страница 2 из 2
Принтер этикеток, сетевой. Как напечатать.
    #40125603
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отправлять в печать надо как-то так...
Мы используем шрифт и печать в UTF-8
автор^CW T,E:TT0003M_.FNT^CI 28
Выдержка кусков...

P.S. Естественно это все в цикле пускает до 10.000 этикеток.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
var
  PrinterName: string;
  PrinterHandle: THandle;
  DocumentNumber: string;
  DocInfo: TDocInfo1;
  Command: string;
  BytesWritten: Cardinal;
  Bytes: TBytes;
begin
            if not OpenPrinter(PChar(PrinterName), PrinterHandle, nil) then
              RaiseLastOSError();
            try
              DocInfo.pDocName := PChar(DocumentNumber);
              DocInfo.pOutputFile := nil;
              DocInfo.pDataType := 'RAW';
              if StartDocPrinter(PrinterHandle, 1, @DocInfo) = 0 then
                RaiseLastOSError();
              try
                // for k := 1 to 10000 do    Если надо в цикле печатать этикетки - пускаем тут цикл..
                  if not StartPagePrinter(PrinterHandle) then
                    RaiseLastOSError();
                  try
                    BytesWritten := 0;

                    Command := '^XA^CW T,E:TT0003M_.FNT^CI 28.........^XZ';

                    Bytes := TEncoding.UTF8.GetBytes(Command);
                    if not WritePrinter(PrinterHandle, @Bytes[0], Length(Bytes), BytesWritten) then
                      RaiseLastOSError();
                  finally
                    if not EndPagePrinter(PrinterHandle) then
                      RaiseLastOSError();
                  end;
                end;
              finally
                if not EndDocPrinter(PrinterHandle) then
                  RaiseLastOSError();
              end;
            finally
              if not ClosePrinter(PrinterHandle) then
                RaiseLastOSError();
            end;
end;
...
Рейтинг: 0 / 0
Принтер этикеток, сетевой. Как напечатать.
    #40125615
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraksУ принтеров этикеток некоторая проблемность с драйверами.

А зачем дрова если не печатать через GDI? Поток данных просто отправляется в
LPT1/COM2/USB2 и т.д. и т.п. простым WriteLn.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Принтер этикеток, сетевой. Как напечатать.
    #40125651
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

fraksУ принтеров этикеток некоторая проблемность с драйверами.

А зачем дрова если не печатать через GDI? Поток данных просто отправляется в
LPT1/COM2/USB2 и т.д. и т.п. простым WriteLn.

Прекрасный вопрос.
Только принтер сетевой.

От драйвера нужно:
- преобразовать физический интерфейс принтера в абстракцию в которую можно сделать WriteLn
- реализовать промежуточный буфер между приложением и принтером, что бы проблемы наличия/отсутствия принтера не затыкали мое однопоточное приложение.

Ну и, собственно, это всё.
...
Рейтинг: 0 / 0
Принтер этикеток, сетевой. Как напечатать.
    #40125652
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

fraksУ принтеров этикеток некоторая проблемность с драйверами.

А зачем дрова если не печатать через GDI? Поток данных просто отправляется в
LPT1/COM2/USB2 и т.д. и т.п. простым WriteLn.

А примерчики есть? Ни разу не занимался таким на винде.

И еще интересует как отправить на печать через TCP/9100 по RAW. Что бы уж вообще без принтера в системе.
...
Рейтинг: 0 / 0
Принтер этикеток, сетевой. Как напечатать.
    #40125677
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fraks
И еще интересует как отправить на печать через TCP/9100 по RAW. Что бы уж вообще без принтера в системе.

createsocket, connect, send ?
...
Рейтинг: 0 / 0
Принтер этикеток, сетевой. Как напечатать.
    #40125696
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X-Cite
L_argo
Печатал на Зебрах, Элтронах и Датамаксах из Фастрепорта еще 20 лет назад.
И сейчас печатаю.
Ни разу не прибегал к печати на спецязыке. Зачем ?


Печатать на зебре не на ZPL а растром, ну это как пользоваться микроскопом для забивания гвоздей.
Сравните, за сколько принтер сможет отпечатать 10.000 этикеток из растра. И за сколько если отправить через ZPL. А также качество.
Микроскоп это скорее про С#, жабу и прочие тормозные питоны.
Печатал как то около 200 тыс. этикеток на элтроне. Ушло неск. коробок этикеток. Для леденцов в розницу.
Про качество соглашусь. Иногда качество ниже желаемого. Но хорошо помогает подъем температуры головки.

ФастРепорт универсален. Работает с любым принтером. Хотя бывает неодинаковое смещение, которое иногда зависит даже от прозрачности бумаги.
...
Рейтинг: 0 / 0
Принтер этикеток, сетевой. Как напечатать.
    #40125744
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-Brutalcreatesocket, connect, send ?

Ну или всё то же самое в кривой обёртке TClientSocket.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Принтер этикеток, сетевой. Как напечатать.
    #40125953
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Печать через драйвер "Generic / Text only"

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
procedure TFrmTest.Label_Print;
var
  F: TextFile;
  i: integer;
begin
//Printer.PrinterIndex := 0; // выбираем нужный принтер из списка Printer.Printers
  Printer.Title := 'Этикетка';
  AssignPrn(F);
  //
  Rewrite(F);
  for i := 0 to Memo_ZPL.Lines.Count-1 do begin
    WriteLn(F, AnsiToUTF8(Memo_ZPL.Lines[i]))
  end;//for
  CloseFile(F);
end;


и, в принципе, вполне рабочий вариант.

Перекодировка в UTF особо и не нужна, сделана только лишь потому что этикетка дизайнится с помощью
http://labelary.com/viewer.html
а там исходник в UTF передается, поэтому если в коде указать что это 1251 то русского языка ТАМ не будет.
Поэтому, ТАМ пишем в UTF, скрипт этикетки сохраняем себе в 1251, но указав в нем что это UTF, и при отправе на принтер он конвертируется в UTF и таким образом совпадает и команда ^CI 28 и сама кодировка.
...
Рейтинг: 0 / 0
Принтер этикеток, сетевой. Как напечатать.
    #40125956
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Печать через TCP, без всяких драйверов.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
procedure TFrmTest.Label_Print_TCP;  // напечатать этикетку через TCP-socket
var
  i: integer;
begin
  // TTcpClient с вкладки Internet в Delphi7
  TcpClient1.RemoteHost := '10.0.0.222';
  TcpClient1.RemotePort := '9100';
  TcpClient1.Open;
  for i := 0 to Memo_ZPL.Lines.Count-1 do begin
    TcpClient1.Sendln(AnsiToUTF8(Memo_ZPL.Lines[i]))
  end;//for
  TcpClient1.Close;
end;


этот вариант работает, но в реальной работе использовать нельзя, ибо любая проблема с сетью или принтером - и программа встала.
Это если запускать по дефолту, с
Код: pascal
1.
TcpClient1.BlockMode := bmBlocking;


Ну а если делать по нормальному, то это будет уже не эти 5 строк.
...
Рейтинг: 0 / 0
Принтер этикеток, сетевой. Как напечатать.
    #40126007
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraksНу а если делать по нормальному, то это будет уже не эти 5 строк.

Ну да, строк 10 будет. Это если ещё и сообщения от принтера читать, а не только
писать. WSAAsyncSelect отлично ложится на гуевые приложения. С консолью или
сервисом было бы сложнее.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Принтер этикеток, сетевой. Как напечатать.
    #40127339
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Продолжаю биться с принтером Honeywell PC42d .
Разрабатывая этикетку на ZPL столкнулся с тем что команда ^TB работает неправильно - не переносит строку и не обрезает текст по рамке.
Решил обновить прошивку т.к. в релизноте было сказано про что-то подобное.

T10.15.017559 - была в принтере исходно.
T10.17.019825 - обновил до этой.

В итоге, ^TB все так же работает неправильно, зато принтер теперь стал глотать пробелы, лепит все подряд.
Даунгрейд прошивки невозможен :(

Начинаю понимать почему люди не используют ZPL .
...
Рейтинг: 0 / 0
Принтер этикеток, сетевой. Как напечатать.
    #40127418
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks

Начинаю понимать почему люди не используют ZPL .


Начинаю понимать почему надо использовать zebrовские принтеры а не бюджетные аналоги.

Вы не поверите, но по маркировке молочки/лекарств/шин/лп/обуви, в специальном техночате, только и топят за zpl и истово не понимают зачем печатать растр.
Кстати принтеры используются соответственно зебровские.
У нас zebra zm400 и Zebra GK420t
Проблем с zpl никаких.
...
Рейтинг: 0 / 0
Принтер этикеток, сетевой. Как напечатать.
    #40127432
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы сильно удивился если бы на зебрах были проблемы с ZPL. Впрочем ничего нет невозможного.
Но у меня принтер не зебра, и ZPL ему не родной.

Попробую родной для хонивела "директ принт", надеюсь на родном языке он лучше будет работать.
...
Рейтинг: 0 / 0
Принтер этикеток, сетевой. Как напечатать.
    #40127603
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X-Cite
fraks

Начинаю понимать почему люди не используют ZPL .


Начинаю понимать почему надо использовать zebrовские принтеры а не бюджетные аналоги.

Это многогранный вопрос.
Однако, зебра стоит в 2 раза дороже хонивела. Это тоже аргумент.
Ну и кроме зебры с хонивелом есть еще несколько десятков брендов принтеров этикеток.
...
Рейтинг: 0 / 0
Принтер этикеток, сетевой. Как напечатать.
    #40127684
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если кому интересно, то некоторое обуждение этого вопроса происходит вот там:

https://olegon.ru/showthread.php?t=36483
...
Рейтинг: 0 / 0
15 сообщений из 40, страница 2 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Принтер этикеток, сетевой. Как напечатать.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]