news 2026/8/23 13:11:33

用 brother_ql 写 Python 程序:BrotherQLRaster 类 API 参考与自定义标签编程实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
用 brother_ql 写 Python 程序:BrotherQLRaster 类 API 参考与自定义标签编程实战

用 brother_ql 写 Python 程序:BrotherQLRaster 类 API 参考与自定义标签编程实战

【免费下载链接】brother_qlPython package for the raster language protocol of the Brother QL series label printers (QL-500, QL-550, QL-560, QL-570, QL-700, QL-710W, QL-720NW, QL-800, QL-810W, QL-820NWB, QL-1050, QL-1060N and more).项目地址: https://gitcode.com/gh_mirrors/br/brother_ql

brother_ql 是一个 Python 包,用于控制 Brother QL 系列标签打印机(如 QL-500、QL-500、QL-710W、QL-820NWB、QL-1060N 等)。它完整实现了兄弟 QL 打印机的光栅(Raster)打印语言,让程序员绕过系统打印驱动,直接向打印机发送指令文件——这意味着无需任何打印机驱动,甚至在没有官方驱动的树莓派上也能精确控制每一个像素。本文将带你完整梳理核心类BrotherQLRaster的 API,并动手完成自定义标签编程实战。

为什么用 brother_ql 而不是打印驱动?

很多程序在给标签设置页面尺寸和边距时总会出错,而打印条码这类内容对像素精度要求极高。brother_ql 的独特之处在于:

  • 零驱动依赖:不经过操作系统打印系统,直接与打印机对话;
  • 像素级控制:每个点都由你的代码决定,适合高精度条码、Logo 标签;
  • 跨平台:支持 Linux、macOS、Windows(USB 和网络两种方式);
  • 支持彩色:QL-800 系列可在 DK-22251 标签上打印黑红双色。

快速安装与验证

一条命令即可完成 brother_ql 安装:

pip install --upgrade brother_ql

安装后可用命令行工具快速验证环境:

brother_ql info labels # 查看所有可用标签尺寸 brother_ql discover # 查找已连接的标签打印机

如果打印机带有Editor Lite模式,打印前需长按按钮关闭该模式(指示灯熄灭),否则 USB 打印会失败。

BrotherQLRaster 类 API 参考

BrotherQLRaster是整个包的核心,位于 brother_ql/raster.py。它的工作方式很直观:每调用一个add_xxx()方法,就往成员变量data中追加一段光栅指令字节,最终data就是可直接发送给打印机的完整指令文件。

构造与基本属性

from brother_ql import BrotherQLRaster qlr = BrotherQLRaster('QL-710W') # 指定打印机型号
属性说明
data累积生成的指令字节流,最终要发送的就是它
model/model_obj当前型号字符串及对应的 Model 对象
exception_on_warning设为True时,遇到型号不支持的指令直接抛异常而非仅告警
two_color_support当前型号是否支持黑红双色打印
pquality打印质量,True为高质量(默认)

所有支持的型号定义在 brother_ql/models.py 的ALL_MODELS列表中,涵盖 QL-500 到 QL-1115NWB,以及 PT-P750W、PT-P900W。

常用方法一览

方法作用
add_initialize()初始化打印机(ESC @),开启新作业
add_invalidate()清空打印机指令缓冲区
add_switch_mode()切换到光栅动态命令模式
add_media_and_quality(rnumber)设置介质类型、宽度、长度与打印质量
add_raster_data(image, second_image=None)添加图像位图数据,第二张图用于 QL-800 系列的红色层
add_autocut(autocut=False)控制是否自动裁切标签
add_cut_every(n=1)每打印 n 张标签后裁切一次
add_compression(compression=True)启用 PackBits 压缩,减小传输体积
add_margins(dots=0x23)设置打印边距(单位:点)
add_status_information()请求打印机状态信息
add_print(last_page=True)结束打印,发送结束符(^Z)或换页符

另外还有两个实用属性:

  • get_pixel_width():返回该型号可打印的像素宽度(每行字节数 × 8)。调用add_raster_data()前务必保证图像宽度与之完全一致,否则会抛出BrotherQLRasterError
  • mtype/mwidth/mlength:设置介质类型、宽度和长度,配合add_media_and_quality()使用。

自定义标签编程实战:从零生成一个标签

下面用最少的代码演示完整流程——创建一个 62mm 宽、10 像素高的黑白标签并保存为指令文件:

