Python调用BarTender SDK实现数据源修改与打印操作详解

条码老陈08-20138阅读0评论

 本文介绍如何使用Python调用Seagull BarTender SDK实现标签打印功能。通过封装BarTender的.NET程序集,我们可以在Python中实现完整的数据源修改管理和打印控制功能。

一、核心功能架构

系统分为两层:

  • 引擎层(BtEngine.py):封装BarTender API         

  • 应用层(Main.py):提供GUI界面和业务流程

二、功能流程图

下载.png


三、关键技术实现

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贝恪原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
AddoilApplauseBadlaughBombCoffeeFabulousFacepalmFecesFrownHeyhaInsidiousKeepFightingNoProbPigHeadShockedSinistersmileSlapSocialSweatTolaughWatermelonWittyWowYeahYellowdog
评论列表 (暂无评论,138人围观)

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

取消
微信二维码
微信二维码
支付宝二维码