【问题标题】:POS receipt print cannot make paper cut using pythonPOS收据打印无法使用python进行剪纸
【发布时间】:2020-04-03 13:26:15
【问题描述】:

问题

我们正在开展一个更大的项目,我们需要打印 POS 收据。我们是 能够通过浏览器进行打印,但问题是我们无法进行剪切或 部分删减。

Win32 API

我们已经尝试过使用 Win32 API 也可以,但是我们找不到一个命令告诉 收据打印机“剪切”。

我们已经用win32尝试了以下:

from win32 import win32api
import win32print
txt = " Hello test ".encode()
p = win32print.OpenPrinter("EPSON TM-T20II Receipt")
job = win32print.StartDocPrinter (p, 1, ("test of raw data", None, "RAW"))
win32print.StartPagePrinter (p)
win32print.WritePrinter (p, txt)
win32print.EndPagePrinter (p)
win32print.ClosePrinter(p)

我们尝试使用这些命令结束打印,但没有成功。

win32print.EndDoc(p)
win32print.EndPagePrinter(p) 
win32print.EndDocPrinter(p11)

其他命令

然后我们发现其他网页说我们应该向打印机发送特定命令,以进行切割。在这种方法中,我们必须以不同的方式初始化打印机。我们为此做了一些尝试。

p = printer.Usb( 0x04b8 , 0x0202 )

这给出了错误NoBackendError,通过安装解决了 libusb-win32-devel-filter-1.2.6.0.exe,然后我们得到了USBNotFoundError

然后我们尝试了

p = Usb( 0x04b8 , 0x0202 , 0 , profile="TM-T20II")

其中说:Unexpected keyword argument 'profile'

我们做了一些努力来解决这个问题,但没有成功。

然后我们写道:

from escpos.connections import getUSBPrinter
p = getUSBPrinter()(idVendor= 0x1504,
                    idProduct= 0x0006,
                    inputEndPoint= 0x82,
                    outputEndPoint= 0x01)

出现错误:Cable isn’t plugged in。尝试安装libusb-win32filter,再次失败。

回到win32 Api,找到了这些链接: C# CUSTOM VKP80iii Paper Ejector/Paper Cut What is the paper cut command? https://mike42.me/blog/what-is-escpos-and-how-do-i-use-it

好的,现在的心态是对 pos 打印发出命令。我们知道 pos 打印的命令不是我们最好的,但我们的想法是文本通过命令发送到打印机:

    1. 试试
      ○ cutTxt = "0001 1100 0101 1000 0000 0101 0000 0001 0100 0101
      0000 0101".encode()
    1. 试试
      ○ cutTxt = bytearray("28 80 5 1 69 5", "utf-8")
    1. 试试
      ○ GS = str( 29 )
      ○ ESC = str( 27 )
      ○ cutTxt = ""
      ○ cutTxt = ESC + "@"
      ○ cutTxt += GS + "V"
  • 后跟
    ○ win32print.WritePrinter (p, cutTxt)
    它只是打印了我们写给打印机的内容

设置

最后但并非最不重要的是,我们在计算机上找到了 pos 打印机,进入设置,看看是否有一些设置我们可以更改以使其切割。你猜对了,我们没有成功。 但是我们尝试打印一些测试打印,并且这样做时,它可以毫无问题地进行部分剪切。

【问题讨论】:

标签: python usb receipt pos posprinter


【解决方案1】:

全切

win32print.WritePrinter(p, b'\x1dV\x00')

用于局部切割

win32print.WritePrinter(p, b'\x1dV\x01')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-16
    • 2022-10-20
    • 2012-07-12
    • 1970-01-01
    • 2016-10-21
    相关资源
    最近更新 更多