【发布时间】: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 打印的命令不是我们最好的,但我们的想法是文本通过命令发送到打印机:
- 试试
○ cutTxt = "0001 1100 0101 1000 0000 0101 0000 0001 0100 0101
0000 0101".encode()
- 试试
- 试试
○ cutTxt = bytearray("28 80 5 1 69 5", "utf-8")
- 试试
- 试试
○ GS = str( 29 )
○ ESC = str( 27 )
○ cutTxt = ""
○ cutTxt = ESC + "@"
○ cutTxt += GS + "V"
- 试试
后跟
○ win32print.WritePrinter (p, cutTxt)
它只是打印了我们写给打印机的内容
设置
最后但并非最不重要的是,我们在计算机上找到了 pos 打印机,进入设置,看看是否有一些设置我们可以更改以使其切割。你猜对了,我们没有成功。 但是我们尝试打印一些测试打印,并且这样做时,它可以毫无问题地进行部分剪切。
【问题讨论】:
标签: python usb receipt pos posprinter