栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

实现Bartender和Codesoft在C#中进行打印

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

实现Bartender和Codesoft在C#中进行打印

实现如图界面

此界面主要用于系统线外列印管控,所以参数多半是输入传入
点击打印代码实现

   //打印功能
        private void button1_Click(object sender, EventArgs e)
        {
            LogDoc.GetInstance().WriteLog(LogLevel.Debug, "工单:"+ cmbWo.Text+" 销售型号:"+txtXsModelNo.Text+" 产品型号:"+txtXsPartNo.Text);
            string msg = string.Empty;
            string sqlDefault = string.Empty;
            int PrintQty = 1;
            string printer = "";

            if (cmbTemplate.Text == ""||cmbModel.Text=="" ||cmbPart.Text==""||cmbWo.Text=="")
            {
                ErrorMSG("资料不完整,溫馨提示");
                return;
            }

            if (lblBatchNo.Text == "")
            {
                ErrorMSG("工单:"+cmbWo.Text+"没有对应的批次号,请先维护批次号再进行打印!!!");
                return;
            }       
            try
            {
                string labFileName = cmbTemplate.Text;

                if (!File.Exists(labFileName))
                {
                    MessageBox.Show("沒有找到模板文件:" + labFileName, "溫馨提示");
                    return;
                }
                //判断选择的是否是.Lab还是其他 LabelFile.Substring(LabelFile.LastIndexOf("."))
                if (cmbTemplate.Text.Substring(cmbTemplate.Text.LastIndexOf(".")) == ".Lab")
                {
                    //GetPrintData(sender, e);
                    if (!p.OpenApp(LabelPrintHelper.BarCodeType.CodeSoft))
                    {
                        ErrorMSG(p.ErrorMsg + Environment.NewLine);
                        return;
                    }
                    if (chkSN.Checked)
                    {
                        //按照工单将序列号取出
                        DataTable dt = controller.GetWoSn(cmbWo.Text);
                        if (dt.Rows.Count > 0)
                        {
                            foreach (DataRow item in dt.Rows)
                            {
                                string strCSN = item["SERIAL_NUMBER"].ToString();
                                Dictionary commParamvalue = new Dictionary();
                                commParamvalue.Add("ModelNo", txtXsModelNo.Text); //销售型号
                                commParamvalue.Add("PartNo", txtXsPartNo.Text);
                                commParamvalue.Add("BatchNo", lblBatchNo.Text);
                                commParamvalue.Add("SerialNo", strCSN);  //序列号
                                commParamvalue.Add("QRcodeCSN", strCSN);  //序列号
                                bool CSPrint = p.CSPrint(cmbTemplate.Text, commParamvalue, out msg, PrintQty, printer);
                                if (!CSPrint)
                                {
                                    ErrorMSG(msg + "打印失败,溫馨提示");
                                    return;
                                }
                                LogDoc.GetInstance().WriteLog(LogLevel.Debug,"工单:"+ cmbWo.Text+" 销售型号:"+ txtXsModelNo.Text+" 批次:"+
                                    lblBatchNo.Text+"序列号:"+strCSN);
                            }
                        }
                    }
                    else
                    {
                      
                        Dictionary commParamvalues = new Dictionary();
                        commParamvalues.Add("ModelNo", txtXsModelNo.Text);
                        commParamvalues.Add("PartNo", txtXsPartNo.Text);
                        commParamvalues.Add("BatchNo", lblBatchNo.Text);
                        if (txtSuttle.Text != "" || txtRoughWeight.Text != "" || txtQty.Text != "")
                        {
                            commParamvalues.Add("NW", txtSuttle.Text + lblNwUnit.Text);  //净重
                            commParamvalues.Add("GW", txtRoughWeight.Text + lblGwUnit.Text); //毛重
                            commParamvalues.Add("Qty", txtQty.Text + lblQtyUnit.Text);
                        }
                        for (int i = 1; i <= Convert.ToInt32(txtPrintCount.Text); i++)
                        {
                            bool CSPrint = p.CSPrint(cmbTemplate.Text, commParamvalues, out msg, i, printer);
                            if (CSPrint == false)
                            {
                                ErrorMSG(msg + "打印失败,溫馨提示");
                                return;
                            }
                            LogDoc.GetInstance().WriteLog(LogLevel.Debug, " 工单:" + cmbWo.Text + " 销售型号:" + txtXsModelNo.Text + " 批次:" +
                                 lblBatchNo.Text + " 净重:" + (txtSuttle.Text + lblNwUnit.Text).ToString()+" 毛重:"+
                                 (txtRoughWeight.Text + lblGwUnit.Text).ToString()+" 数量:"+ (txtQty.Text + lblQtyUnit.Text).ToString());
                        }
                    }                 
                }
                //判断选择的是否是.btw还是其他 LabelFile.Substring(LabelFile.LastIndexOf("."))
                if (cmbTemplate.Text.Substring(cmbTemplate.Text.LastIndexOf(".")) == ".btw")
                {              
                    if (lblBatchNo.Text != "" && chkSN.Checked == true) //有对应批号并且勾选了按序列号打印的
                    {
                        //按照工单将序列号取出
                        DataTable dt = controller.GetWoSn(cmbWo.Text);
                        if (dt.Rows.Count > 0)
                        {
                            foreach (DataRow item in dt.Rows)
                            {
                                string strCSN = item["SERIAL_NUMBER"].ToString();
                                Dictionary commParamvalue = new Dictionary();
                                commParamvalue.Add("ModelNo", txtXsModelNo.Text); //销售型号
                                commParamvalue.Add("PartNo", txtXsPartNo.Text);
                                commParamvalue.Add("BatchNo", lblBatchNo.Text);
                                commParamvalue.Add("SerialNo", strCSN);  //序列号
                                commParamvalue.Add("QRcodeCSN", strCSN);  //序列号
                                bool BTPrint = p.BTPrint(cmbTemplate.Text, commParamvalue, out msg, PrintQty, printer);
                                if (!BTPrint)
                                {
                                    ErrorMSG(msg + "打印失败,溫馨提示");
                                    return;
                                }
                                LogDoc.GetInstance().WriteLog(LogLevel.Debug, "工单:" + cmbWo.Text + " 销售型号:" + txtXsModelNo.Text + " 批次" +
                                 lblBatchNo.Text + " 序列号" + strCSN);
                            }
                        }
                    }
                    if (chkSN.Checked == false)
                    {
                        Dictionary commParamvalues = new Dictionary();
                        commParamvalues.Add("ModelNo", txtXsModelNo.Text);
                        commParamvalues.Add("PartNo", txtXsPartNo.Text);
                        commParamvalues.Add("BatchNo", lblBatchNo.Text);
                        commParamvalues.Add("NW", txtSuttle.Text+lblNwUnit.Text);  //净重
                        commParamvalues.Add("GW", txtRoughWeight.Text+lblGwUnit.Text); //毛重
                        commParamvalues.Add("Qty", txtQty.Text+lblQtyUnit.Text);

                        for (int i = 1; i <= Convert.ToInt32(txtPrintCount.Text); i++)
                        {
                           bool BTPrint = p.BTPrint(cmbTemplate.Text, commParamvalues, out msg, i, printer);
                            if (BTPrint == false)
                            {
                                ErrorMSG(msg+"打印失败,溫馨提示");
                                return;
                            }
                            LogDoc.GetInstance().WriteLog(LogLevel.Debug, "工单:" + cmbWo.Text + " 销售型号:" + txtXsModelNo.Text + " 批次:" +
                               lblBatchNo.Text + " 净重:" + (txtSuttle.Text + lblNwUnit.Text).ToString() + " 毛重:" +
                               (txtRoughWeight.Text + lblGwUnit.Text).ToString() + " 数量:" + (txtQty.Text + lblQtyUnit.Text).ToString());
                        }
                    }                  
                }
                SuccessMSG("打印成功");//Environment.NewLine+
            }
            catch (Exception ex)
            {
               
                MessageBox.Show(ex.Message);
            }
        }

