使用組件
提取碼:2bxq
打印 BarTender 文檔
http://help.seagullscientific.com/2016/en/Subsystems/ActiveX/ActiveX.htm#printing_formats.htm
打印情況一:
如果打印次數不頻繁,一次只是打印一個模板,前端可以進行直接獲取到數據的情況,並且打印紙張是一行一列的,如:A4紙張單據打印。可以使用這種簡單的方式:
private void btnPrint_Click(object sender, EventArgs e) { BarTender.Application btapp; BarTender.Format btformat; btapp = new BarTender.Application(); string str = $"{Application.StartupPath}\\model.btw";//程序目錄下 btformat = btapp.Formats.Open(str, false, ""); btformat.SetNamedSubStringValue("Var1", "內容數據1");//條碼 btformat.SetNamedSubStringValue("Var2", "內容數據2");//底部 btformat.PrintOut(false, false); //第二個參數設置是否跳出打印屬性; btapp.Quit(BarTender.BtSaveOptions.btSaveChanges);//退出時同步退出bartender進程 }
PS:如果是一行多列的打印紙張,也可以把模板設置成多列,然后使用上面這種方法。不過就需要注意打印數據源的整理。
模板例子設置如下:
- 只需要添加組件;
- 修改嵌入數據源名稱(名稱和 etNamedSubStringValue 代碼 Name 對應);
打印情況二:
如果打印是批量、多排的、使用單模板,如:產品條碼條碼打印。使用連接數據庫方式打印。這里使用SQL Server方式連接例子
public void btnPrint_Click(bool UpdatePrintState) { #region 設置臨時打印數據源 string printId = Guid.NewGuid().ToString("N");//打印批次標記 //情況一:創建一個臨時打印表,把數據插入到臨時表 //情況二:直接根據條件去數據庫查詢(不需要重新創建數據) #endregion #region 通過barTender模板來打印 BarTender.Application btapp; BarTender.Format btformat; btapp = new BarTender.Application(); string str = $"{Application.StartupPath}\\model2.btw";//程序目錄下 btformat = btapp.Formats.Open(str, false, ""); BarTender.Database database = btformat.Databases.GetDatabase(1); 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條件會改變,不更新模板信息) #endregion }
批量分批次打印
BarTender.Application btapp; BarTender.Format btformat; BarTender.Messages btMsgs; BarTender.BtPrintResult btPrintRtn; btapp = new BarTender.Application(); btformat = btapp.Formats.Open(str, false, ""); BarTender.Database database = btformat.Databases.GetDatabase(1); database.Password = VSLoginInfo.SQLPassword; database.User = VSLoginInfo.SQLUser; string sql = database.SQLStatement; foreach (string thisid in ids) { bar.StepProgressBar(1, string.Format("打印{0}任務...", thisid)); database.SQLStatement = sql + string.Format(" where printID='{0}' order by CONVERT(int,RIGHT(Var1,6))", thisid); //打印文檔 btPrintRtn = btformat.Print("打印:"+thisid, true, -1, out btMsgs); // 檢查是否有錯誤信息 if (btPrintRtn != BarTender.BtPrintResult.btSuccess) { foreach (BarTender.Message msg in btMsgs) { MessageBox.Show(msg.Message); } } Thread.Sleep(2000);//休眠2秒后執行 } btapp.Quit(BarTender.BtSaveOptions.btDoNotSaveChanges);//退出時同步退出bartender進程
批量打印異常問題:
實際應用中有時候會出現打印任務卡死(斑馬打印機),具體情況為:條碼已經打印,但是任務打印任務卡住了,無法結束,重啟電腦后會打重復。猜測可能是打印頁面太多,可以把數據分多次打印任務,每次調用打印后休眠2秒,Thread.Sleep(2000);。
模板例子設置如下:
- 數據庫設置:連接數據庫、選擇表、設置查詢語句;
- 修改嵌入數據源類型為【數據庫字段】;
- 選擇數據庫綁定字段;
- 打印頁面設置成一排多列;