Отправка команды обрезки бумаги на принтер ESC / POS после печати файла .txt

Я создал систему (используя C # и WooCommerce Rest API) для веб-сайта TakeAway для печати билета после того, как пользователь заказывает продукты на веб-сайте.

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

Я отправляю данные с помощью команд CMD

(пример: copy / b D: ... \ order_n.txt \\ Servername \ Printername) - ›распечатывает данные, которые я сохранил в файле .txt

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

Согласно документации GS V 48 и GS V 0 - это команды, которые можно использовать для резки бумаги.

https://reference.epson-biz.com/modules/ref_escpos/index.php?content_id=87#gs_cv.

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

Любая помощь будет оценена по достоинству! если я недостаточно подробно рассказал, пожалуйста, дайте мне знать! Заранее спасибо


person Ivan Bergamo    schedule 27.07.2020    source источник


Ответы (2)


Если вы можете распечатать файл .txt с помощью необработанной команды ESC / POS и текста для печати, скопируйте его на серверное принтерное устройство и попросите сервер отправить его непосредственно на принтер, а затем в конце файла. что бумагу можно разрезать, просто добавив команду ESC / POS для обрезки бумаги.

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

Кстати, 0/48 на справочных страницах, таких как GS V 0 и GS V 48, это 0x00 / 0x30. Если это функция B, она становится 0x41 / 0x42, и после этого указывается номер перевода строки.

Вместо этого, если программа на сервере преобразует файл .txt, который вы отправили на сервер, в изображение страницы, а затем печатает на принтере, вам необходимо включить механизм, который вы написали, чтобы разрезать бумагу. может быть.

person kunif    schedule 27.07.2020
comment
Спасибо за быстрый ответ, куниф, поэтому, если я все понял правильно, чтобы правильно разрезать бумагу, я должен сделать разрыв строки перед ее разрезанием (расстояние между головкой принтера и авторезаком составляет ~ 11 мм) и, следовательно, использовать функцию B вместо Функция A, - person Ivan Bergamo; 27.07.2020
comment
Я добавил несколько пробелов после печати документа, но я все равно попробую. Когда я добавляю команду в файл .txt (позже это Raw File), который я печатаю, он в основном просто печатает команду вместо того, чтобы разрезать бумагу . Я также попытался скопировать второй файл на принтер и установить временную задержку после печати билета, чтобы он не обрезался во время печати, но он делал то же самое, что я добавил команду к файлу следующим образом: sw_order.WriteLine ( GS V 0x30); Обратите внимание, что я впервые использую принтер чеков, спасибо за вашу помощь :) - person Ivan Bergamo; 27.07.2020
comment
Кстати, как вы знаете, обратите внимание, что GS V 0x30 - это 3-байтовые двоичные данные, то есть 0x1D 0x56 0x30. - person kunif; 27.07.2020
comment
он все еще просто печатает команду, а не выполняет ее, я попытаюсь снова использовать класс RawPrinterHelper для отправки данных на принтер. - person Ivan Bergamo; 27.07.2020
comment
Что касается RawPrinterHelper, есть несколько возможностей, но эта статья может быть полезной. Сетевой принтер Rawprinterhelper ASP.NET MVC Например, вместо прямого указания принтера на сервере попробуйте создать запись устройства для удаленный общий принтер на клиентском компьютере и печать на нем. - person kunif; 28.07.2020

Теперь это работает,

Я просто добавил эти строки кода в текстовый файл, который печатаю.

string GS = Convert.ToString((char)29);
string ESC = Convert.ToString((char)27);
string COMMAND = "";
COMMAND = ESC + "@";
COMMAND += GS + "V" + (char)48;

sw.WriteLine(COMMAND);
person Ivan Bergamo    schedule 28.07.2020
comment
Существует небольшая вероятность того, что произойдет что-то плохое, если вы инициализируете его с помощью ESC @. Можно ли использовать CRLF вместо ESC @? - person kunif; 29.07.2020