我采用的调用方法是需要安装Bartender10.1的。首先要先安装。网上很多安装包,就不发链接了。

安装好后需要添加引用

 

java 设置Bartender模板里面的数据库语句 bartender添加数据库_模版

 

然后我们创建一个CLASS文件,充分利用面向对象思想。一下是代码,如果有土豪也可以去支持一下我的下载。

namespace ALL_PROJECT
 {
     class BarTender_class
     {
         BarTender.Application BarTApp;
         BarTender.Format BarTFormat;
         private static BarTender_class BartenderPrin = null;        #region
         public static BarTender_class GetInstance()
         {
             if (BartenderPrin != null)
             {
                 return BartenderPrin;
             }
             BartenderPrin = new BarTender_class();
             return BartenderPrin;
         }        private BarTender_class()
         {
             if (BarTApp == null)
             {
                 BarTApp = new BarTender.Application();
             }
         }
         #endregion        /// <summary>
         /// 数据设置方式打印条码
         /// </summary>
         /// <param name="Path">路径</param>
         /// <param name="Qty">单个打印数量</param>
         /// <returns></returns>
         public bool PrintBarT(string Path, int Qty)
         {
             if (string.IsNullOrEmpty(Path))
             {
                 MessageBox.Show("模版路径为空或不存在");
                 return false;
             }
             BarTFormat = BarTApp.Formats.Open(Path, false, "");
             BarTFormat.PrintSetup.IdenticalCopiesOfLabel = Qty;
             BarTApp.Visible = false;
             BarTFormat.PrintSetup.NumberSerializedLabels = 1;
             try
             {
                 DesignObject btObject = null;
                 foreach (DesignObject obj in BarTFormat.Objects)
                 {
                     //对象为线条的时候会出错
                     if (obj.Name.Contains("文本") || obj.Name.Contains("条形码"))
                     {
                         if (obj.Value.ToString().Contains("[") && obj.Value.ToString().Contains("]"))
                         {
                             btObject = BarTFormat.Objects.Find(obj.Name);
                             btObject.DoNotPrint = true;
                         }
                     }                }
                 BarTFormat.PrintOut(false, false);//第2个参数是 是否显示打印机属性的。可以设置打印机路径  
             }
             catch (Exception ex)
             {
                 throw ex;
             }
             finally
             {
                 BarTFormat.Close(BarTender.BtSaveOptions.btDoNotSaveChanges);
             }
             return true;
         }        public bool PrintBarT2(string lblPath, System.Collections.Hashtable hTable, int PrintQty)
         {
             if (string.IsNullOrEmpty(lblPath))
             {
                 MessageBox.Show("模版路径为空或不存在");
                 return false;
             }
             if (hTable == null || hTable.Count <= 0)
             {
                 MessageBox.Show("没有可打印数据");
                 return false;
             }
             BarTFormat = BarTApp.Formats.Open(lblPath, false, "");
             BarTFormat.PrintSetup.IdenticalCopiesOfLabel = PrintQty;
             BarTApp.Visible = false;            BarTFormat.PrintSetup.NumberSerializedLabels = 1;
             try
             {                foreach (string key in hTable.Keys)
                 {
                     try
                     {
                         BarTFormat.SetNamedSubStringValue(key, (hTable[key]).ToString());
                     }
                     catch (Exception e1)
                     {
                         throw new Exception("key:" + key + "," + e1.Message);
                     }
                 }
                 //标签上的一些东西不需要打印
                 //获取标签变量
                 string vars = this.GetVar(lblPath); //获取打印标签上所有的变量值                //模版上的变量,如果在hTable不存在,就设置为不显示
                 vars = vars.Substring(0, vars.Length - 1);
                 string[] bb = vars.Split(new char[] { '$' });
                 ArrayList list = new ArrayList();
                 for (int i = 0; i < bb.Length; i++)
                 {
                     string[] cc = bb[i].Split(new char[] { '#' });
                     string 数据源字段 = cc[0].ToString().Replace("{", "").Replace("}", "").Replace("\n", "").Replace("\r", ""); //模版上的数据源名称,数据源是不能重复的,Bartender已经限定
                     list.Add(数据源字段);                }
                 DesignObject btObject = null;
                 foreach (DesignObject obj in BarTFormat.Objects)
                 {
                     //对象为线条的时候会出错
                     if (obj.Name.Contains("文本") || obj.Name.Contains("条形码"))
                     {                        if (obj.Value.ToString().Contains("[") && obj.Value.ToString().Contains("]"))
                         {
                             btObject = BarTFormat.Objects.Find(obj.Name);
                             btObject.DoNotPrint = true;
                         }
                     }
                 }
                 BarTFormat.PrintOut(false, false);//第2个参数是 是否显示打印机属性的。可以设置打印机路径  
             }
             catch (Exception ex)
             {
                 throw ex;
             }
             finally
             {
                 BarTFormat.Close(BarTender.BtSaveOptions.btDoNotSaveChanges);
             }            return true;
         }        public string GetVar(string _模版)
         {
             try
             {
                 BarTFormat = BarTApp.Formats.Open(_模版, false, "");
                 string var = BarTFormat.NamedSubStrings.GetAll("#", "$");
                 return var;
             }
             catch (Exception ex)
             {                throw ex;
             }        } 
    }
 }

