Access开发培训
网站公告
·Access专家课堂QQ群号:151711184    ·Access快速开发平台下载地址及教程    ·欢迎加入Access专家课堂微信群!    ·如何快速搜索本站文章|示例|资料    
您的位置: 首页 > 技术文章 > 源码示例

也谈程序调用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,可以下载研究下

Bt模板及CSV示例



百度云下载Bartender9.4版本带注册机

使用方法:

安装选择试用
完毕后拔网线
打开软件-帮助-激活向导

打开注册机
product type 选择 Bartender professional edition
复制下面的激活码填入Bartender里面
然后下一步
最后会提示错误
再选择电话激活
把显示的代码填入注册机
下面算出来的激活码填入软件激活即可

最后插上网线继续做你的事情.



Access软件网QQ交流群 (群号:483923997)       Access源码网店

常见问答:

技术分类:

相关资源:

专栏作家

关于我们 | 服务条款 | 在线投稿 | 友情链接 | 网站统计 | 网站帮助