模板需要设定对应的参数
Bartender需要添加Interop.BarTender.dll,调用Bartender打印的话电脑没有安装Bartender软件会无法打印
调用Codesoft打印需要安装此软件,可以是纯净版

调用的打印Codesoft的方法代码

   /// 
        /// 使用CodeSoft进行打印,单PCS打印
        /// 
        /// CodeSoft标签名称
        /// 打印数据
        /// 消息
        /// 打印数量
        /// 打印OK true
        public bool CSPrint(string labelName, Dictionary labelParamsValues, out string msg, int printQty = 1, string printer = "")
        {
            try
            {
                bool CheckLabelVar = true;
                string tmpMsg = "";
                this.TemplateFile = labelName;
                if (!File.Exists(TemplateFile))
                {
                    msg = "Error:Label File Not Exists" + TemplateFile;
                    this.ErrorMsg = msg;
                    return false;
                }

                if (!string.IsNullOrEmpty(printer))
                {
                    bool printerFlag = false;
                    foreach (string sPrint in System.Drawing.Printing.PrinterSettings.InstalledPrinters)//获取所有打印机名称
                    {
                        if (sPrint == printer) { printerFlag = true; }
                    }

                    if (!printerFlag)
                    {
                        msg = "Error:Printer Name Error";
                        return false;
                    }
                }
                if (lblApp != null)
                {
                    //lblApp.Documents.Open(labelName, true);
                    lblApp.Documents.Open(labelName, false);
                    lblDoc = lblApp.ActiveDocument;

                    

                    var datacount = lblDoc.Variables.FormVariables.Count;
                    Dictionary lbldicVar = new Dictionary();

                    for (int i = 1; i <= datacount; i++)
                    {
                        lbldicVar[lblDoc.Variables.FormVariables._Item(i).Name] = "";
                        //lblDoc.Variables.FormVariables.Item(KeyName).Value = KeyValue;
                    }

                    if (!string.IsNullOrEmpty(printer)) { lblDoc.Printer.SwitchTo(printer); }

                    if (labelParamsValues.Count > 0)
                    {
                        foreach (var item in lbldicVar)
                        {
                            if (labelParamsValues.Count(q => q.Key.ToUpper() == item.Key.ToUpper()) == 0)
                            {
                                //msg = "Label Var value missing:" + item.Key;
                                //this.ErrorMsg = msg;
                                //this.Status = false;
                                //return false;

                                tmpMsg = "Label Var value missing:  " + item.Key;
                                if (CheckLabelVar)
                                {
                                    this.ErrorMsg = tmpMsg;
                                    CheckLabelVar = false;
                                }
                                else
                                {
                                    this.ErrorMsg = this.ErrorMsg + (char)10 + tmpMsg;
                                }
                            }
                        }

                        if (!CheckLabelVar)
                        {
                            msg = this.ErrorMsg;
                            this.Status = false;
                            return false;
                        }

                        foreach (var param in labelParamsValues.Keys)
                        {

                            if (lbldicVar.Keys.Count(q => q.ToUpper() == param.ToUpper()) > 0)
                            {
                                var labvar = lbldicVar.Keys.First(q => q.ToUpper() == param.ToUpper());
                                if (string.IsNullOrEmpty(labelParamsValues[param]))
                                {
                                    //this.ErrorMsg = "Label Var value is null:" + labvar;
                                    //msg = ErrorMsg;
                                    //this.Status = false;
                                    //return false;


                                    tmpMsg = "Label Var value is null:" + labvar;
                                    if (CheckLabelVar)
                                    {
                                        this.ErrorMsg = tmpMsg;
                                        CheckLabelVar = false;
                                    }
                                    else
                                    {
                                        this.ErrorMsg = this.ErrorMsg + (char)10 + tmpMsg;
                                    }
                                }
                                lblDoc.Variables.FormVariables.Item(labvar).Value = labelParamsValues[param];
                            }

                        }

                        if (!CheckLabelVar)
                        {
                            msg = this.ErrorMsg;
                            this.Status = false;
                            return false;
                        }

                        //lblDoc.PrintLabel(printQty, 1, 1, 1, 1, "");
                        lblDoc.PrintDocument(printQty);


                        lblDoc.FormFeed();
                        msg = "OK";
                        this.ErrorMsg = msg;
                        this.Status = true;
                        return true;
                    }
                    else 
                    {
                        msg = "Print Data is null";
                        this.ErrorMsg = msg;
                        this.Status = false;
                        return false;
                    }

                }
                else
                {
                    msg = "Error:CodeSoft Application can't boot up";
                    this.ErrorMsg = msg;
                    this.Status = false;
                    return false;
                }

            }
            catch (Exception ex)
            {
                msg = ex.Message + ex.InnerException;
                this.ErrorMsg = msg;
                this.Status = false;
                return false;
            }
            finally
            {
                if (lblApp != null)
                {
                    lblApp.Documents.CloseAll(true);
                    lblDoc = null;
                }
                GC.Collect();
            }
        }

