Python调用BarTender SDK实现数据源修改与打印操作详解
本文介绍如何使用Python调用Seagull BarTender SDK实现标签打印功能。通过封装BarTender的.NET程序集,我们可以在Python中实现完整的数据源修改管理和打印控制功能。
一、核心功能架构
系统分为两层:
引擎层(BtEngine.py):封装BarTender API
应用层(Main.py):提供GUI界面和业务流程
二、功能流程图

三、关键技术实现
BarTender引擎封装 (BtEngine.py)
1. 初始化与资源管理
class BtEngine: def __init__(self): # 启动BarTender引擎 self.btEngine = Engine(True) self.callbacks = [] self.btwfile_using = None self.btFormat = None # 绑定打印事件 self.btEngine.JobCancelled += EventHandler(self.btEngine_JobCancelledSlot) self.btEngine.JobErrorOccurred += EventHandler(self.btEngine_JobErrorOccurredSlot) # ... 其他事件绑定
2. 文档管理
def open_document(self, file_path):
"""打开BTW标签文件"""
try:
if self.btFormat:
self.btFormat.Close(SaveOptions.SaveChanges)
self.btFormat = self.btEngine.Documents.Open(str(file_path))
self.btwfile_using = file_path
return True
except Exception as ex:
print(f"加载模板文件错误: {ex}")
return False3. 数据源操作
def get_data_dict(self, key=None):
"""获取数据源字典"""
data_dict = {}
if self.btFormat:
if key:
return self.btFormat.SubStrings[key].Value
for substring in self.btFormat.SubStrings:
data_dict[substring.Name] = substring.Value
return data_dict
def set_data_dict(self, data_dict):
"""设置数据源值"""
if len(data_dict) and self.btFormat:
for key, value in data_dict.items():
for substring in self.btFormat.SubStrings:
if substring.Name == key:
self.btFormat.SubStrings.SetSubString(key, value)4. 打印控制
def my_print(self, printer, timeout=2000):
"""执行打印任务"""
if not self.btEngine.IsAlive:
self.btEngine.Start()
try:
self.btFormat.PrintSetup.PrinterName = printer
nResult = self.btFormat.Print("printjob", timeout)
return nResult # 0=成功,1=超时,2=失败
except Exception as ex:
print(ex)
return 2应用层 (Main.py)
1.界面布局
- 打印机设置区域: 打印机选择、刷新功能
- 模板设置区域: BTW文件选择、刷新功能
- 数据源设置区域: 数据源数量显示、内容修改
- 操作按钮区域: 加载、打印、清空功能
- 系统日志区域: 实时状态显示、滚动日志
2. 事件处理
def bartender_event_slot(self, msg):
"""BarTender事件回调处理"""
current_time = datetime.datetime.now().strftime('%H:%M:%S')
self.my_log_print(msg)
# 更新打印状态
if "任务已加入队列" in msg or "状态:Creating" in msg:
self.print_status = 'queued'
elif "任务发送" in msg or "状态:Printing" in msg:
self.print_status = 'printing'
elif "任务完成" in msg or "成功" in msg:
self.print_status = 'success'
# ... 其他状态处理关键技术实现
1. .NET 互操作
import clr
# 加载BarTender程序集
clr.AddReference('Seagull.BarTender.Print')
from Seagull.BarTender.Print import Engine, Printers, Printer, LabelFormatDocument2. 事件驱动架构
- 使用.NET事件处理器绑定打印任务状态变化
- 通过回调机制将事件信息传递给Python层
- 实现异步状态监控和用户反馈
2. 资源生命周期管理
def close(self): """资源清理""" # 关闭文档 if self.btFormat: if self.btFormat.IsModified: self.btFormat.Close(SaveOptions.SaveChanges) else: self.btFormat.Close(SaveOptions.DoNotSaveChanges) # 停止引擎 if self.btEngine.IsAlive: self.btEngine.Stop() self.btEngine.Dispose()
本文示例下载:

请关注本站微信公众号,回复“0825”,获取验证码。
在微信里搜索“barcodex_cn”或微信扫描右侧二维码都可以关注本站微信公众号。
文章版权声明:除非注明,否则均为BarcodeX贝恪原创文章,转载或复制请以超链接形式并注明出处。



还没有评论,来说两句吧...