实现如图界面
此界面主要用于系统线外列印管控,所以参数多半是输入传入
点击打印代码实现
//打印功能
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, DictionarylabelParamsValues, 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下载到本地,然后输入参数后即可进行打印。
源码和纯净版的安装包可以在此路径下载