以上创建完成之后我们开始设置模板。首先来具名的打印方式。

新建一个模板。设置具名变量

输入具名。

java 设置Bartender模板里面的数据库语句 bartender添加数据库_模版_02

选择嵌入式数据

java 设置Bartender模板里面的数据库语句 bartender添加数据库_模版_03

java 设置Bartender模板里面的数据库语句 bartender添加数据库_字段_04

为文本或者条形码二维码设置具名

java 设置Bartender模板里面的数据库语句 bartender添加数据库_字段_05

java 设置Bartender模板里面的数据库语句 bartender添加数据库_模版_06

 

这样我们一个具名模板就做好了,然后我们开始调用程序打印

private void buttonX2_Click(object sender, EventArgs e)
         {
             BarTender_class lp = BarTender_class.GetInstance();
             Hashtable hs = new Hashtable();//因为我方法体里面是HS的值,可以不采用
             for (int i = 0; i<2;i++)
             {
                 hs.Clear();
                 hs.Add("Prin_i", i);
                 lp.PrintBarT2("C:\\BtModel\\具名.btw", hs, 1);
             }
         }

效果图:循环两次会打印出两个标签,我这里只放一个。

上面这种方式条码少的话还好,如果条码多,就会造成打印机打一次停一次。所以我们下面用数据库的方法打印。一次将所有的信息都传输给模板。

这种方式有很多首先还是先新建一个模板出来。

设置模板的数据库

java 设置Bartender模板里面的数据库语句 bartender添加数据库_c#_07

可以看到这里有很多数据源的选择,我采用的是excel方式。可以选择自己的引用场景去做。

java 设置Bartender模板里面的数据库语句 bartender添加数据库_c#_08

下一步,我们选择我们的excel,这里的excel,我的是先设置一个空的,先把字段给上去,然后数据是从前端导出来之后再填充进去的。

java 设置Bartender模板里面的数据库语句 bartender添加数据库_模版_09

一直下一步到完成

java 设置Bartender模板里面的数据库语句 bartender添加数据库_数据源_10

java 设置Bartender模板里面的数据库语句 bartender添加数据库_数据源_11

java 设置Bartender模板里面的数据库语句 bartender添加数据库_字段_12

注意这里的字段是我excel里面的字段,excel里面有多少列,这里就会有多少,其他数据库同理。点完成,我们的模板就做好了。

java 设置Bartender模板里面的数据库语句 bartender添加数据库_模版_13

上面说过了,我的excel现在是空表,只有列名,为了是给模板确定字段,后面我的数据会导出来然后就会有数据给我打印。

java 设置Bartender模板里面的数据库语句 bartender添加数据库_c#_14

 

接下来直接打印,我的模板导出就不细写了,有需求的可以去看看怎么导出excel文件。

private void buttonX3_Click(object sender, EventArgs e)
         {
             BarTender_class lp = BarTender_class.GetInstance();
             lp.PrintBarT("C:\\BtModel\\数据.btw",1);
         }

超级简单的打印,避免了打印机打一次停一次。对多标签打印效率提高N倍。

这样我们的两个打印方法就完成了。