IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 【非原创】python调用bartender操控打印机打印条码 -> 正文阅读

[Python知识库]【非原创】python调用bartender操控打印机打印条码

源文章地址

源文章链接

应用背景

通过调用第三方C#库,你可以非常方便地打印出你想要的条码,同时不受打印机的限制。

所需环境

1,bartender软件
2,python及其配套运行环境

安装bartender软件

1,首先明确你的系统是X86还是X64,然后安装系统对应版本的bartender
2,bartender有不同的应用版本,这里推荐Enterprise Automation版本
版本
3,安装完成后找到对应目录下的SDK文件夹,找到对应的dll文件
SDK
注!:这里非常需要关注的是,如果你的系统是x64的,你也可以顺利运行x86版本的bartender。这时你需要检查你的python是否也是32bit版本的。这里可以打开CMD输入“python”去检查版本。32bit版本的python只能调用x86的dll文件。
4,将这个dll文件复制到你的python工作区间目录下方便调用。

新建bartender文件

1,新建文件,按需创建一个bartender模板。作为演示我在这里直接点完成

模板
2,在工具栏中添加一个QR码到模板中,双击二维码设置。自己定义数据源名称,在python程序中,你自定义的二维码内容将会通过数据源名称传入。
在这里插入图片描述

python上位机代码

import clr #通过这个模块来调用C#的dll库
#加载dll库
clr.AddReference("Seagull.BarTender.Print")
from Seagull.BarTender.Print import Engine, Printers
#可能会出现“Import "Seagull.BarTender.Print" could not be resolved”这个波浪线错误,这里不用管

class BarTender():#创建打印机类方便在上位机主程序中调用
	def __init__(self,filePath):
	    #启用引擎
	    self.btEngine = Engine(True)
	    self.filePath = filePath
	def getPrinterList(self):#获取你电脑上的打印机列表
        printers = Printers()
        printerList = []
        for printer in printers:
            printerList.append(printer.PrinterName)
        self.printerName = printers.Default.PrinterName#这里为了方便,将要打印机确定为默认打印机
        #默认打印机只需在电脑的控制面板中设定即可

    def creatTask(self):#创建打印任务
        self.btFormat = self.btEngine.Documents.Open(self.filePath)
    
    #调试过程中发现保存功能无法生效
    # def abortTask(self):
    #     self.btEngine.Stop(SaveOptions.SaveChanges)

    def get_data_dict(self, key=None):#获取你的标签文件.btw的内容
	    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
    # 传入一个字典:{'num':11111}则会把num变量的值设置为11111
    def set_data_dict(self, data_dict):#将你需要的数据源内容内容写入到标签.btw文件中
        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)


      def __del__(self):
          #关闭引擎,释放资源
          if self.btEngine.IsAlive:
              self.btEngine.Stop()
              self.btEngine.Dispose()

if __name__ == "__main__":
dict = {
"num" : "1234567"
}
#key:"num"为在bartender中命名的数据源,value:"1234567"为你想输出的条码内容
b= BarTender()#path为先前设计的标签路径
b.getPrinterList()
b.creatTask()
b.btFormat.PrintSetup.PrinterName = b.printerName

将以上程序作为模块集成到主程序中

import bartender#将上述文件命名为bartender.py。然后导入

'''
以下为截取的定义的函数程序片段

#有时候如果强制关闭程序或者程序因出错卡死,会导致程序没有执行bartender的回收工作,这样bartender会一直在后台占用
#我这边的解决办法是在主程序开始运行时先关闭任务管理器中已存在的所有bartender进程
#如果有更好的办法望各位看官不吝赐教
'''
def initPrinter(self):
    #关闭所有已存在的bartender进程
    cmd = "taskkill /F /IM " + "bartend.exe"
    os.system(cmd)
    time.sleep(1)
    try:
        #生成bartender对象
        self.seagullBartender = bartender.BarTender(self.btwPath)
        #生成目标文件对象
        self.seagullBartender.creatTask()
        #搜寻默认打印机
        self.seagullBartender.getPrinterList()
        #绑定打印机
        self.seagullBartender.btFormat.PrintSetup.PrinterName = self.seagullBartender.printerName
    except :
        print("打印机初始化失败!")
'''
因为这段程序是嵌入到一个主程序中的。如果在主程序的运行过程中打开bartender会耗费较长的时间
所以这边我用线程让bartender在后台先打开,不去干扰主程序的运行
'''
def initPrinterThread(self,filepath = None):
    seagullInitThread = threading.Thread(target=self.initPrinter)
    seagullInitThread.start()
'''
调用打印机函数,在适当的时机调用来打印内容
'''
def printBarcode(self):
#字典里的是在bartender里链接的内容
	dict = {
            'a': None, 'b': None
        }
    self.seagullBartender.set_data_dict(dict)
    #开始打印
    result = self.seagullBartender.btFormat.Print("printjob",2000)
    print(result)

if __name__ == "__main__":
	initPrinterThread()
	printBarcode()


有时候会出现以下报错:

Seagull.BarTender.Print.PrintEngineException: The BarTender engine could not be started. 
Possible reasons are: 
1) BarTender is not properly installed. 
2) BarTender is not properly registered on the computer (e.g bartend.exe /register). 
3) There are too many process instances of BarTender running. Stop a few bartend.exe instances and try again. Also see SDK Engine.Start method documentation for information about how to allow more BarTender processes to run on your computer by increasing your "non-interactive" shared desktop heap. 
4) The user account does not have permission to run BarTender.

解决办法:
打开控制台
注册应用程序

bartend.exe /register

更新日期:
2022/6/24

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-06-29 19:00:05  更:2022-06-29 19:01:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/27 5:25:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计