Я просыпаюсь в веб-приложении .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. Кто-нибудь знает, как я могу читать данные с принтера ? Существует ли совершенно иной подход к печати (текст и штрих-коды) и получению статуса принтера?