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<DataColumn>().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(); //读取标签中的TIDif (!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 secondsSystem.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://www.cnblogs.com/wxylog/p/11093361.html

20190626_二次开发BarTender打印机_C#代码_一边读取TID_一边打印_打印机POSTEK相关推荐

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

    demo代码如下: private void btnPrint_Click(object sender, EventArgs e) { if (this.btnPrint.Text == " ...

  2. CrownCAD二次开发,从中国结代码看代码简洁之美

    作者:张麟博士 导读:作为CAD建模软件来说,solidworks上的二次开发,creo上的二次开发,有很多人都在做.但是,那些都是单机版本的,是孤立的. 但是,华云三维的crowncad,是中国CA ...

  3. 二次开发如何让低代码平台锦上添花?

    编者按:也许会有小伙伴会疑惑,以"短平快"著称的低代码平台为什么还需要二次开发?两者之间是不是矛盾了?其实不然,且听小编我一一道来. 一.什么是二次开发? 首先,小伙伴们要先理解什 ...

  4. cad 二次开发 插入图片_C#之CAD二次开发(2) 直线对象创建及添加

    0. 前言 从本文开始就正式登上开往CAD二次开发幼儿园的大巴车了!你准备好了吗?车门已经焊死! 还有,本系列笔记是默认大家都有C#的基础的了.这个系列笔记是我自己学习CAD二次开发的一些记录,可能存 ...

  5. win打印显示打印服务器错误,由于打印机的当前设置有问题,windos无法打印_由于打印机设置word无法打印解决方法...

    朋友们在日常办公时可能会遇到需要打印word文档的情况,但是有可能会出现一些错误,导致我们无法正常打印,例如由于打印机的当前设置有问题,windos无法打印的错误提示,那么为什么会出现这种情况呢?其实 ...

  6. discuz二次开发常用技术手册代码

    Discuz开发资料库:https://www.moqu8.com/library/index.htm 登录 <a href="member.php?mod=logging&a ...

  7. 使用O2OA二次开发搭建企业办公平台(十八)流程打印表单设置

    O2平台是一个可定制的应用开发平台,通过流程平台.内容平台.门户平台和数据平台,可以定制符合企业个性化需求的系统. 所有设计开发都在浏览器端进行,您无需安装任何额外的软件和插件.对浏览器支持如下(含以 ...

  8. c# autocad二次开发 dwg文件的框表框图导出pdf方便打印 dwg转pdf工具

    20190815 热 项目背景: 最近搞电气装配图,一份dwg里面N份框表框图,打印时,要先一个个框图导出pdf,而导出pdf时又要一个个用窗口模式选择导出范围,流程比较繁琐,于是程序员之魂觉醒赶紧弄 ...

  9. C#进行Visio二次开发之知识点考核试题

    本人做过多年的Visio二次开发,根据个人的经验总结及项目积累,写了一些小小的随笔文章(具体可参考<伍华聪的Visio二次开发文章>,上月有幸给深圳一个团队做了两天的Visio培训,当了一 ...

最新文章

  1. Some thoughts on my own O/R Mapping or Code Generation tools
  2. Hologres揭秘:高性能原生加速MaxCompute核心原理
  3. vue iframe 中写script_vue: 单文件组件 render函数
  4. Linux 下wifi 驱动开发(四)—— USB接口WiFi驱动浅析
  5. Python 之网络编程基础
  6. java绘制流程图_如何才能更好地绘制计算机毕业设计中各种图表
  7. 一个SPS + K2 + InfoPath + Mobile + Exchange的工作流程演示系统
  8. LeetCode 题解之Find Peak Element
  9. 区块链共识机制优缺点对比都是什么
  10. vscode中怎样格式化js代码_VSCode代码格式化设置
  11. JAVA栅栏密码解密程序
  12. 纸牌游戏——小猫钓鱼(队列、栈)
  13. unit在matlab中啥意思,unit8(matlab中uint8函数)
  14. Maven学习之路(五)maven的灵活构建--属性、profile和资源过滤
  15. 小型的代码管理仓库Gitea安装指南
  16. 11.投资管理流程与投资者需求
  17. python中字典的使用_python中的字典用法大全
  18. 植入式广告热的冷思考
  19. EMQ X Newsletter 202110:v5.0-beta.2 进展顺利,云服务多项功能优化
  20. java读取微信消息_微信公众平台开发中使用Java如何实现获取用户的信息

热门文章

  1. C小项目 —— 学生选课系统
  2. PackagesNotFoundError: The following packages are not available from current channels:
  3. JS高级——模块化学习笔记
  4. 一、uniapp项目(封装异步请求、moment.js时间处理、封装手势滑动组件、下载图片到本地)
  5. Chapter1-4_Speech_Recognition(HMM)
  6. 天池 在线编程 音乐组合
  7. LeetCode 672. 灯泡开关 Ⅱ(枚举)
  8. 程序员面试金典 - 面试题 04.09. 二叉搜索树序列(双端队列+回溯)**
  9. 动态规划应用--双11购物凑单
  10. oracle 打开 ctl,Oracle 19c 随系统systemctl启动数据库