C# winfrom调用Bartender打印,具名打印,以及数据库打印

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

安装好后需要添加引用

 

 

然后我们创建一个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;
            }

        } 

    }
}

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

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

输入具名。

选择嵌入式数据

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

 

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

        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);
            }
        }

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

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

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

设置模板的数据库

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

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

一直下一步到完成

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

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

 

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

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

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

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

----------------小尾巴分割----------------------------------------

菜鸟的记录也是进步~如果对你有所帮助,那就点赞一下吧。-----来自没有代码的程序员小萝卜

### 回答1: WinForms 是一个用于创建 Windows 桌面应用程序的框架,而 Bartender 是一种专业的条形码和标签设计与打印软件。如何使用 WinForms 调用 Bartender 连接 SQL Server 并实现打印功能呢? 首先,我们需要在 WinForms 项目中添加对 Bartender 的引用。可以打开 Visual Studio 的 NuGet 包管理器,搜索并安装 Bartender 的相关包,以确保我们能使用 Bartender 的 API。 接下来,在 WinForms 界面设计中添加一个按钮,用于触发打印操作。在按钮的点击事件方法中,我们可以编写代码来实现连接 SQL Server 并生成需要打印的数据。 首先,我们需要使用 SQL Server 连接字符串连接到数据库。连接字符串应包含数据库的位置、名称、访问权限等信息。通过使用 System.Data.SqlClient 命名空间下的 SqlConnection 类,可以创建一个用于连接数据库的 SqlConnection 对象。例如: ```csharp string connectionString = "Data Source=服务器地址;Initial Catalog=数据库名称;User ID=用户名;Password=密码"; SqlConnection connection = new SqlConnection(connectionString); ``` 然后,我们可以编写一个 SQL 查询语句,从数据库中获取需要打印的数据。使用 SqlCommand 对象执行这个查询,并将结果保存到一个 DataTable 中。 ```csharp string query = "SELECT * FROM 表名"; SqlCommand command = new SqlCommand(query, connection); DataTable dataTable = new DataTable(); SqlDataAdapter adapter = new SqlDataAdapter(command); adapter.Fill(dataTable); ``` 接下来,我们需要创建一个 Bartender 的 Application 对象,并加载打印模板文件 (.btw 文件)。使用 Application 对象的 DataSource 方法,将 DataTable 作为打印模板的数据源。 ```csharp Bartender.Application bartender = new Bartender.Application(); bartender.Documents.Open("模板文件路径.btw"); bartender.DataSource.Refresh(); bartender.DataSource.Synchronous = false; bartender.DataSource.Formats.Item(0).SelectAll(); bartender.DataSource.Formats.Item(0).SetData(dataTable); ``` 然后,使用 Bartender 对象的 PrintOut 方法来打印标签或条形码。 ```csharp bartender.PrintOut(false, false); ``` 最后,我们需要释放与 Bartender数据库的连接及相关资源。 ```csharp bartender.Quit(Bartender.BtSaveOptions.btDoNotSaveChanges); connection.Close(); connection.Dispose(); ``` 通过以上步骤,我们可以实现在 WinForms 应用程序中调用 Bartender 来连接 SQL Server 并实现打印功能。当用户点击按钮时,将会从数据库中获取数据,然后使用 Bartender打印模板将数据打印出来。 ### 回答2: 在使用WinForms调用Bartender .btw文件连接SQL Server实现打印的过程中,需要以下步骤: 1. 首先,确保已经在计算机上安装了Bartender软件,并且已经连接了所需的打印机。 2. 在WinForms应用程序中,添加对Bartender的引用,并在代码中导入Bartender相关的命名空间。 3. 创建一个BartenderEngine对象,通过该对象可以操作Bartender软件的功能。 4. 使用BartenderEngine对象的Open方法打开指定的.btw文件,该文件可以包含需要打印的标签模板,并进行相应的设置。 5. 在连接SQL Server之前,需要确保已经在Bartender中配置了正确的数据库连接信息,包括数据库类型、服务器名称、数据库名称、登录凭据等。 6. 使用BartenderEngine对象的SetDatabaseLogOn方法来设置SQL Server连接信息,参数包括数据库类型、服务器名称、数据库名称、登录名和密码。 7. 如果需要在打印前执行一些查询操作,可以使用BartenderEngine对象的ExecuteSQLQuery方法,执行SQL查询语句,并获取返回的数据。 8. 在准备好数据后,可以通过BartenderEngine对象的PrintOut方法来实际进行打印操作,参数包括要打印的份数、输出的打印机名称等。 9. 打印完成后,可以使用BartenderEngine对象的Close方法关闭.btw文件。 总之,通过以上步骤,我们可以在WinForms应用程序中调用Bartender .btw文件连接SQL Server实现打印操作。 ### 回答3: 在Winforms程序中调用Bartender软件打印时,可以通过调用`.btw`文件并连接到SQL Server来实现。 首先需要确保Bartender软件已经安装在计算机上,并且数据库中已经具备需要打印的数据。 接下来在Winforms应用程序中,你可以使用Bartender的API来调用并连接到SQL Server。 首先,你需要添加对Bartender的COM组件的引用。可以在项目中右键点击"引用",选择"添加引用",然后选择Bartender的COM组件并添加。 在代码中,你可以使用`BarTender.Application`类来创建一个Bartender的应用程序对象,并打开你的`.btw`文件。 ```csharp using BarTender; ... // 创建Bartender应用程序对象 Application bartenderApp = new Application(); // 打开btw文件 Document bartenderDoc = bartenderApp.Open(@"C:\Path\To\Your\File.btw"); ``` 接下来,你需要通过连接字符串来连接到SQL Server数据库。你可以使用`System.Data.SqlClient`命名空间中的`SqlConnection`类来实现。 ```csharp using System.Data.SqlClient; ... // 创建SQL Server连接字符串 string connectionString = "Data Source=YourServer;Initial Catalog=YourDatabase;User ID=YourUsername;Password=YourPassword"; // 创建SQL Server连接 SqlConnection sqlConnection = new SqlConnection(connectionString); sqlConnection.Open(); ``` 现在,你可以将连接字符串传递给Bartender应用程序对象,并使用`Format.Database.SetConnectionStrings()`方法来连接到数据库。 ```csharp // 将SQL连接字符串传递给Bartender bartenderApp.Format.Database.SetConnectionStrings(sqlConnection.ConnectionString); ``` 最后,你可以使用`Document.PrintOut()`方法将数据打印Bartender中,然后使用Bartender软件的打印功能将其输出。 ```csharp // 打印数据 bartenderDoc.PrintOut(false, false); ``` 以上是使用Winforms调用Bartender软件并连接到SQL Server实现打印的基本步骤。你可以根据自己的需求进行进一步的开发和调整。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值