调用打印bartender的打印方法的代码

#region  BarTender打印方法
        private static BarTender.Application btApp = new BarTender.Application();
        private static BarTender.Format btFormat = new BarTender.Format();
        /// 
        /// 使用 BarTender进行打印,批量打印
        /// 
        ///  BarTender标签名称
        /// 打印数据
        /// 消息
        /// 打印数量
        /// 打印OK true
        public bool BTPrint(string labelName, Dictionary labelParamsValues, out string msg, int printQty = 1, string printer = "")
        {
            try
            {
                bool CheckLabelVar = true;
                string tmpMsg = "";
                this.TemplateFile = labelName;

                if (!File.Exists(TemplateFile))
                {
                    msg = "Error:Label File Not Exists" + TemplateFile;
                    this.ErrorMsg = msg;
                    return false;
                }
                if (!string.IsNullOrEmpty(printer))
                {
                    bool printerFlag = false;
                    foreach (string sPrint in System.Drawing.Printing.PrinterSettings.InstalledPrinters)//获取所有打印机名称
                    {
                        if (sPrint == printer) { printerFlag = true; }
                    }

                    if (!printerFlag)
                    {
                        msg = "Error:Printer Name Error";
                        return false;
                    }
                }
                if (btApp != null)
                {
                    //找到打印模板的标签页
                    btFormat = btApp.Formats.Open(labelName, false, "");

                    //取模板所有的值
                    string StrBT = btFormat.NamedSubStrings.GetAll("#", "$");

                    //将模板所有值进行拆分
                    StrBT = StrBT.Substring(0, StrBT.Length - 1);
                    string[] StrBTValue = StrBT.Split(new char[] { '$' });

                    //循环将模板的值写入lbldicVar中
                    Dictionary lbldicVar = new Dictionary();
                    for (int i = 0; i < StrBTValue.Length; i++)
                    {
                        string[] cc = StrBTValue[i].Split(new char[] { '#' });

                        lbldicVar.Add(cc[0].ToString(), cc[1].ToString()); //0是模板的参数 1是参数值
                    }
                    if (labelParamsValues.Count > 0)
                    {
                        foreach (var item in lbldicVar)
                        {
                            if (labelParamsValues.Count(q => q.Key.ToUpper() == item.Key.ToUpper()) == 0)
                            {
                                tmpMsg = "数据源缺少参数:  " + item.Key;
                                if (CheckLabelVar)
                                {
                                    this.ErrorMsg = tmpMsg;
                                    CheckLabelVar = false;
                                }
                                else
                                {
                                    this.ErrorMsg = this.ErrorMsg + (char)10 + tmpMsg;
                                }
                            }
                        }
                        if (!CheckLabelVar)
                        {
                            msg = this.ErrorMsg;
                            this.Status = false;
                            return false;
                        }
                        foreach (var param in labelParamsValues.Keys)
                        {
                            if (lbldicVar.Keys.Count(q => q.ToUpper() == param.ToUpper()) > 0)
                            {
                                var labvar = lbldicVar.Keys.First(q => q.ToUpper() == param.ToUpper());

                                if (string.IsNullOrEmpty(labelParamsValues[param]))
                                {
                                    tmpMsg = "数据源参数值为空:" + labvar;
                                    if (CheckLabelVar)
                                    {
                                        this.ErrorMsg = tmpMsg;
                                        CheckLabelVar = false;
                                    }
                                    else
                                    {
                                        this.ErrorMsg = this.ErrorMsg + (char)10 + tmpMsg;
                                    }
                                }
                                btFormat.SetNamedSubStringValue(param, labelParamsValues[param]);
                            }
                        }
                        if (!CheckLabelVar)
                        {
                            msg = this.ErrorMsg;
                            this.Status = false;
                            return false;
                        }
                        // lblDoc.PrintDocument(printQty);

                        //第二个false设置打印时是否跳出打印属性
                        btFormat.PrintOut(true, false);
                        //退出是是否保存标签
                        btFormat.Close(BarTender.BtSaveOptions.btSaveChanges);
                        //lblDoc.FormFeed();
                        msg = "OK";
                        this.ErrorMsg = msg;
                        this.Status = true;
                        return true;
                    }
                    else
                    {
                        msg = "Print Data is null";
                        this.ErrorMsg = msg;
                        this.Status = false;
                        return false;
                    }
                }
                else
                {
                    msg = "Error:BarTender Application can't boot up";
                    this.ErrorMsg = msg;
                    this.Status = false;
                    return false;
                }
            }
            catch (Exception ex)
            {
                msg = ex.Message + ex.InnerException;
                this.ErrorMsg = msg;
                this.Status = false;
                return false;
            }
            finally
            {
                if (btApp != null)
                {
                    btApp.Quit(BarTender.BtSaveOptions.btSaveChanges);//界面退出时同步退出bartender进程
                    //lblApp.Documents.CloseAll(true);
                    //lblDoc = null;
                }
                GC.Collect();
            }
        }
        #endregion

实现本地log存放如图


保存在启动文件的目录下

实现思路:先把模板存入数据表S_FILE,然后用配置表S_BASE选择机种带出此机种设定的模板名称,在选择机种的同时显示模板名称并将模板从S_FILE下载到本地,然后输入参数后即可进行打印。

源码和纯净版的安装包可以在此路径下载

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/910785.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号