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 False
3. 数据源操作
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, LabelFormatDocument
2. 事件驱动架构
- 使用.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贝恪原创文章,转载或复制请以超链接形式并注明出处。
还没有评论,来说两句吧...