日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

postek二次开发_20190626_二次开发BarTender打印机_C#代码_一边读取TID_一边打印_打印机POSTEK...

發布時間:2024/7/5 C# 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 postek二次开发_20190626_二次开发BarTender打印机_C#代码_一边读取TID_一边打印_打印机POSTEK... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

demo代碼如下:

private void btnPrint_Click(object sender, EventArgs e)

{

if (this.btnPrint.Text == "停止打印")

{

SetBtnPrintUIEnable();

return;

}

//禁用界面上的相關按鈕

SetBtnPrintUIDisable();

var dt = new DataTable();

new Task(

() =>

{

///開始的打印

//1. 獲取選中的dgv源

dt = GetDgvDataSourceChecked();

if (dt.Rows.Count <= 0)

{

SetTxtMessageInfo(this.txtMessageError, "沒有選中任何數據, 不能打印");

Common.Contactor.ShowErrorMessage($"沒有選中任何數據, 不能打印");

SetBtnPrintUIEnable();

return;

}

Thread.Sleep(500);

SetTxtMessageInfo(this.txtMessageInfo, "數據校驗中. . .");

//開始打印

string tempPath = ConfigHelper.GetConfigString("templateName"); //模板名稱

Thread.Sleep(500);

SetTxtMessageInfo(this.txtMessageInfo, $"當前使用的模板名稱{tempPath}");

if (string.IsNullOrEmpty(tempPath.Trim()))

{

SetTxtMessageInfo(this.txtMessageError ,$"模板文件{tempPath}可能不存在, 請調整");

Common.Contactor.ShowErrorMessage($"模板文件{tempPath}可能不存在, 請調整");

SetBtnPrintUIEnable();

return;

}

if (Path.GetExtension(tempPath).Equals("btw"))

{

SetTxtMessageInfo(this.txtMessageError, $"不支持的文件格式{tempPath}");

Common.Contactor.ShowErrorMessage($"不支持的文件格式{tempPath}");

SetBtnPrintUIEnable();

return;

}

string FileName = Path.GetFileName(tempPath);

string primKey = ConfigHelper.GetConfigString("primKey");

Thread.Sleep(500);

SetTxtMessageInfo(this.txtMessageInfo, "數據校驗完畢, 準備開始打印. . .");

using (Engine engine = new Engine(true))

{

engine.Start();

if (format != null)

{

format.Close(SaveOptions.DoNotSaveChanges);

}

format = engine.Documents.Open(tempPath);// 打開路徑上的btw模板文件

//設置默認打印機

format.PrintSetup.PrinterName = new System.Drawing.Printing.PrintDocument().PrinterSettings.PrinterName;

format.PrintSetup.IdenticalCopiesOfLabel = printCount;// Convert.ToInt32(GetControlText(this.cboPrintCount)); //

format.PrintSetup.NumberOfSerializedLabels = 1;

var dcs = dt.Columns.Cast().Select((dc) => { return dc.Caption; }).Skip(1); //將第一個跳出去; 其實第一個跳不跳都行

var templateStrs = format.SubStrings.Select((s) => { return s.Name; }).ToArray();

string diffStr = string.Join(",", templateStrs.Except(dcs));

if (diffStr.Trim().Length > 0)

{

SetTxtMessageInfo(this.txtMessageError, $"在您的模板文件 {FileName} 中, 有這些\r\n {diffStr} \r\n字段不被即將打印的內容識別, \r\n您必須調整模板或者修改數據獲取語句后才能繼續");

Common.Contactor.ShowErrorRestart($"在您的模板文件 {FileName} 中, 有這些\r\n {diffStr} \r\n字段不被即將打印的內容識別, \r\n您必須調整模板或者修改數據獲取語句后才能繼續");

SetBtnPrintUIEnable();

format = null;

return;

}

//"templateStr" value="捆號,花型,長度,重量,機臺,驗布工,貨架號,連幅標記,紀錄時間,捆號狀態,電子標簽日期,電子標簽編號"

lock (engine) //一定要鎖定打印引擎

{

for (int i = 0; i < dt.Rows.Count; i++)

{

object oPrimKey = dt.Rows[i][primKey]; //獲取主鍵列對應的值

if (oPrimKey == DBNull.Value || oPrimKey.ToString().Length <= 0)

{

SetTxtMessageInfo(this.txtMessageError, $"主鍵{primKey}數據錯誤, 它的值不能為NULL或者空字符");

Common.Contactor.ShowErrorMessage($"主鍵{primKey}數據錯誤, 它的值不能為NULL或者空字符");

SetBtnPrintUIEnable();

format = null;

return;

}

string currentPrimkey = oPrimKey.ToString();

string tid = operatorRFIDLabel.GetRFID_TID(); //讀取標簽中的TID

if (!RegValidate.WordOrNumber(tid))

{

SetTxtMessageInfo(this.txtMessageError, $"標簽內容TID獲取錯誤{tid}, 打印將停止");

Common.Contactor.ShowErrorMessage($"標簽內容獲取錯誤{tid}, 打印將停止");

SetBtnPrintUIEnable();

format = null;

return;

}

for (int j = 0; j < templateStrs.Length; j++)

{

format.SubStrings[templateStrs[j]].Value = dt.Rows[i][templateStrs[j]].ToString(); //給打印模板中對應的參數SN賦值

}

Messages messages;

int waitForCompletionTimeout = 10000; // 10 seconds

System.Diagnostics.Trace.WriteLine("→→→→→→→→→TID是" + tid);

Result r = format.Print("", waitForCompletionTimeout, out messages);

// string messageString = "\n\nMessages:";

// Thread.Sleep(500);

SetTxtMessageInfo(this.txtMessageInfo, $"正在打印第{i + 1}份, 它的主鍵編號是 {oPrimKey} ");

Thread.Sleep(2000); //根據博思得打印機實測,需要停2s, 否則TID將重復

寫數據庫, 不能阻塞來寫庫, 會影響打印機讀取TID超時

queuePrint.Enqueue(string.Format(ConfigHelper.GetConfigString("updateTid"), tid, currentPrimkey.Trim()));

string com = ConfigHelper.GetConfigString("insertMysql");

string HN_NO = dt.Rows[i]["花型"] == DBNull.Value ? string.Empty : dt.Rows[i]["花型"].ToString();

string GH_NO = dt.Rows[i]["捆號"] == DBNull.Value ? string.Empty : dt.Rows[i]["捆號"].ToString();

string QTY_XD = dt.Rows[i]["長度"] == DBNull.Value ? string.Empty : dt.Rows[i]["長度"].ToString();

string QTY_GJ = dt.Rows[i]["重量"] == DBNull.Value ? string.Empty : dt.Rows[i]["重量"].ToString();

string JT_NO = dt.Rows[i]["機臺"] == DBNull.Value ? string.Empty : dt.Rows[i]["機臺"].ToString();

string YB_NO = dt.Rows[i]["驗布工"] == DBNull.Value ? string.Empty : dt.Rows[i]["驗布工"].ToString();

string FJ_NO = dt.Rows[i]["貨架號"] == DBNull.Value ? string.Empty : dt.Rows[i]["貨架號"].ToString();

string LF_ID = dt.Rows[i]["連幅標記"] == DBNull.Value ? string.Empty : dt.Rows[i]["連幅標記"].ToString();

DateTime USR_DD = dt.Rows[i]["紀錄時間"] == DBNull.Value ? DateTime.Now : Convert.ToDateTime(dt.Rows[i]["紀錄時間"]);

string GH_STA = dt.Rows[i]["捆號狀態"] == DBNull.Value ? string.Empty : dt.Rows[i]["捆號狀態"].ToString();

string strsql = string.Format(ConfigHelper.GetConfigString("insertMysql"), tid, HN_NO, GH_NO, QTY_XD, QTY_GJ, JT_NO, YB_NO, FJ_NO, LF_ID, USR_DD, GH_STA);

queuePrint.Enqueue(strsql);

}

}

format.Close(SaveOptions.DoNotSaveChanges);

format = null;

engine.Stop();

//啟動那些按鈕

SetBtnPrintUIEnable();

}

}

).Start();

/*1) Print方法:這個就是最常用的打印方法,里面可設置打印的任務名,是否等待打印完成,等待超時時間,打印過程輸出的信息。

2) PrintOut方法:如果你需要在打印時出現打印設置對話框和狀態框,你可以選擇這個方法來實現。

3) Save方法:保存對Format的更改。

4) SetNamedSubStringValue方法:設置某個特定的SubString的值,這里就可以作為一個動態改變打印內容的方法。

5) SetPromt方法:跟SetNamedSubStringValue方法類似,不過他設置的是打印提示的值,某些標簽通過設置可以在打印的時候彈出對話框,輸入某些變量的值來改變打印內容,這個方法就是動態設置這些變量的。不過在集成中比較少用。

6) IdenticalCopiesOfLabel屬性:這個是設置打印時要打印多少份相同的標簽的,默認為標簽設置。

7) NumberSerializedLabels屬性:這個是序列化打印時使用的,當你的標簽啟動了序列化后,這個屬性代表的就是打印的份數,譬如你的序列化初始數據是1,增量為1,NumberSerializedLabels設置為5,那么就會打印出1、2、3、4、5,五個標簽出來。

8) Printer屬性:指定要使用的打印機,默認為系統指定的默認打印機

9) PrintToFile屬性:標示是馬上用打印機打印出實物,還是生成一個打印文件。

*/

}

涉及文件下載:

鏈接:https://pan.baidu.com/s/1eJViaH2JFpInWWz4U09wXw

提取碼:wy2y

總結

以上是生活随笔為你收集整理的postek二次开发_20190626_二次开发BarTender打印机_C#代码_一边读取TID_一边打印_打印机POSTEK...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。