You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ZPL控制斑马打印机打印仅输出空白标签的问题求助

ZPL发送斑马打印机仅出空白标签问题修复

问题现象

使用ZPL语言向斑马打印机发送打印任务时,运行代码后打印机仅输出空白标签,无法正常读取ZPL标签变量内容。将生成的ZPL指令导入Labelary工具校验时标签预览完全正常,但实际打印始终输出空白标签,原实现代码如下:

import os
from PIL import Image
import zpl
from zebra import Zebra

lines = []
with open(
        r'C:\Users\matthew.vandruff\Downloads\Hard Drives (version '
        r'1)-b0dd6970-7dfd-4bb7-b04d-fc9c3ff4bc8a-a54c9c76-f7e2-40b1-8ff4-6d7eec1c99bb.csv') as f:
    for line in f.readlines():
        l, name = line.strip().split(',')
        lines.append((l, name))

list = lines
x = 1
while x < len(list):
    HD_Serial, HD_Number = list[x]
    # print(HD_Serial, HD_Number)
    x += 1

l = zpl.Label(100, 60)
height = 0
height += 5
l.origin(30, height)
l.write_barcode(height=70, barcode_type='C', check_digit='Y')
l.write_text(f'{HD_Number}')
l.endorigin()

height += 0
image_width = 12
l.origin((l.width - image_width) / 3, height)
image_height = l.write_graphic(
    Image.open(os.path.join(os.path.dirname(zpl.__file__), 'MTC_Logo.png')),
    image_width)
l.endorigin()

height += image_height + 5
l.origin(15, height)
l.write_barcode(height=70, barcode_type='C', check_digit='Y')
l.write_text(f'{HD_Serial}')
l.endorigin()

print(l.dumpZPL())

z = Zebra()
Q = z.getqueues()
z.setqueue(Q[0])
z.setup()
z.autosense()
z.output(l)

根因分析

  • 核心传参错误:z.output()方法需要传入标准ZPL格式的纯文本字符串,当前代码传入的是zpl.Label实例对象。Labelary校验时使用的是l.dumpZPL()导出的有效指令,实际打印时直接传对象会让打印机接收到无法识别的无效字节,没有可执行的打印内容就只会走纸输出空白标签。
  • 循环逻辑错误:读取CSV的while循环仅做变量赋值覆盖,标签生成和打印逻辑全部在循环外,最终只会处理CSV最后一行的数据,前面所有行的内容都不会被打印。
  • 潜在配置问题:如果修正代码后仍输出空白,先确认打印机已经正确校准标签纸、打印浓度适配当前使用的耗材,同时检查生成的ZPL指令是否包含^XA开头、^XZ结尾的标准任务包裹符,没有缺失指令边界。

修复方案

  1. 将打印输出的入参从Label实例改为l.dumpZPL()生成的纯ZPL字符串
  2. 把标签生成、打印的逻辑移入CSV遍历循环内,逐行生成对应标签发送打印
  3. 首次打印前可手动触发一次打印机标签校准,避免耗材识别异常导致的空白问题

修正后的核心逻辑示例:

z = Zebra()
Q = z.getqueues()
z.setqueue(Q[0])
z.setup()
z.autosense()

# 标签生成逻辑移入循环,逐行处理CSV数据
x = 1
while x < len(lines):
    HD_Serial, HD_Number = lines[x]
    x += 1
    # 初始化单条标签
    label = zpl.Label(100, 60)
    height = 5
    # 原有标签内容绘制逻辑
    label.origin(30, height)
    label.write_barcode(height=70, barcode_type='C', check_digit='Y')
    label.write_text(f'{HD_Number}')
    label.endorigin()

    image_width = 12
    label.origin((label.width - image_width) / 3, height)
    image_height = label.write_graphic(
        Image.open(os.path.join(os.path.dirname(zpl.__file__), 'MTC_Logo.png')),
        image_width)
    label.endorigin()

    height += image_height + 5
    label.origin(15, height)
    label.write_barcode(height=70, barcode_type='C', check_digit='Y')
    label.write_text(f'{HD_Serial}')
    label.endorigin()

    # 传入纯ZPL字符串打印,禁止直接传Label对象
    z.output(label.dumpZPL())

内容的提问来源于stack exchange,提问作者Matthew VanDruff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 14:54:23