C#使用BarTender打印二維碼,紙張一行一列或多列


使用組件

Interop.BarTender.dll

提取碼: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:如果是一行多列的打印紙張,也可以把模板設置成多列,然后使用上面這種方法。不過就需要注意打印數據源的整理。

模板例子設置如下:

  1. 只需要添加組件;
  2. 修改嵌入數據源名稱(名稱和 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);。

 

模板例子設置如下:

  1. 數據庫設置:連接數據庫、選擇表、設置查詢語句;
  2. 修改嵌入數據源類型為【數據庫字段】;
  3. 選擇數據庫綁定字段;
  4. 打印頁面設置成一排多列;

 

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM