2010-06-01 5 views
4

Я нахожусь на веб-приложении .netc#, где мне нужно распечатать на принтере zebra (TTP2030) текст и штрих-коды. Использование класса RawPrinterHelperfrom here. Я в значительной степени получил команды на принтер, как строку в Юникоде.Отправка необработанных данных на принтер Zebra TTP 2030 и получение его статуса

Таким образом, для печати штрих-кода я:

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> 

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

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

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

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

< 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 меня с сайта зебры

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

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

+4

Как обновление об этом, я отбросил winspool.drv в пользу чтения и записи непосредственно на USB-порт, используя LibUsbDotNet. С winspool я не мог получить никаких данных с принтера, с ReadPrinter или GetPrinterData (скорее всего, я не знаю, как их использовать, я не мог найти ничего полезного в этом вопросе). LibUsbDotNet - отличная библиотека, и я могу легко отправлять команды на принтер (так же, как описано выше), и получать данные от него. Единственная проблема, с которой я столкнулся сейчас, - это преобразование десятичных и шестнадцатеричных значений для команд принтера и преобразование вывода в нечто читаемое. – bfi

ответ

-3

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

+0

-1 этот вопрос не о Java –

+0

«Кто-нибудь знает, как я могу читать данные с принтера? Есть ли совершенно другой подход, который я должен рассматривать для печати (текст и штрих-коды) и получение статуса принтера?» Вы используете webapp, применяете разрозненный подход и свой javascript через java-апплет, очень актуальный. Даун-голосование - это что угодно, не задавайте вопросов, если вы не открыты для других мнений, особенно когда вы спрашиваете, есть ли другой подход, Jzebra/QZprint, буквально делает все, что вы хотите. – mathis1337