2

我正在使用 Epson FX2175 点阵打印机和 win32print python 库向打印机发出命令。打印完成后,纸张不会移动到下一个撕纸位置。

我尝试在最后发送 FF(换页)命令,但它使纸张前进太多,而不是像我的纸张尺寸(即 15.4 厘米)那样移动。纸张大小已在打印机首选项 > 纸张大小 > 用户定义中配置。

下面是我的python代码

import os, sys
import win32print

def formatData(args):
  cnt = 1;
  decimal_form_feed = 12
  decimal_line_feed = 10
  decimal_carriage_return = 13

  byteArr = bytearray()

  # Reverse feed
  # byteArr.extend(bytes("\u001bj2", "utf-8"))

  # byteArr.extend(bytes("\u001b$0", "utf-8"))

  # ESC J Advance print position vertically
  # param n where 0 <= n <=255
  # Advances vertical position n/216 or n/180 inches

  # Set page size in terms of line numbers
  # byteArr.extend(bytes("\u001bC10", "utf-8"))
  print(len(args))
  while(cnt < len(args)):
    if args[cnt]=="R":
      temp = bytes (args[cnt+1], "utf-8")
      byteArr.extend(temp)
      #print(byteArr)
    elif args[cnt]=="RB":
      temp = bytes ("\u001bE"+args[cnt+1]+"\u001bF", "utf-8")
      byteArr.extend(temp);
      #print(byteArr)
    elif args[cnt]=="D":
      temp = bytes ("\u001b\u000e"+args[cnt+1]+"\u001b\u0012", "utf-8")
      byteArr.extend(temp);
    elif args[cnt]=="DB":
      temp = bytes ("\u001b\u000e"+args[cnt+1]+"\u001b\u0012", "utf-8")
      byteArr.extend(temp);
    elif args[cnt]=="newline":
      temp = bytes ("\n", "utf-8")
      byteArr.extend(temp);
      cnt = cnt+1
      continue
    elif args[cnt]=="lf":
      mCnt = 0
      while mCnt < int(args[cnt+1]):
        mCnt = mCnt+1
        byteArr.extend(bytes("\n", "utf-8"))
        #byteArr.extend(bytes("\u001bJ1", "utf-8"))
    elif args[cnt]=="rf":
      mCnt = 0
      while mCnt < int(args[cnt+1]):
        byteArr.extend(bytes("\u001bj2", "utf-8"))
        mCnt = mCnt+1
      
    cnt = cnt+2;
  byteArr.extend(decimal_carriage_return.to_bytes(2, 'big'))
  byteArr.extend(decimal_form_feed .to_bytes(2, 'big'))
  #byteArr.extend(decimal_carriage_return.to_bytes(2, 'big'))
  #byteArr.extend(decimal_line_feed.to_bytes(2, 'big'))
  print(byteArr)
  mBytes = bytes(byteArr)
  return mBytes
    

printer_name = win32print.GetDefaultPrinter ()

raw_data = formatData(sys.argv);
hPrinter = win32print.OpenPrinter (printer_name)
try:
  hJob = win32print.StartDocPrinter (hPrinter, 1, (raw_data.decode("utf-8"), None, "RAW"))
  try:
    win32print.StartPagePrinter (hPrinter)
    win32print.WritePrinter (hPrinter, raw_data)
    win32print.EndPagePrinter (hPrinter)
  finally:
    win32print.EndDocPrinter (hPrinter)
finally:
  win32print.ClosePrinter (hPrinter)

我使用本手册作为参考Epson EscP 手册参考

非常感谢任何帮助,因为我为此苦苦挣扎了将近 5 天。

4

1 回答 1

0

对于面临同样挑战的人

我无法找到如何以编程方式执行此操作的答案,但通过更改打印机中的默认设置,我能够完成我的工作。在打印机中进行了以下更改:

  1. 自动撕纸模式开启。
  2. 页面大小设置为 6 英寸。

可以使用以下命令设置页面大小,但它有些不起作用。只是把它放在它可能对其他人有用:

ESC C NUL n

注意:我通过打印机软件进行了所有更改,但这也不起作用。

于 2022-03-02T22:43:42.867 回答