Распечатайте и откройте ящик с помощью Epson T20 (термопринтер)

Я много искал и нашел здесь примеры с Posexplorer, но мой принтер USB, и я читал, что PosExplorer для параллельного. Я не знаю, как печатать на принтере и как отправить код на принтер, чтобы открыть ящик.

Я использую для отправки escape-последовательности на принтер следующий код:

string ESC = Convert.ToString((char)27);
string logo=Convert.ToString(ESC+"|tL");
_oposPrinter.PrintNormal(PrinterStation.Receipt, logo);
_oposPrinter.PrintNormal(PrinterStation.Receipt, "Print example\n");
_oposPrinter.PrintNormal(PrinterStation.Receipt, Convert.ToString((char)27 + "|#fP"));

При отладке и доходит до строк:

_oposPrinter.PrintNormal(PrinterStation.Receipt, logo);

or

_oposPrinter.PrintNormal(PrinterStation.Receipt, Convert.ToString((char)27 + "|#fP"));

Принтер ничего не печатает.


person uoah    schedule 15.12.2011    source источник
comment
Установите принтер в качестве принтера по умолчанию (драйвер только для текста) и печатайте, как любой другой документ. Чтобы открыть ящик, вам нужно иметь доступ к COM-порту и знать, какой сигнал для его отправки.   -  person David    schedule 15.12.2011
comment
Спасибо, я напечатал таким образом, но мне нужно открыть ящик. Спасибо, в любом случае.   -  person uoah    schedule 19.12.2011


Ответы (3)


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

Этот код предполагает, что вы настроили принтер с помощью утилиты SetupPos.exe, предоставленной Epson. Я не помню, где я его взял, но EpsonExpert.com может быть хорошим местом для поиска. Затем просто убедитесь, что вы передаете правильный LDN (вы настраиваете его в программном обеспечении setuppos).

    PosExplorer explorer = null;
    DeviceInfo _device;
    PosPrinter _oposPrinter;
string LDN;

    explorer = new PosExplorer();
    _device = explorer.GetDevice(DeviceType.PosPrinter, LDN);
    _oposPrinter = (PosPrinter)explorer.CreateInstance(_device);
    _oposPrinter.Open();
    _oposPrinter.Claim(10000);
    _oposPrinter.DeviceEnabled = true;
 // normal print
    _oposPrinter.PrintNormal(PrinterStation.Receipt, yourprintdata); 
// pulse the cash drawer pin  pulseLength-> 1 = 100ms, 2 = 200ms, pin-> 0 = pin2, 1 = pin5
    _oposPrinter.PrintNormal(PrinterStation.Receipt, (char)16 + (char)20 + (char)1 + (char)pin + (char)pulseLength); 

// cut the paper
    _oposPrinter.PrintNormal(PrinterStation.Receipt, (char)29 + (char)86 + (char)66)

// print stored bitmap
    _oposPrinter.PrintNormal(PrinterStation.Receipt, (char)29 + (char)47 + (char)0)
person Malcolm O'Hare    schedule 15.12.2011
comment
Большое спасибо, я попробую как можно скорее (не каждый день у меня есть доступ к принтеру и ящику). Я пытался использовать библиотеку PosExplorer, но визуально не распознал. Я думаю, что утилита SetupPos.exe поставляется с установочным компакт-диском принтера. Спасибо - person uoah; 19.12.2011
comment
Не забудьте добавить ссылку на Microsoft.PointOfService.dll в свой проект. Возможно, поэтому VS не распознал его. - person Malcolm O'Hare; 19.12.2011
comment
Да, я нашел эту ссылку в некоторых примерах, но мой VS не распознал ее. Возможно, мне нужно сначала установить SetupPos.exe. Сегодня попробую. Спасибо :) - person uoah; 20.12.2011
comment
Теперь я могу печатать, но я пытаюсь отправить коды для резки бумаги и печати логотипа (хранится в принтере с программным обеспечением epson), но принтер ничего не делает. Любое предложение? - person uoah; 27.12.2011
comment
@uoah, можете ли вы опубликовать, что вы делаете, чтобы отправить команды вырезания бумаги и печати логотипа? Тогда я вижу, что не так. - person Malcolm O'Hare; 28.12.2011
comment
Я отредактировал код, который использую для отправки кодов на принтер. Я нашел эти коды ((char)27 + |#fP) и (char)27 + |tL) в документации к принтерам TM, которую я скачал с EpsonExpert для принтеров TM. - person uoah; 28.12.2011
comment
google для ESC-POS-Programming-Guide. Вы обнаружите, что в нем есть вся необходимая информация. - person Malcolm O'Hare; 28.12.2011
comment
Хорошо, я попробую, кстати, код, который вы отредактировали: _oposPrinter.PrintNormal((char)29 + (char)47 + (char)0) у меня не работает, потому что _oposPrinter.PrintNormal требует PrinterStation. Квитанция и строка. Спасибо, вы мне очень помогаете. - person uoah; 28.12.2011
comment
Спасибо, но для метода PrintNormal требуется (PrinterStation,string). Я попытался Convert.ToString((char)29 + (char)47 + (char)0); но это не работает. Сейчас попробую поискать ESC-POS-Programming-Guide. - person uoah; 28.12.2011
comment
Поискав некоторую информацию, я нашел это: \x1B + m; для вырезания бумаги и \x1B + d + \x09; для подачи бумаги. Обе строки работают нормально, теперь я могу подавать и резать бумагу, проблема в том, что я не понимаю эти строки, и мне нужно распечатать сохраненный логотип, и если я понимаю строки, я могу распечатать логотип. - person uoah; 28.12.2011
comment
Я использую ваш код на T20 Epson, но когда я запускаю его, он не печатается на принтере, вместо этого отображается новая форма: Microsoft PostPrinter Simulator, что я делаю неправильно? - person KADEM Mohammed; 15.03.2014

Если вы ищете очень легкое решение без установки стороннего программного обеспечения, такого как Microsoft POS для .NET.

Вам необходимо включить функцию RawPrinterHelper (можно скачать с сайта https://support.microsoft.com/en-us/help/322091/how-to-send-raw-данные-на-принтер-с-использованием-visual-c-.net)

Затем отправьте код конкретного денежного ящика, чтобы открыть его, на принтер, к которому он подключен.

Например, на Epson TM88 эта функция откроет его.

SendStringToPrinter(printerName, System.Text.ASCIIEncoding.ASCII.GetString(new byte[] { 27, 112, 48, 55, 121 }));

Для других принтеров могут потребоваться другие последовательности кодов.

Citizen
27,112,0,50,250
Epson 
27,112,48,55,121
27,112,0,25,250
27,112,48,25,250
IBM
7

... (см. больше кода, включая автоматический резак или второй ящик, на http://keyhut.com/popopen.htm )

person Zyo    schedule 24.04.2012
comment
Большое спасибо за ваш ответ, теперь я печатаю с помощью Microsoft POS для .net, но это хорошая альтернатива. - person uoah; 25.04.2012
comment
Спасибо, это действительно хорошее решение, намного лучше, чем установка драйверов POS.NET. - person RobJohnson; 06.06.2014

Для тех, кто пытается сделать это с помощью VB.NET и POS.NET, отправьте это на принтер:

m_printer = the instance you created for the PosExplorer
m_printer.PrintNormal(PrinterStation.Receipt, System.Text.ASCIIEncoding.ASCII.GetString(New Byte() {27, 112, 48, 55, 121}))

Это сработало для моего Epson TM-T20.

Странно то, что он открывается не при первой отправке, а при каждой последующей.

person user2337667    schedule 08.05.2013