源文章地址

源文章链接

应用背景

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

所需环境

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

安装bartender软件

1,首先明确你的系统是X86还是X64,然后安装系统对应版本的bartender
2,bartender有不同的应用版本,这里推荐Enterprise Automation版本

3,安装完成后找到对应目录下的SDK文件夹,找到对应的dll文件

注!:这里非常需要关注的是,如果你的系统是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 = filePathdef 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].Valuefor substring in self.btFormat.SubStrings:data_dict[substring.Name] = substring.Valuereturn data_dict# 传入一个字典:{'num':11111}则会把num变量的值设置为11111def 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.printerNameexcept :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调用bartender操控打印机打印条码相关推荐

  1. 树莓派3下Python调用斑马GK888t打印机

     折腾了几天终于初有收获.继去年的三无温控探头之后,海爷又支援了他珍藏的斑马打印机.结合之前的研究成果,这下终于可以尝试用树莓派实现自助打印的业务模式了. 首先当然是通过USB物理连接打印机到树莓 ...

  2. python文本自动伪原创_Python调用有道智云文本翻译API接口实现“智能”伪原创

    随着人工智能的火热,互联网热门韭菜行业SEO也貌似进入了AI的快车道,尤其以智能伪原创超级热门,你会发现几乎是个seo工具网站都挂着智能伪原创的"狗头"招牌,抱着人无我有,人有我优 ...

  3. JAVA调用Bartender进行标签打印(可本地用打印机客户端进行测试打印,【云上的项目】可通过WebSocket进行通讯进行打印)

    用Java编写一个打印标签客户端 点击运行启动会打开首页 可以点击预览打印 点击打印可测试成功 打印机结果 前端用的是thymeleaf 代码片段 <!DOCTYPE html> < ...

  4. linux 非root 安装ImageMagick 以及python调用ImageMagick将图片生成gif案例

    标题有点长,知识量拉满~ 首先进入链接 http://www.imagemagick.org/script/install-source.php 下载 下载ImageMagick.tar.gz ,下载 ...

  5. python调用c++_python高性能编程之Cython篇 第一章

    第一节 cython的潜能 •Cython是一种编程语言,它将Python与C和C ++的静态类型系统相结合. •Cython是一个将Cython源代码转换为高效的C或C ++源代码的编译器.然后可以 ...

  6. python登录系统账号检测_一种基于python的惠普打印机默认用户名密码检测方法与流程...

    本发明涉及打印机检测技术领域,特别是一种基于python的惠普打印机默认用户名密码检测方法. 背景技术: 网络打印机是当前各大中小型企业正常办公比不可少的办公网络设备,但对于大中型企业而言,不同部门或 ...

  7. python神经网络框架有哪些,python调用神经网络模型

    人工智能 Python深度学习库有哪些 由于Python的易用性和可扩展性,众多深度学习框架提供了Python接口,其中较为流行的深度学习库如下:第一:CaffeCaffe是一个以表达式.速度和模块化 ...

  8. 从Python调用外部命令

    您如何在Python脚本中调用外部命令(就像我在Unix Shell或Windows命令提示符下键入的一样)? #1楼 os.system不允许您存储结果,因此,如果您要将结果存储在某个列表中或sub ...

  9. python调用dll依赖项

    python调用多依赖库dll报错[WinError 126] 找不到指定的模块 原文:https://blog.csdn.net/Kelvin_Yan/article/details/8600893 ...

  10. python如何调用图片-python调用图片

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! python本身也有识别图片转文字的框架,但是相比调用接口,识别的精度就略显不行 ...

最新文章

  1. pycharm与python环境配置
  2. 程序员的小天地:注释中的快乐
  3. LightOJ - 1265 概率
  4. python input与返回值-Python基础教程之输入输出和运算符
  5. 【Android 应用开发】 ActionBar 基础
  6. PowerDesigner模型设计
  7. Apache Kafka 不需要管理员:删除 Apache ZooKeeper 的依赖
  8. SQLDump***.txt
  9. 鼠标移动到ul图片会摆动_我们可以从摆动时序分析中学到的三件事
  10. iBatis的基本配置+CRUD操作
  11. C语言随笔小算法:单项链表如何实现队列
  12. 遐想ORACLE的下步收购
  13. MySQL 存储过程错误处理
  14. Tensorflow笔记:搭建神经网络
  15. MySQL表空间碎片产生原因和优化
  16. LaTeX公式编辑器数学、化学、物理公式编辑器
  17. Ubuntu1604 在startup 中添加开机自启动
  18. keil编译后MCU需要的flash和RAM容量
  19. vue3 tsx语法
  20. 微信小程序如何实现(点击发送弹幕)

热门文章

  1. 【密码学】让我们去看一个《摩尔斯电码里的爱情故事》: 爱情最好的样子,就是我爱你的同时你也爱我
  2. 计算机考试win10可以吗,计算机二级考试练习系统可以用win10吗?
  3. JDK下载 JVM调优工具jvisualvm下载
  4. 导航网站合集 | 你想要的资源它都有
  5. Python Django 个人博客源码(附个人源码和网站参考)
  6. Addressable 增量包
  7. 全国离线地图矢量地图矢量数据点线面数据
  8. 修改android设备型号
  9. 【5G核心网】 3GPP TS 系列解读
  10. Postman如何生成测试报告