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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/472310.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

fileinputstream_从Java中的FileInputStream读取字节

以下示例显示了如何从Java中的FileInputStream读取字节。import java.io.File;import java.io.FileInputStream;public class fileInputStream {public static void main(String[] args) {byte[] data new byte[1024]; //allocates memory for 1024 bytes//be careful about h…

LeetCode 1839. 所有元音按顺序排布的最长子字符串(滑动窗口)

文章目录1. 题目2. 解题1. 题目 当一个字符串满足如下条件时&#xff0c;我们称它是 美丽的 &#xff1a; 所有 5 个英文元音字母&#xff08;a &#xff0c;e &#xff0c;i &#xff0c;o &#xff0c;u&#xff09;都必须 至少 出现一次。这些元音字母的顺序都必须按照 字…

安川服务器显示run电机没电,安川变频器启动不运行是什么原因

即使按操作器的 RUN 键或输入外部运行信号&#xff0c;电机也不按照指令旋转? 电机不旋转变频器非驱动模式 确认 LED 操作器的 DRV 指示灯是否点亮。? 请操作 LED 操作器&#xff0c;进入驱动模式。(参照 77 页)按了 LO/RE 功能选择键(从控制回路端子输入指令时)在变频器停止…

EhLib TitleButton SVisibleColumnsEh = '错误的列';

unit EhLibConsts; interface resourcestring SClearSelectedCellsEh 清除选择的单元&#xff1f;; SInvalidTextFormatEh 错误的文本格式; SInvalidVCLDBIFFormatEh 错误的 VCLDBIF 格式; SErrorDuringInsertValueEh 插入值过程中出错&#xff1a;; SIgnoreErrorEh 忽略错…

python rpc webservice_PythonXMLRPC服务器端和客户端实例

一、远程过程调用RPCXML-RPC is a Remote Procedure Call method that uses XML passed via HTTP as a transport. With it, a client can call methods with parameters on a remote server (the server is named by a URI) and get back structured data. This module suppor…

python是动态_1.2. Python是动态语言

python是动态语言 1. 动态语言的定义 动态编程语言 是 高级程序设计语言 的一个类别&#xff0c;在计算机科学领域已被广泛应用。它是一类 在运行时可以改变其结构的语言 &#xff1a;例如新的函数、对象、甚至代码可以被引进&#xff0c;已有的函数可以被删除或是其他结构上的…

特征处理

学自 极客时间 《深度学习推荐系统实战》 特征分为两类&#xff1a; 类别特征&#xff08;性别、地理位置、季节、天气、风格&#xff09;数值型特征&#xff08;年龄、收入、点击量、点击率&#xff09; 类别特征经过 One-Hot 编码后放入特征向量、或者 多个的特征值采用 M…

C#整理1——进制转换

进制转换&#xff1a;二进制&#xff0c;八进制&#xff0c;十进制&#xff0c;十六进制。 &#xff08;一&#xff09;二进制转十进制&#xff1a; 1.写2 2.标指数&#xff0c;从右向左&#xff0c;从0开始依次标记 3.乘系数&#xff0c;一一对应。 4.相加。 例&#xff1a;二…

matlab打开笔记本摄像头_基于MATLAB调用电脑摄像头获取视频和图像

clear all;hwaitbar(0.1,请等待);%waitbar的作用是打开或者更新进度条 h waitbar(x,message)x表示进度条的比例长度&#xff0c;message是在进度条上显示的信息global vid;% global 的作用是定义全局变量vid videoinput(winvideo,1);close(h);preview(vid);%得到预览下的默认…

WIN 10 安装 Hadoop 2.7.7 + Spark 2.4.7 记录

文章目录0. 常规解压安装&#xff0c;并添加环境变量1. 下载并覆盖 bin 文件夹2. 使VERSION文件的clusterID一致3. 贴下单机配置4. 测试 Hadoop5. 安装Spark环境&#xff1a;win 10 java 1.8.0_281 Scala 2.11.11 Hadoop 2.7.7 Spark2.4.70. 常规解压安装&#xff0c;并添加…

ios验证邮箱格式

今天做注册界面时&#xff0c;用户在输入邮箱账号后&#xff0c;我不知道如何去辨别用户是否输入有误&#xff0c;我回想起最初我学过一个叫做"正则表达式"的方法&#xff0c; 但是不知道苹果是否能做到&#xff0c;果断的上网查找了一些相关资料。 最简单的就是利用…

canal mysql从库_canal中间件|数据增量同步解决方案

上一文中提到延时双删等策略实现数据一致性的时候&#xff0c;可能存在删除缓存失败的情况&#xff0c;就会出现缓存和数据库不一致的问题。为了应对删除缓存失败而导致数据不一致的问题&#xff0c;可以通过回溯数据库日志文件&#xff0c;提供一个保障的重试机制即可。流程如…

dbscan聚类算法matlab_密度聚类DBSCAN、HDBSCAN(转)

&#xfeff;# 密度聚类DBSCAN、HDBSCANDBSCANDBSCAN&#xff08;Density-Based Spatial Clustering of Applications with Noise&#xff0c;具有噪声的基于密度的聚类方法&#xff09;是一种基于密度的空间聚类算法。该算法将具有足够密度的区域划分为簇&#xff0c;并在具有…

Spark IDEA 编程环境配置

文章目录1. 下载资料准备2. 建立项目、添加环境设置3. 第一个 Spark 程序学自&#xff1a;Spark机器学习实战 https://book.douban.com/subject/35280412/ 记录一下踩过的坑&#xff1a; 环境&#xff1a;win 10 java 1.8.0_281 Scala 2.11.11 Hadoop 2.7.7 Spark2.4.7 …

Makefile 基本知识

Technorati 标签: Makefile 基本知识最常见的书写方式&#xff1a; CC gcc LD ld STRIP strip CFLAGS : -Os -static -DEZ_OS_LINUX CLFLAGS : -Os -static all: mainEXEC main OBJS main.o mytool1.o mytool2.o INCS mytool1.h mytool2.ha…

python考试题库程序改错_求助,程序改错

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 最近在学习python&#xff0c;其中遇到一道习题是改错的。 原代码如下 def break_words(stuff): """This function will break up words for us.""" words stuff.split( ) return words def sort_…

redis 查看key的有效期_redis中key设置过期时间

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":9,"count":9}]},"card":[{"des":"兼容Redis协议标准的、提供持久化的内存数据…

天池 在线编程 订单分配(回溯)

文章目录1. 题目2. 解题1. 题目 描述 打车派单场景, 假定有N个订单&#xff0c;待分配给N个司机。 每个订单在匹配司机前&#xff0c;会对候选司机进行打分&#xff0c;打分的结果保存在N*N的矩阵score&#xff0c;其中score[i][j]代表订单 i 派给司机 j 的分值。 假定每个订单…

2015年北京户口全攻略

最新统计数据指出 截至2013年底&#xff0c;北京市常住人口为2114.8万人&#xff0c;其中常住外来人口为802.7万人。和“北京户口”捆绑的字眼&#xff0c;历来是身份、福利&#xff0c;以至于幸福感、安全感。那么北京户口有什么好处&#xff1f;外来人口如何落户北京呢&#…

水晶报表 jar包版本过低_工具类学习-UReport报表设计器整合

dada-report报表整合UReport报表设计器工具结合日常工作和学习实践&#xff0c;针对传统报表子站面临的问题&#xff0c;尝试借助UReport报表设计器解决1.可在现有工程基础上引入Ureport2报表设计器Ureport报表设计器是一个基于WEB的在线报表设计器&#xff0c;其具有良好的界面…