from PIL import Image from brother_ql import BrotherQLRaster qlr = BrotherQLRaster('QL-710W') qlr.exception_on_warning = True # 严格模式,尽早暴露问题 # 准备图像:宽度必须是 get_pixel_width()(62mm 约 696 像素) img = Image.new('1', (qlr.get_pixel_width(), 10), color=0) qlr.add_initialize() # 初始化 qlr.add_invalidate() # 清缓冲 qlr.add_media_and_quality(0x000000D2) qlr.add_compression(True) # 启用压缩 qlr.add_raster_data(img) # 写入位图 qlr.add_print(last_page=True) # 结束 open('label.bql', 'wb').write(qlr.data)

保存后的label.bql文件可以直接通过命令行发送打印:

brother_ql send -m QL-710W -p tcp://192.168.1.21 label.bql

💡 实战技巧:如果不想手写每个add_xxx()调用,可以改用高层函数create_label()(见 brother_ql/brother_ql_create.py),它会自动处理模式切换、边距、裁切、旋转、阈值二值化等繁琐细节:

from brother_ql import create_label create_label(qlr, 'my_image.png', '62', threshold=70, cut=True)

图像到标签的转换逻辑(缩放、二值化、抖动、红层分离)全部封装在 brother_ql/conversion.py 和 brother_ql/image_trafos.py 中。

指令如何到达打印机:三大后端

生成的data字节流需要经传输后端送达打印机,brother_ql/backends/ 提供三种选择:

后端连接方式适用系统示例标识符
networkTCP 9100 端口全平台(WiFi/网口机型)tcp://192.168.1.21:9100
pyusbUSB全平台usb://0x04f9:0x2015/...
linux_kernelUSB仅 Linux/dev/usb/lp0

网络机型推荐直接用tcp://IP地址连接,最省事;USB 机型在 Windows 上需先安装 libusb-win32 设备过滤器。型号与标签的对应关系可查 brother_ql/labels.py 中的LabelsManager,包括连续式(12/29/38/50/54/62/102mm 等)和预裁切式(如 23x23、62x100、圆形 d24)两大类。

常见问题速查

  • BrotherQLUnknownModel:型号拼写错误,可用brother_ql info models查看支持的型号;
  • BrotherQLRasterError: Wrong pixel width:图像宽度与型号不符,用get_pixel_width()校准尺寸;
  • BrotherQLUnsupportedCmd:指令不受当前型号支持(如对 QL-500 启用压缩),可参考各型号的compressioncutting等能力标志。

所有异常定义集中在 brother_ql/exceptions.py,均以BrotherQLError为基类,方便统一捕获。

总结

掌握BrotherQLRaster就掌握了 brother_ql 的全部精髓:追加指令 → 读取data→ 选择后端发送。从简单的一行create_label()调用,到逐像素定制双色条码标签,这个 API 都能满足——这正是它在树莓派、CI 流水线、仓储系统等场景中广受欢迎的原因。

【免费下载链接】brother_qlPython package for the raster language protocol of the Brother QL series label printers (QL-500, QL-550, QL-560, QL-570, QL-700, QL-710W, QL-720NW, QL-800, QL-810W, QL-820NWB, QL-1050, QL-1060N and more).项目地址: https://gitcode.com/gh_mirrors/br/brother_ql

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/23 13:10:47

数学建模入门指南:从思维转变到实战竞赛的完整路径

1. 从“解题”到“建模”:思维模式的根本性转变很多人一听到“数学建模”,第一反应就是“数学竞赛”或者“解一道很难的数学题”。我刚开始接触时也是这么想的,结果一头扎进各种高深的算法和模型里,却发现连题目都读不懂&#xff…

作者头像 李华
网站建设 2026/8/23 13:08:52

策略性智能体下的离线策略评估:局部披露机制的设计与实践

1. 项目概述:当智能体学会“钻空子”,我们该如何评估策略?在强化学习和在线决策系统的实际部署中,我们常常面临一个经典难题:如何在不实际运行新策略的情况下,准确评估它的表现?这就是“离线策略…

作者头像 李华
网站建设 2026/8/23 13:00:36

RAM评分:量化模型下载体验,提升AI开发效率

在模型部署和微调的工作流中,我们常常会遇到一个看似简单却影响深远的环节:模型下载。无论是从 Hugging Face Hub 拉取最新的 Llama 3,还是从 ModelScope 获取 Stable Diffusion 的 checkpoint,下载速度慢、中断率高、占用大量本地…

作者头像 李华