Как отправить шрифт через Bluetooth на принтер Zebra

Я должен отправить файл шрифта на свой принтер Zebra RW420 через Bluetooth. Я использую Zebra Windows Mobile SDK, но не могу найти способ отправить и сохранить его на принтере. Я мог бы сделать это вручную с помощью Label Vista, но это должно быть сделано на более чем 200 принтерах.

У кого-нибудь есть какие-либо предложения или вы знаете, какой метод из SDK я мог бы использовать?

Заранее спасибо.


person Wesley    schedule 22.06.2012    source источник


Ответы (2)


CISDF - правильный ответ, вероятно, неверное значение контрольной суммы, которое вы вычисляете. Я установил анализатор портов на свой RW420, подключенный к USB-порту, и обнаружил, что это работает. На самом деле я отправил несколько изображений PCX на принтер, а затем использовал их в этикетке.

! CISDF
<filename>
<size>
<cksum>
<data>

В конце первых четырех строк есть CRLF. Использование 0000 в качестве контрольной суммы приводит к тому, что принтер игнорирует любую проверку контрольной суммы (я нашел несколько действительно неясных ссылок на это в некоторых руководствах по ZPL, попробовал, и это сработало). ‹filename› — это имя файла 8.3, поскольку оно будет храниться в файловой системе принтера, а ‹size› — это размер файла, длина которого составляет 8 символов и который отформатирован как шестнадцатеричное число. ‹cksum› — это дополнение до двух суммы байтов данных в виде контрольной суммы. ‹данные› — это, конечно же, содержимое файла, который будет храниться на принтере.

Вот фактический код C#, который я использовал для отправки образцов изображений на принтер:

// calculate the checksum for the file

// get the sum of all the bytes in the data stream
UInt16 sum = 0;
for (int i = 0; i < Properties.Resources.cmlogo.Length; i++)
{
  sum += Convert.ToUInt16(Properties.Resources.cmlogo[ i]);
}

// compute the two's complement of the checksum
sum = (Uint16)~sum;
sum += 1;

// create a new printer
MP2Bluetooth bt = new MP2Bluetooth();

// connect to the printer
bt.ConnectPrinter("<MAC ADDRESS>", "<PIN>");

// write the header and data to the printer
bt.Write("! CISDF\r\n");
bt.Write("cmlogo.pcx\r\n");
bt.Write(String.Format("{0:X8}\r\n", Properties.Resources.cmlogo.Length));
bt.Write(String.Format("{0:X4}\r\n", sum));  // checksum, 0000 => ignore checksum
bt.Write(Properties.Resources.cmlogo);

// gracefully close our connection and disconnect
bt.Close();
bt.DisconnectPrinter();

MP2Bluetooth — это класс, который мы используем внутри для абстрагирования BT-соединений и коммуникаций — я уверен, что у вас тоже есть свой собственный!

person Mark Usrey    schedule 30.10.2012
comment
Работает отлично. Моя ошибка заключалась в записи на принтер, я пытался объединить заголовок с данными шрифта, а не писать построчно. Спасибо, что поделились своими знаниями. - person Wesley; 13.12.2012

Вы можете использовать SDK для отправки любых данных. Шрифт Zebra — это просто файл шрифта с заголовком. Таким образом, если вы захватите выходной файл cpf из Label Vista, вы сможете отправить этот файл из SDK. Просто создайте соединение и вызовите write(byte[]) с содержимым файла

person Ovi Tisler    schedule 25.06.2012
comment
Я пытался заставить его работать, но безуспешно, после отправки данных на принтер принтер автоматически подает, и ничего не происходит. Согласно технической поддержке Zebra SDK, шрифт .CPF предшествует заголовку перед данными. ! CISDF baltic.cpf 00002077 40FF Я использую BinaryReader для преобразования файла в двоичный, CpclCrcHeader.getWChecksum(myBinary) для получения контрольной суммы. Затем я конвертирую заголовок в двоичный файл и объединяюсь с двоичным файлом из файла для отправки на принтер через SerialPrinterConnection, используя метод записи (байт []). Есть ли у вас какие-либо предложения в том, что может быть не так? - person Wesley; 08.08.2012
comment
Я не знаю, нужна ли вам контрольная сумма. В вашем файле cpf есть заголовок CISBF? Ваш заголовок CISDF имеет правильный размер? Я бы рекомендовал использовать LabelVista для создания и отправки шрифта один раз, а затем, возможно, даже прослушивать пакеты, чтобы увидеть, что происходит. Я только что сделал это очень быстро и вижу аналогичный заголовок CISDF, который вы указали, а затем CISBF, некоторую информацию о шрифте, за которой следует -END-FONT-INFO, затем весь двоичный мусор, затем в конце ENDCISTD - person Ovi Tisler; 08.08.2012