我一直在尝试以编程方式将纸张送入 pos 打印机(Epson TM-U220D)。我遇到的问题是文档的最后一行没有打印出来,而是打印为下一个打印文档的第一行。我尝试了 POS for .NET 发送“ESC|flF”命令,还尝试使用串口发送原始 esc/pos 命令,但它不起作用。有任何想法吗?
4 回答
您迟早会需要完整的ESC/POS Application Programming Guide
. 几年前,我确实从我的 EPSON 经销商那里得到了一份副本。与此同时,我通过谷歌找到了一个链接到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
你在剪纸吗?如果您正在裁切纸张,则裁纸器的位置高于打印头。因此,您需要在发送 cut 命令之前输入多行。您应该能够使用 5 个换行符 (LF -> Chr(10)) 格式化字符串,发送它们,然后发送 cut 命令。
在 Epson EScPOS 文件中,有 GS V 命令可以在正确的位置进纸和裁切纸张。
如果打印机在 LPT1 上,则向 DOS 发送壳,并提供给 CMD.EXE 或 COMMAND.COM,无论这个 BASIC 表达式的 C# 等价物是什么:
"ECHO " & Chr(12) & ">LPT1"
要么将 Chr(12) 附加到输出文本。
正如 boost 所说,您需要将换页 / FF / ascii 12 连接到打印机端口。在 C 或 C++ 中,如果您将打印机作为文件打开,这将是
fprintf(printerfile,"%c",12);
这些打印机有时会出现问题,即在写入回车之前,实际上并未处理/刷新输出缓冲区。您也可以手动刷新流。所以你会使用
fprintf(printerfile,"%c%c",12,13);
fflush(printerfile);
当输出到串行打印机等设备时,一个容易犯的错误是通信和打印与您的主应用程序异步发生。因此,重要的是不要在完成打印后立即关闭打印机端口,因为这会导致最终输出缓冲区的丢失或损坏。
(对不起,这是 C 而不是 .NET,我是那些没有搬过来的 C++ 老前辈之一)
编辑:阅读我的帖子上的 alexandruls 评论,我错了。听起来好像您可能会收到不需要的换页,因为您设置的页面长度不正确,或者默认设置不正确。检查ESC C n爱普生命令组来克服这个问题。