目录
一. 需求
目前一些大型品牌企业为了对其产品质量的方便管控制,一般对其外协供应商的供货产品包装管理也要求规范化,像三星、苹果、联想、华为、戴尔等品牌电子产品对其外协供应商都有严格的规范要求。
企业通过一维条码、二维码或RFID标签等方式对单个产品赋予“身份证”,实现一件一码,对产品的生产、扫描装箱、仓储、分销、物流运输、市场巡检及消费都等每个环节进行数据采集跟踪,实现产品生产环节、销售环节、流通环节、服务环节的逐一往下全面监控管理。
所以这就需要在工厂扫码装箱流水线上,实现扫码后自动化标签打印功能。
1 扫码流水线
2 自动化标签打印
二. 系统架构图
三. 代码实现
1 Python调用 BarTender 的Dll
# -*- coding: utf-8 -*-
# 先安装 BarTender 程序
# 然后找到 Interop.BarTender.dll 文件 拷贝到 当前目录下并改名为 BarTender.dll
# 再安装库 pip install pythonnet
import clr
import os
import sys
currentFolder = os.getcwd() # 获取当前路径,
# 加载当前路径, 否则clr.AddReference("BarTender")会报找不到文件
sys.path.append(currentFolder)
ret = clr.AddReference("BarTender") # 这里不需要 .dll 后缀
name = ret.GetReferencedAssemblies()
from Bartender import Formats, Application, BtCacheFlushIntervalSeagull, BtSaveOptions
# 创建 BarTender 的 Application
btApp = Application()
# 打开标签模板文件
btwfilename = currentFolder + "\\test.btw"
btformat = btApp.Formats.Open(btwfilename, False, "")
# 设置打印机
btformat.PrintSetup.Printer = "Microsoft Print to PDF"
# 给标签中的变量填值
btformat.SetNamedSubStringValue("xh", "诺贝丽仿石涂料")
btformat.SetNamedSubStringValue("zl", "20 Kg")
btformat.SetNamedSubStringValue("ph", "20191001123")
# 设置打印张数
btformat.PrintSetup.IdenticalCopiesOfLabel = 1
# 打印
btformat.PrintOut()
btformat.PrintSetup.Cache.FlushInterval = BtCacheFlushInterval.btCacheFlushPerSession
# 关闭
btformat.Close(BtSaveOptions.btDoNotSaveChanges)
btApp.Quit()
2 执行 BarTender 命令行
(1) 常用示例
命令行 | 操作 |
---|---|
bartend.exe /F=c:\Formats\ship.btw /P | 加载和打印 ship.btw。 |
bartend.exe /F="lib://test1.btw" /P | 加载并打印 test1.btw,该文件存储在 Librarian 的存储库中。 |
bartend.exe /F=F1.btw /F=F2.btw /F=F3.btw | 加载三个指定的文档。 |
bartend.exe /P | 打印所有打开的 BarTender 文档。 |
bartend.exe /IDOC="xyz.idoc" /P | 使用 IDoc xyz.idoc 打印所有 BarTender 文档。 |
bartend.exe /F=test.btw /P /LicenseServerAddress=MyServer /LicenseServerPort=5175 | 打开 BarTender 文档 test.btw。 连接到 MyServer 端口 5175 上的 Seagull License Server 并打印 test.btw。 |
bartend.exe /AF=F2.btw | Makes F2.btw the active document. |
bartend.exe /AF /P /C=2 /D="xyz.dat" | Prints two copies of the active document using text file xyz.dat. |
bartend.exe /MediaHandling="Action=Cut;Occurrence=AtEndOfPrintJob" | 将打印机介质处理设置设定为打印作业结束时剪切标签卷。 |
(2) 打印命令
/P
执行打印作业,保持打印对话框的使用数据库复选框的状态不作改变。 如果选中此设置,将按原样使用“数据库设置”对话框中的各种设置,除非这些设置受到其他命令行参数的控制。 适用于所有打开的 BarTender 文档(除非已经使用 /AF= 参数)。
/PD
与 /P 相同,但是还显示“打印”对话框,因此允许用户根据需要更改对话框设置,然后手动启动打印作业。
/QP
将打印对话框的使用数据库复选框的状态强制为已禁用(即“未选中”),这样 BarTender 将不会从任何外部数据源读入任何数据。
/QPD
与 /QP 相同,但是还显示“打印”对话框,因此允许用户根据需要更改对话框设置,然后手动启动打印作业。
/FP
将“打印”对话框的“使用数据库”复选框的状态强制为已启用(或“选中”),以便从任何正确指定的数据文件读取数据。
/FPD
与 /FP 相同,但是还显示“打印”对话框,因此允许用户根据需要更改对话框设置,然后手动启动打印作业。 (常用于“数据输入表单”和“查询提示”。)
/C=n
覆盖每个模板打印份数的当前指定值。
/S=n
覆盖要打印的序列项数的当前指定值。
/PRN=<printer name>
指定要使用的打印机。此参数可在任何时候使用,并且适用于所有打开的 BarTender 文档。
/PRNFILE=<printer file name>
指定 BarTender 应打印到文件并指定应使用的文件名。该参数只适用于活动 BarTender 文档。
/PRNMDL="<model>[, <port>]"
设置打印机型号,(可选)并指定端口。 当不能确定需要的打印机是否在线时,此参数通常用作 /PRN 的备选参数。 它适用于所有打开的 BarTender 文档,除非已经用 /AF 参数将其中一个文档指定为活动文档。 如果与 /PRN 一同使用,则优先后者。如果与 /PRN 一同使用,则优先后者。 如果找不到 /PRN 指定的打印机,则 BarTender 将搜索具有指定打印机型号的打印机。如果使用 /PRNMDL=<model> 并且找到多台型号相符的打印机,则 BarTender 将选择端口最靠近所缺打印机的打印机。指定 /PRNMDL=<model>, <port> 将使 BarTender 使用指定端口上的型号的打印机。
/PrintJobName=<printer job name>
设置后台处理程序中打印作业的可见名称。
/Tray=<tray name>
在有多个打印机纸盒可用时指定用于打印的纸盒。 "tray name" 字符串与驱动程序提供的纸盒名称列表进行比较。 匹配时忽略空格并且区分大小写。 如果指定的纸盒不可用,则此设置恢复为默认打印机纸盒。
/MediaHandling= "option=value;[options=values]"
设置介质处理命令、触发器和操作。 有关更多信息,请参见页面设置对话框帮助的“介质处理选项卡”部分。
(3)python 调用命令代码
import os
cmd = 'bartend.exe /F="条码打印.btw" /P'
os.system(cmd)
(4)更多资料参考官网
命令行参数参考http://help.seagullscientific.com/2016/zhs/Content/file_command_params_command_summary.htm