【问题标题】:Feed paper on POS Printer C#在 POS 打印机 C# 上进纸
【发布时间】:2008-10-16 04:30:29
【问题描述】:

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

【问题讨论】:

标签: .net printing point-of-sale


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    或者将 Chr(12) 附加到输出文本。

    【讨论】:

      【解决方案3】:

      正如 boost 所说,您需要将换页 / FF / ascii 12 连接到打印机端口。在 C 或 C++ 中,如果您将打印机作为文件打开,这将是

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

      在这些打印机上有时会出现这样的问题,即在写入回车之前,实际上并未处理/刷新输出缓冲区。您也可以手动刷新流。所以你会使用

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

      当输出到串行打印机等设备时,一个容易犯的错误是通信和打印与您的主应用程序异步发生。因此,重要的是不要在完成打印后立即关闭打印机端口,因为这会导致最终输出缓冲区丢失或损坏。

      (对不起,这是 C 而不是 .NET,我是那些 C++ 的老前辈之一,还没有搬过来)

      编辑:在我的帖子上阅读 alexandruls cmets,我错了。听起来好像您可能会收到不需要的换页,因为您设置的页面长度不正确,或者默认设置不正确。检查 ESC C n 爱普生命令组来解决这个问题。

      【讨论】:

      • 请阅读 ESC/POS 的常见问题解答,正确的命令是换行(十六进制 0A,十进制 10)。
      • 我明白你的意思,alexandrul。我认为原始海报要求提供表单提要,而他只是说“提要”。
      【解决方案4】:

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

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

      【讨论】:

      • 在这种情况下,收据中会丢失不止一行,因为在最后一行之前留下 4 个空行是非常不寻常的。
      • 在 Epson EScPOS 文件中有 GS V 命令可以在正确的位置进纸和裁切纸张。
      • 你是对的,但原始问题没有提到收据的最后一行和下一个收据的内容之间有任何空格。此外,TM-U220D 型号没有刀具。
      • 关于 U220D 缺少刀具的说法是正确的——我的错误
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-13
      • 2021-09-27
      • 1970-01-01
      • 2014-12-14
      • 1970-01-01
      • 2014-02-18
      相关资源
      最近更新 更多