Я пытался программно подать бумагу на pos-принтер (Epson TM-U220D). У меня проблема в том, что последняя строка документа не печатается, вместо этого она печатается как первая строка следующего напечатанного документа. Я попробовал POS для .NET, отправив команду «ESC|flF», также попытался отправить необработанную команду esc/pos, используя последовательный порт, но это не сработало. Любые идеи?
Подача бумаги на POS принтер C#
Ответы (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
Если принтер находится на LPT1, откройте DOS и дайте CMD.EXE или COMMAND.COM любой C#-эквивалент этого BASIC-выражения:
"ECHO " & Chr(12) & ">LPT1"
Либо так, либо добавьте Chr(12) к выходному тексту.
Как говорит 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, чтобы решить эту проблему.
Вы режете бумагу? Если вы режете бумагу, положение резака выше печатающей головки. Таким образом, вам необходимо ввести несколько строк, прежде чем будет отправлена команда вырезания. Вы должны просто иметь возможность отформатировать строку, скажем, с 5 переводами строки (LF -> Chr (10)), отправить их, а затем отправить команду вырезания.
В документации Epson EScPOS есть команда GS V, которая будет подавать и обрезать бумагу в нужной точке.