Отправка необработанных данных на принтер Zebra TTP 2030 и получение его статуса - PullRequest
4 голосов
/ 01 июня 2010

Я просыпаюсь в веб-приложении .net c#, где мне нужно напечатать на принтере зебры (TTP2030) текст и штрих-коды. Используя RawPrinterHelper класс отсюда . Я получил команды к принтеру в виде строки Unicode.

Итак, чтобы распечатать штрих-код, я делаю:

string enq = Convert.ToChar(5).ToString();
string esc = Convert.ToChar(27).ToString();
string nul = Convert.ToChar(0).ToString();
string rs = Convert.ToChar(30).ToString();
string lf = Convert.ToChar(10).ToString();
string cr = Convert.ToChar(13).ToString();

StringBuilder sb = new StringBuilder();

sb.Append(esc + "BS" + nul + nul + Convert.ToChar(72).ToString() + nul + nul);
sb.Append(nul + nul + Convert.ToChar(64).ToString() + nul + Convert.ToChar(2).ToString() + Convert.ToChar(2).ToString());
sb.Append(esc + "BW" + nul + "733104000099" + nul);
sb.Append(lf + rs);

RawPrinterHelper.SendStringToPrinter(printerName, sb.ToString());

Мнемоника для этой команды

< ESC>BS<0><0>< h 48><0><0>
<00><0>< h 40><0><2><2>
< ESC>BW<00>733104000099<00>
< LF>< RS>

Чего я не знаю, так это того, правильно ли я отправляю такие вещи, как . Из руководства ведущий h, за которым следует пробел, указывает шестнадцатеричное значение. В этом случае это значение представляет X координату (младший байт - я не знаю, что это) штрих-кода.

Если это значение в пикселях (или мм), как преобразовать в шестнадцатеричный код, а затем в Unicode, который я посылаю на принтер?

Кроме того, как преобразовать десятичные значения, которые я должен отправить ?

Например, для печати строки линейки, которую я отправляю:

< ESC>r<0><0><0><0><1><230><0><24><3>

Все являются десятичными значениями, означающими положение, запуск, остановку и т. Д.

Как мне преобразовать эту команду, чтобы я мог отправить ее на принтер ?

Еще одна вещь, которую я не могу заставить работать - это получение данных с принтера. Доступно несколько команд, таких как получение статуса бумаги, серийного номера, прошивки и т. Д. Чтобы попытаться добиться этого первым, я добавил

[DllImport("winspool.drv", CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
    public static extern int ReadPrinter(IntPtr hPrinter, StringBuilder data, int buf, out int pcRead);

в классе RawPrinterHelper. Затем я попытался отправить команду, используя SendFileToPrinter и файл .prn, который я сохранил из небольшого приложения под названием kiosk printer toolbox, которое я получил с сайта zebra

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

Затем вызывается ReadPrinter(hPrinter, sb, 6, out dwWritten);, но sb пусто. Метод возвращает 0. Кто-нибудь знает, как я могу читать данные с принтера ? Существует ли совершенно иной подход к печати (текст и штрих-коды) и получению статуса принтера?

1 Ответ

0 голосов
/ 23 июля 2014

В java есть специальная функция, которая делает это.Я бы пошел проверить QZ-Print.Вы сможете печатать только на принтере, работающем локально на домашней машине веб-приложений, никто другой не сможет.Я бы пошел проверить этот апплет на то, что вы хотите сделать.Это было специально написано для принтеров Zebra.

...