Подача бумаги на POS-принтер C # - PullRequest
5 голосов
/ 16 октября 2008

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

Ответы [ 4 ]

3 голосов
/ 16 октября 2008

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

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

ASCII: LF

Hex: 0A

Decimal: 10

0 голосов
/ 17 октября 2008

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

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

0 голосов
/ 16 октября 2008

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

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

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

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

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

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

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

0 голосов
/ 16 октября 2008

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

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

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

...