2013-06-06 2 views
1

Я пытаюсь отправить команды непосредственно на принтер Zebra TLP2844. Я последовал за высказанное here и мой окончательный код пришел к следующим:Отправка команд непосредственно в Zebra EPL

var 
    cm: String; 
    p: TPrinter; 
    i: integer; 
begin 
    p := Printer; 
    p.BeginDoc;  
    for i := 0 to memo1.Lines.Count-2 do 
    begin 
    cm := memo1.Lines[i]; 
    if Escape(p.Canvas.Handle, 
       PASSTHROUGH, 
       Length(cm), 
       PAnsiChar(cm), 
       nil) = 0 then 
     ShowMessage('Command error: ' + IntToStr(GetLastError)); 
    end; 
    p.EndDoc; 
end; 

Содержание Memo1 является (первая строка пуста), как определил here:

N 
q609 
Q203,26 
B26,26,0,UA0,2,2,152,B,"603679025109" 
A253,26,0,3,1,1,N,"SKU 6205518 MFG 6354" 
A253,56,0,3,1,1,N,"2XIST TROPICAL BEACH" 
A253,86,0,3,1,1,N,"STRIPE SQUARE CUT TRUNK" 
A253,116,0,3,1,1,N,"BRICK" 
A253,146,0,3,1,1,N,"X-LARGE" 
P1,1 

Команды не кажется, правильно прин ты или интерпретированы принтером. Я проверил, что принтер находится в режиме страницы (EPL2), с предлагаемым кодом я могу открыть дескриптор принтера. Но ничего не печатается, подаётся только новая строка меток.

Я попытался полностью изменить команды на что-то явно неправильное, и поведение такое же.

Что еще я должен искать для печати?

ответ

1

Большинство принтеров, которые принимают необработанные команды, требуют префикс (начальную последовательность символов) и суффикс (конечная последовательность символов), обертывающий каждую команду. Я не знаю, что префикс и суффикс для Zebra, но документация должна вам сказать.

Просто добавьте пару констант для определения префикса и суффикса и добавьте их в свою команду перед отправкой.

Другой проблемой может быть то, что вы читаете содержимое своих команд из TMemo, который в Delphi 2009 и выше содержит строки Unicode. Затем вы отбрасываете их до PAnsiChar, что может привести к усечению содержимого. Сделайте переход заблаговременно, указав cm как AnsiString, а затем назначив ему сначала (как и вы), прежде чем приступать к методу Escape. Я сделал это в своем коде, чтобы проиллюстрировать это.

var 
    cm: AnsiString; 
    p: TPrinter; 
    i: integer; 
const 
    ZPrefix = AnsiString('$(');  // Replace values for each of these with what 
    ZSuffix = AnsiString(')$');  // your documentation says you should use 
begin 
    p := Printer; 
    p.BeginDoc;  
    for i := 0 to memo1.Lines.Count-2 do 
    begin 
    cm := ZPrefix + memo1.Lines[i] + ZSuffix; 
    if Escape(p.Canvas.Handle, 
       PASSTHROUGH, 
       Length(cm), 
       PAnsiChar(cm), 
       nil) = 0 then 
     ShowMessage('Command error: ' + IntToStr(GetLastError)); 
    end; 
    p.EndDoc; 
end; 
0

я программа в PHP, которая, как C

Я могу отправить вещи на принтер просто отлично

мой код выглядит ваш код Единственное, я не знаю, как ваш язык программирования обрабатывает символ новой строки в PHP это \ п в конце каждой строки

, если новая строка не существует задание на печать не будет печатать

и если "не себе нт не будет печатать

вашего EPL выглядит отлично и должен напечатать

есть где-то на зебру сайте загрузка, где вы можете посылать команды на принтер, который подключен к компьютеру с помощью кабеля USB

думаю, что это называется Zebra Setup Utilities