6

我一直在尝试以编程方式将纸张送入 pos 打印机(Epson TM-U220D)。我遇到的问题是文档的最后一行没有打印出来,而是打印为下一个打印文档的第一行。我尝试了 POS for .NET 发送“ESC|flF”命令,还尝试使用串口发送原始 esc/pos 命令,但它不起作用。有任何想法吗?

4

4 回答 4

3

您迟早会需要完整的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

于 2008-10-16T06:24:40.093 回答
0

你在剪纸吗?如果您正在裁切纸张,则裁纸器的位置高于打印头。因此,您需要在发送 cut 命令之前输入多行。您应该能够使用 5 个换行符 (LF -> Chr(10)) 格式化字符串,发送它们,然后发送 cut 命令。

在 Epson EScPOS 文件中,有 GS V 命令可以在正确的位置进纸和裁切纸张。

于 2008-10-17T10:48:36.440 回答
0

如果打印机在 LPT1 上,则向 DOS 发送壳,并提供给 CMD.EXE 或 COMMAND.COM,无论这个 BASIC 表达式的 C# 等价物是什么:

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

要么将 Chr(12) 附加到输出文本。

于 2008-10-16T05:27:11.423 回答
0

正如 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爱普生命令组来克服这个问题。

于 2008-10-16T06:55:31.153 回答