我正在尝试打印到TM-T20II热敏打印机,以便打印收据。这是我的代码:
from escpos import printer
from escpos import *
import escpos
from escpos import config
import usb.core
import usb.util
import usb.backend.libusb1
from ctypes import c_void_p, c_int
backend = usb.backend.libusb1.get_backend(find_library=lambda x: "libusb-1.0.dll")
backend.lib.libusb_set_option.argtypes = [c_void_p, c_int]
backend.lib.libusb_set_option(backend.ctx, 1)
p = printer.Usb(0x04b8,0x0e15,0,0x82,0x01, backend=backend)
p.text('test')
我使用的是usbdk后端,如果没有它,我会得到一个"NotImplementedError:此平台上不支持或未实现操作"我这么做是因为我的程序要运行,我需要使用默认的Epson驱动程序。当我运行此代码时,我得到的错误是:
<文件";C: \Users\maxsl\anaconda3\lib\site-packages\usb\core.py",线234,在get_interface_and_endpoint中回归自我_ep_info[endpoint_address]
KeyError:1
在处理上述异常的过程中,发生了另一个异常:
文件"C: \Users\maxsl\anaconda3\lib\site packages\usb\backend\libusb1.py",第604行,在_check中引发USBError(_strerror(ret(,ret,_libusb_errno[ret](
USBError:[Erno None]其他错误>
只有在中添加p.text()
时才会出现此错误。查找打印机和其他一切都没有问题。我还想说write()
在PyUSB模块中工作,但对我来说,不必将程序中的输出转换为令人困惑的ESC/P语言会方便得多。
我正在使用Spyder 4和anaconda(python 3.7(64位、libusb 1.0.22b9、github上最新的pyusb(PyPi版本出现未实现的错误(和python escpos 3.0a8。我相信它们都是64位的。我的System32中有64x文件夹中的libusb1.dll,SysWoW64中有86x文件夹。我还安装了Usbdk。如果你有任何想法需要解决,或者你需要更多的细节,请告诉我。我已经在谷歌上搜索了一个星期了。
打印机的USB模式设置不是有问题吗
TM-T20II打印机具有USB供应商定义类(COM端口(和USB打印机类的模式
VID/PID分别是USB供应商定义的class=0x04b8:0x0202和USB打印机class=0x04B 8:0x0e15。
TM-T20II技术参考指南第89页
您应该可以使用打印机的设置实用程序进行更改
或者,尝试按原样将PID指定更改为0x0202,或者尝试作为COM端口而不是原始USB设备进行通信。
或者可能是高级打印机驱动程序或Windows后台打印程序已经在使用该设备,而其他程序无法使用
如果安装了设备驱动程序,请尝试卸载它。
对于其他和我有同样问题的人,我安装了Epson的TM虚拟端口驱动程序,并将打印机设置为COM端口。然后,我必须进入打印机的设置,手动将端口更改为虚拟端口。然后我把我的代码改成这样:
from escpos import printer
pr = printer.Serial('COM2')
data= '''
hello world
'''
pr.text(data)
pr.close()
它终于成功了!你可以看到我把代码削减了很多。事实证明,我甚至不需要更改后端。奇怪的是,Usb不起作用,但serial起作用。只要它有效!感谢kunif对我的解决方案的指导,我甚至从未考虑过检查串行端口。