using System; using System.Collections.Generic; using System.IO; using System.Text; using System.Linq; using System.Threading.Tasks; namespace BBWY.Client.Helpers { public class BartenderHelper { #region BarTender打印方法 private static BarTender.Application btApp = new BarTender.Application(); private static BarTender.Format btFormat = new BarTender.Format(); public string TemplateFile { set; get; } public string ErrorMsg { set; get; } public bool Status { set; get; } /// /// 使用 BarTender进行打印,批量打印 /// /// BarTender模板标签 /// 打印数据 /// 回调消息 /// 打印数量 /// 打印OK true public bool BTPrint(string labelName, Dictionary labelParamsValues, out string msg, int printQty = 1, string printer = "Deli DL-730C(NEW)") { 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.Equals(printer)) { printerFlag = true; } } if (!printerFlag) { msg = "Error:Printer Name Error"; return false; } } //找到打印模板的标签页 btFormat = btApp.Formats.Open(labelName, false, ""); if (!string.IsNullOrEmpty(printer)) { btFormat.Printer = printer; } if (btApp != null) { //btFormat.IdenticalCopiesOfLabel = printQty; //btFormat.PrintOut(true, 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; } btFormat.IdenticalCopiesOfLabel = 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: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 (btApp != null) { btApp.Quit(BarTender.BtSaveOptions.btSaveChanges);//界面退出时同步退出bartender进程 //lblApp.Documents.CloseAll(true); //lblDoc = null; } GC.Collect(); } } #endregion #region 数据库调用打印 /// /// 打印从文本数据库中打 /// /// public bool BTPrintByDataBase(string path, string filePath, string printer = "") { try { BarTender.Application btapp; BarTender.Format btformat; btapp = new BarTender.Application(); btformat = btapp.Formats.Open(path, false, ""); BarTender.Database database = btformat.Databases.GetDatabase(1); if (!string.IsNullOrEmpty(printer)) { btformat.Printer = printer; } database.TextFile.FileName = filePath; //database.SQLStatement += $" where printID='{printId}' order by RIGHT(Var1,7)";//填写SQL语句附加条件 //database.Password = VSLoginInfo.SQLPassword; //database.User = VSLoginInfo.SQLUser; btformat.PrintOut(false, false); //第二个参数设置是否跳出打印属性; btapp.Quit(BarTender.BtSaveOptions.btDoNotSaveChanges);//退出时同步退出bartender进程(SQL条件会改变,不更新模板信息) } catch { return false; } return true; } /// /// 打印从文本数据库中打 /// /// 模板地址 /// 数据行,一行一个标签,第一行为标题,多列逗号分割 /// public bool BTPrintByDataBase(string templatepath, List dataLine, string printer = "") { try { BarTender.Application btapp; BarTender.Format btformat; btapp = new BarTender.Application(); var filepath = WriteLog(dataLine, "", Guid.NewGuid().ToString()); btformat = btapp.Formats.Open(templatepath, false, ""); BarTender.Database database = btformat.Databases.GetDatabase(1); if (!string.IsNullOrEmpty(printer)) { btformat.Printer = printer; } database.TextFile.FileName = filepath; //database.SQLStatement += $" where printID='{printId}' order by RIGHT(Var1,7)";//填写SQL语句附加条件 //database.Password = VSLoginInfo.SQLPassword; //database.User = VSLoginInfo.SQLUser; btformat.PrintOut(false, false); //第二个参数设置是否跳出打印属性; btapp.Quit(BarTender.BtSaveOptions.btDoNotSaveChanges);//退出时同步退出bartender进程(SQL条件会改变,不更新模板信息) } catch { return false; } return true; } /// /// 写文本 /// /// public static string WriteLog(List lines, string fileDirectory = "", string guid = "") { try { string path1 = Environment.CurrentDirectory + Path.Combine("/printFile/") + fileDirectory; if (!Directory.Exists(path1)) { //创建索引目录 Directory.CreateDirectory(path1); } string path = path1 + "/" + DateTime.Now.ToString("yyyy-MM-dd") + guid + ".txt"; FileStream stream = null; if (File.Exists(path)) { File.Delete(path); } stream = new FileStream(path, FileMode.Create); StreamWriter writer = new StreamWriter(stream); for (var i = 0; i < lines.Count; i++) { writer.Write(lines[i] + Environment.NewLine); } writer.Flush(); writer.Close(); stream.Close(); return path; } catch { } finally { } return ""; } #endregion public static void ExportToFile(string btFileName, Dictionary data) { //BarTender.Application btApp = new BarTender.Application(); //BarTender.Format btFormat; btFormat = btApp.Formats.Open(btFileName); foreach (var key in data.Keys) { btFormat.SetNamedSubStringValue(key, data[key]); } //btFormat.SaveAs(btFileName, true); btFormat.ExportToFile(@"E:/temp.jpg", "jpg", BarTender.BtColors.btColors24Bit, BarTender.BtResolution.btResolutionPrinter, BarTender.BtSaveOptions.btSaveChanges); btFormat.Close(BarTender.BtSaveOptions.btSaveChanges); btApp.Quit(BarTender.BtSaveOptions.btSaveChanges); } } }