也谈程序调用bartender自动生成二维码、条形码并打印标签-老季
Access软件网QQ交流学习群(群号码198465573),欢迎您的加入!
首页 >技术文章> 源码示例


也谈程序调用bartender自动生成二维码、条形码并打印标签

发表时间:2018/12/6 16:27:19 评论(59) 浏览(26231)  评论 | 加入收藏 | 复制
   
摘 要:使用命令行方式控制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群(群号:198465573)
 
 相关文章
【Access示例】Access二维码\二维码的使用\QRmake...  【缪炜  2017/3/6】
向WORD文件插入二维码和条形码  【健利宝  2017/6/9】
使用QRmaker控件打印二维码示例  【MDZZ  2017/8/14】
打印标签条形码报表示例  【金宇  2018/8/18】
Access 2016 添加二维码窗体  【怀哥  2018/11/9】
自己开发的access程序调用bartender自动生成二维码、条...  【水若寒  2018/12/5】
常见问答
技术分类
相关资源
文章搜索
关于作者

老季

文章分类

文章存档

友情链接