也谈程序调用bartender自动生成二维码、条形码并打印标签
时 间:2018-12-06 16:27:19
作 者:老季 ID:64085 城市:南通
摘 要:使用命令行方式控制Bartender并打印不同的标签
正 文:
今天看到学友 水若寒 发的文章
自己开发的access程序调用bartender自动生成二维码、条形码并打印标签
http://www.accessoft.com/article-show.asp?id=17583
很欣喜的发现也有人和我一样使用Bartender自动化打印标签
但是我的方法和他不一样,特开贴分享下我的经验
水若寒使用的是引用BT,然后使用vba编程的方式,这个对bt的版本有要求,必须是Automation(自动化)版本,professional(专业)版会提示错误
我使用的是命令行参数的方式,只需要professional版本就可以使用,下载地址在文末
他的流程是打开bt,打开模板,(写入单个数据,打印),关闭且不保存模板,关闭bt
其中括号部分可以重复,标签数量少时,耗时差不多,但是频繁打印固定的一个模板时,这种耗时会比较长,因为bt向打印机发送两次打印任务之间会有延时
我的流程是打开bt,预加载模板,(导出数据,打印),关闭bt且不保存模板
其中括号部分可以重复,当使用同个模板打印多个标签时,合并打印任务可以显著缩减等待时间
例如使用模板一打印1000个不同的标签,他的方法需要分别发送打印命令1000次,我的只需要导出一次文件,发送一次打印指令
准备工作:
先用bt设计好模板,具体操作使用bt的应该会,我这里是用过了一个多行文本框设置了脚本,然后下面是条形码
接着添加并绑定数据源
首先你按照模板中使用的字段以及单个标签的数量生成一个csv,顺序不限,需要注意的是CSV文件的格式标准,有兴趣自己百度下
快捷键Ctrl+D打开数据库设置
点击添加,选择文本文件,下一步
然后输入文件名称,这里可以使用相对地址,如下图,直接输入文件名,就表示是模板文件同目录下
然后下一步再下一步,一般建议选择是,就是表示csv文件的第一行带有标题,方便查看
完成后如下
然后把模板中的字段绑定数据源字段
接下来设置打印份数
Ctrl+P快捷键打开设置窗口,选择最后一个,由数据源设置
然后在数据源中配置表示单标签打印数量的字段
保存,准备工作完成,开始关键部分
下面简要说明下我的程序思路
因为我的程序是放在仓库使用的,固定的两个模板打印频率很高,因此打开打印程序时预先打开bt并且加载模板
如:c:\btw\bartend.exe /f=<格式名称>
当需要打印时,把数据写入CSV并保存关闭
然后发送命令 c:\btw\bartend.exe /p 这里bt程序会自动检测是否已经有bt在运行,如有会自动转发命令到第一个bt,退出后面的bt
(我下面的C#实现直接发送到第一个bt,缩减了一部分延迟)
假如需要切换模板F2.btw 发送c:\btw\bartend.exe /AF=F2.btw
程序退出前 发送 c:\btw\bartend.exe /x 指示bt程序退出
vba部分我是用Excel实现的,access应该是类似的
程序打开时 加载bt并且预加载模板 /min=SystemTray 这个表示最小化到任务 taskbar表示最小化到任务栏
Dim btCMD btCMD = BT路径 & " /f=" & Chr(34) & ActiveWorkbook.Path & "\通用内标.btw" & Chr(34) & " /f=" & Chr(34) & ActiveWorkbook.Path & "\通用内标.btw" & Chr(34) & " /min=SystemTray" Shell (btCMD)查询数据然后导出CSV部分根据自己的需求来做吧,毕竟每个人的数据都不一样
提示下,CSV这里是支持多行的,看我的附件就明白了
开始打印通用内标这个标签,打印其他标签同理,改下名字就可以,也可以动态拼接
Dim btCMD btCMD = BT路径 & "/AF=通用内标.btw /P /min=SystemTray" Shell(btCMD)
程序退出前,退出bt
Dim btCMD btCMD = BT路径 & "/x" Shell(btCMD)
我们仓库的打印程序是我用C#实现的,导出数据部分就不贴了
这里为了提高速度,我直接获取了进程id,排除了二次启动的延迟
打印部分主要代码如下
private void LoadBT() { Process[] Po = Process.GetProcessesByName("bartend"); if (Po.Length > 0) { BtId = Po[0].Id; Log("Bartender已经开始运行,进程ID为" + BtId.ToString()); } else { Process p = new Process(); p.StartInfo.WorkingDirectory = this.txtBartenderPath.Text; p.StartInfo.FileName = "bartend.exe"; p.StartInfo.Arguments = "/f=\"" + System.Windows.Forms.Application.StartupPath + @"\通用外标.btw" + "\" /f=\"" + System.Windows.Forms.Application.StartupPath + @"\通用内标.btw" + " \"/min=SystemTray"; p.EnableRaisingEvents = true; p.Start(); BtId = p.Id; Log("Bartender已经开始加载,进程ID为" + BtId.ToString()); } } //BtId为Bartender进程的Id private int BtId; ////// 调用bartender打印指定模板,在系统托盘最小化模式 private void RunBT() { Process p; try { p = Process.GetProcessById(BtId); } catch { Log("BarTender已经退出!将重新启动!"); LoadBT(); p = Process.GetProcessById(BtId); } if (chkBarIn.Checked) { p.StartInfo.FileName = "bartend.exe"; p.StartInfo.Arguments = "/AF=通用内标.btw /P /min=SystemTray"; p.Start(); } if (chkBarOut.Checked) { p.StartInfo.FileName = "bartend.exe"; p.StartInfo.Arguments = "/AF=通用外标.btw /P /min=SystemTray"; p.Start(); } if (chkFileStatus.Checked) { label9.Text = "开始读取"; timer2.Enabled = true; waitBt = true; BTreading = false; txtInput.Enabled = false; } }
下面是我们目前使用的模板及CSV,可以下载研究下
百度云下载Bartender9.4版本带注册机
使用方法:
安装选择试用
完毕后拔网线
打开软件-帮助-激活向导
打开注册机
product type 选择 Bartender professional edition
复制下面的激活码填入Bartender里面
然后下一步
最后会提示错误
再选择电话激活
把显示的代码填入注册机
下面算出来的激活码填入软件激活即可
最后插上网线继续做你的事情.
Access软件网QQ交流群 (群号:54525238) Access源码网店
常见问答:
技术分类:
源码示例
- 【源码QQ群号19834647...(12.17)
- Access对子窗体数据进行批...(10.30)
- 最精简的组合框行来源数据快速输...(10.25)
- Access仿平台的多值选择器...(10.24)
- 【Access日期区间段查询】...(10.22)
- 【Access源码示例】VBA...(10.12)
- Access累乘示例,Acce...(10.09)
- 数值8.88,把整数8去掉,转...(10.08)
- 【Access自定义函数】一个...(09.30)
- 【Access选项卡示例】Ac...(09.09)
学习心得
最新文章
- Access快速开发平台企业版--...(11.18)
- 不会用多表联合查询,多表查询没结果...(11.16)
- 【案例分享】主键字段值含有不间断空...(11.16)
- Access快速开发平台--后台D...(11.14)
- 微软Access邀测新Monaco...(11.12)
- Access列表框左右互选、列表框...(11.11)
- 高效率在导入数据前删除记录(11.10)
- Access报价单转订单示例代码(11.08)
- Access系统自带的日期选择器不...(11.08)
- 分享一下Access工程中的acw...(11.07)