Подача бумаги на POS принтер C#

Я пытался программно подать бумагу на pos-принтер (Epson TM-U220D). У меня проблема в том, что последняя строка документа не печатается, вместо этого она печатается как первая строка следующего напечатанного документа. Я попробовал POS для .NET, отправив команду «ESC|flF», также попытался отправить необработанную команду esc/pos, используя последовательный порт, но это не сработало. Любые идеи?


person evargas    schedule 16.10.2008    source источник
comment
Я тоже, но теперь я понимаю, что он имеет в виду пункт продажи.   -  person Mark Allen    schedule 26.10.2008
comment
Вы можете скачать спецификацию серии TM-T88III, в которой перечислены некоторые команды ESC/POS. jarltech.com/ger_new/new/support/cd/TM- T88III_spc_e.pdf   -  person stukelly    schedule 28.04.2009


Ответы (4)


Вам рано или поздно понадобится полный ESC/POS Application Programming Guide. Я получил копию от моего дилера EPSON несколько лет назад. Тем временем я нашел в Google ссылку на FAQ for ESC/POS здесь: https://web.archive.org/web/20111229102746/http://postechgroup.com/updata/support/drivers/EPSON/FAQ_ESCPOS.pdf

В вашем случае команда управления LF печатает данные в буфере печати и подает одну строку на основе текущего межстрочного интервала.

ASCII: LF

Hex: 0A

Decimal: 10

person alexandrul    schedule 16.10.2008

Если принтер находится на LPT1, откройте DOS и дайте CMD.EXE или COMMAND.COM любой C#-эквивалент этого BASIC-выражения:

"ECHO " & Chr(12) & ">LPT1"

Либо так, либо добавьте Chr(12) к выходному тексту.

person bugmagnet    schedule 16.10.2008

Как говорит boost, вам нужно получить form-feed /FF/ascii 12 на порт принтера. В C или C++, если вы откроете свой принтер как файл, это будет

fprintf(printerfile,"%c",12);

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

fprintf(printerfile,"%c%c",12,13);
fflush(printerfile);

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

(Извините, это C, а не .NET, я один из тех старожилов C++, которые не перешли)

Редактировать: Читая комментарии alexandruls к моему посту, я понял это неправильно. Звучит так, как будто вы получаете нежелательную подачу формы, потому что вы неправильно установили длину страницы или значение по умолчанию неверно. Проверьте группу команд Epson ESC C n, чтобы решить эту проблему.

person SmacL    schedule 16.10.2008
comment
Пожалуйста, прочтите FAQ по ESC/POS, правильная команда — перевод строки (шестнадцатеричный 0A, десятичный 10). - person alexandrul; 16.10.2008
comment
Я понимаю твою мысль, Александр. Я понял, что оригинальный постер просил подачу формы, тогда как он просто говорит, подача. - person bugmagnet; 16.10.2008

Вы режете бумагу? Если вы режете бумагу, положение резака выше печатающей головки. Таким образом, вам необходимо ввести несколько строк, прежде чем будет отправлена ​​команда вырезания. Вы должны просто иметь возможность отформатировать строку, скажем, с 5 переводами строки (LF -> Chr (10)), отправить их, а затем отправить команду вырезания.

В документации Epson EScPOS есть команда GS V, которая будет подавать и обрезать бумагу в нужной точке.

person JDibble    schedule 17.10.2008
comment
В этом случае в квитанции будет отсутствовать более одной строки, поскольку очень необычно оставлять 4 пустые строки перед последней строкой. - person alexandrul; 17.10.2008
comment
В документации Epson EScPOS есть команда GS V, которая будет подавать и обрезать бумагу в нужной точке. - person JDibble; 17.10.2008
comment
Вы правы, но в исходном вопросе не было пробела между последней строкой квитанции и содержимым следующей квитанции. Также модель TM-U220D не имеет резака. - person alexandrul; 17.10.2008
comment
Вы правы насчет отсутствия резака на U220D - моя ошибка - person JDibble; 20.10.2008