问题
我们正在做一个更大的项目,我们需要打印 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-win32
过滤器,再次没有运气。
回到win32 Api,找到这些链接: C# CUSTOM VKP80iii Paper Ejector/Paper Cut 什么是剪纸命令? 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 打印机,进入设置,看看是否有一些设置我们可以更改以使其切割。你猜对了,我们没有成功。但是我们尝试打印一些测试打印,并且这样做时,它可以毫无问题地进行部分剪切。