背景:
最近接到了一个新需求,单位想做一个ERP系统,想把打印机一起兼容进去,实现自动化打印工作。主要我是做爬虫的没接触过这些,就到网上搜索了很多先关资料,最终发现,一大堆全都是什么VIP的才能看,才能用里面的压缩包、驱动一大堆需要踩坑的都要VIP就TM很生气!!!!能用的资料少之又少,现在我本人已经全部打通流程并完成了这项工作,故而在此平台公开,开源向大家分享解决方法!也为此呼吁大家,开源精神!
代码可直接复制,然后修改自己的ID,这个是打印TXT文本的,有些打印机不支持中文需要自己上传字体到打印机里面,自己去网上下载一个即可!
import usb.core
import usb.util
import usb.backend.libusb1# 使用 libusb 后端
backend = usb.backend.libusb1.get_backend(find_library=lambda x: None)# Zebra 的供应商 ID 和产品 ID
VENDOR_ID = 0x0a5f # 十六进制
PRODUCT_ID = 0x00e2 # 十六进制# 查找 USB 设备
printer = usb.core.find(idVendor=VENDOR_ID, idProduct=PRODUCT_ID, backend=backend)if printer is None:raise ValueError("Printer not found")# 设置打印机配置
printer.set_configuration()# 获取接口
interface = printer[0][(0, 0)]# 获取接口
usb.util.claim_interface(printer, interface.bInterfaceNumber)def print_text(number, name, specifications, count):"""获取所有的省以及直辖市:return:"""# 合并所有内容并使用换行符分隔combined_text = f"编号:{number}\n名称:{name}\n型号:{specifications}\n数量:{count}"wrapped_lines = []for part in combined_text.split('\n'):wrapped_lines.extend(wrap_text(part))# 创建 ZPL 命令zpl_command = ("^XA" # 开始标签格式"~SD24""^PR2""^CW1,E:SIMSUN.TTF" # 选择字体"^CI28" # 编码格式 UTF8"^LL300" # 标签长度:30mm"^PW500" # 标签宽度:50mm)# 添加每一行内容y_position = 20 # 初始 y 坐标line_height = 40 # 行高for line in wrapped_lines:zpl_command += f"^FO50,{y_position}^A1N,25,25^FD{line}^FS"y_position += line_height # 增加 y 坐标zpl_command += "^XZ" # 结束标签格式print(zpl_command)# 发送 ZPL 命令到打印机printer.write(1, zpl_command.encode('utf-8'))# 释放接口usb.util.release_interface(printer, interface.bInterfaceNumber)
if __name__ == '__main__':data = {"number": "1","name": "测试页测试文本用","specifications": "GB2312+-*……¥#@!()()=\\","count": "1",
}print_text(data['number'], data['name'],data['specifications'],data['count'])
打印条码
import usb.core
import usb.util
import usb.backend.libusb1# 使用 libusb 后端
backend = usb.backend.libusb1.get_backend(find_library=lambda x: None)# Zebra 的供应商 ID 和产品 ID
VENDOR_ID = 0x0a5f # 十六进制
PRODUCT_ID = 0x00e2 # 十六进制# 查找 USB 设备
printer = usb.core.find(idVendor=VENDOR_ID, idProduct=PRODUCT_ID, backend=backend)if printer is None:raise ValueError("Printer not found")# 设置打印机配置
printer.set_configuration()# 获取接口
interface = printer[0][(0, 0)]# 获取接口
usb.util.claim_interface(printer, interface.bInterfaceNumber)def print_bar_code_api(number, name):""" 打印条码 """zpl_command = ("^XA" # 开始标签格式 "^CW1,E:SIMSUN.TTF" # 选择字体"^PW500" # 标签宽度:50mm"^LH15,20" # 左侧和顶部边距(1.5mm, 2.0mm)"^LL300" # 标签长度:30mm"^LS0" # 标签偏移量"^FO50,20^A1N,25,25^FD名称:{}^FS" # 打印名称"^FO20,80^BY3^BCN,50,Y,N^FH\^FD>;{}^FS" # 仅打印条形码,不显示内容 BY3控制条码字体大小,BCN,50控制条形码高度,越大越大).format(name, number) # 这里的 number 是条形码内容zpl_command += "^XZ" # 结束标签格式# 发送 ZPL 命令到打印机printer.write(1, zpl_command.encode('utf-8'))# 释放接口usb.util.release_interface(printer, interface.bInterfaceNumber)if __name__ == '__main__':print_bar_code_api('111','222')
注意:
电脑安装的驱动也是重中之重,有些电脑安装了驱动还是不能用,这个时候就要用到另一个工具,如下图,自己去下载,然后用这个安装驱动即可完成!