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

歡迎訪問 生活随笔!

生活随笔

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

C#

C#控制DataMax指令打印DPL问题总结

發布時間:2025/4/5 C# 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#控制DataMax指令打印DPL问题总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近這幾天在測試DataMAx-I-4208采用DPL[Developer Programm Language]指令方式進行遇到諸多問題.解決這個問題過程中也是不斷打印測試得到驗證.今天早上用程序批量打印發先DAtaMax打印出來的條碼效果和ZeBar斑馬沒什么區別.有人也詢問很多采用DPL打印細節問題 就此對C#控制DAtaMAx指令DPL打印條碼中遇到問題進行總結一下.

首先在講遇到問題前搞明白我們要打印一個Code128格式的條碼需要具體控制什么因素? 知道我們要在程序中要做什么 這很重要.DataMax發送DPL指令給打印機Code128條碼:

?

?

?

打印一條Code128條碼通過串口通信向打印機DataMax發送DPL指令打印. 首先要建立串口連接,同時要知道DPL中關于Code128條碼打印指令語法.剩下就是條碼位置? 等細節調試問題. 具體總結如下:

<1>DPL中打印Code128指令語法

<2>DPL指令中控制BarCode和文本 寬度和高度

<3>DPL設置條碼打印在底板上初始位置X,Y

<4>采用密爾值控制DPL中條碼寬高比例.

<5>Code128條碼格式控制

分析好問題,我們在項目采用是界面先建立打印模板:

?

?

?

?

?

?

?

?

?

?

打印系統條碼數據時指定不同的打印模板:

?

?

?

?

?

后臺程序自動解析打印模板和打印數據稱DataMax支持的DPL指令方式 再發送給打印機批量打印.整個流程:

?

?

?

?

?

?

?

?

?

在上一篇中C#控制DataMax打印機問題總結中提到.Code128基本打印指令:

1: //Code128 DPL手冊上打印指令 2: <STX>L 3: D11<CR> 4: 1E000000015010001234567890<CR> 5: 121100000000100Barcode E<CR> 6: E

在DPL手冊Code128基本能看到基礎語法:

<STX>L對應DPL語法特定打印標識頭, 如果直接通過串口工具發送給打印機 則不執行 測試發現需要把<STX>轉換成16進制ACII碼格式.

<D11>用來設置設置條碼中平均的英寸范圍內每個打印點寬度和高度. 類似打印DAtaMAx-i-4208對飲DPI203 則每英寸的打印點DOT 固定為8個,在DPL手冊中設置語法:

?

?

?

?

?

?

?

在說明我可以看出打印機為203DPI的Dot點設置默認為D22. DWH語法能夠設置的值組合總共有6個.來調節條碼寬度.

第三行是核心打印條碼的指令:

1: //核心打印條碼DPL指令 分為兩部分 2: 1E0000000150100 01234567890<CR> 3: ?

如上清晰看出大概分為兩部分. 前一部分是打印條碼Code128格式字符串,?? 后面一部分則是條碼中指定負載數據.其實如果你進一步深入會問: 不同條碼間格式如何定義的?后來我翻遍整個DPL手冊終于在一個小角落[150頁]找到相關說明:

?

?

?

?

?

?

?

對打印整個條碼指令進行結構拆解:

?

?

?

?

?

?

?

?

?

1E0000000150100 這端標識頭字符串代表什么意思?繼續進行拆解發現:

?

?

?

?

?

?

?

?

?

這時是否有些徹底明白了吧那一段代碼具體代表什么意思.如下我會演示用C#發送DPLCode 128打印條碼.整個過程,.在上篇中C#控制DataMax打印機問題總結.提到<STX>標識指令頭轉換16進制問題.

?

?

?

?

?

這時轉換后16進制字符串,我們通過ASII16進制修改工具查看一下這個字符16進制碼:

?

?

?

?

?

?

?

?

?

?

?

經測試發現<STX>對應16進制碼為: 3C?? 53?? 54?? 58? 3E? . ok 到此在C#程序把程序拼接時發現 把這些16進制發送給打印機依然無法識別.后來找到串口工具.發現文本中拷貝進入成功打印:

?

?

?

?

?

發現DAtaMAx打印機識別則是<STX>轉換16進制后指令字符是 ? ,既然有了有了<STX> 16進制編碼我們進行反編譯字符:

1: //格式化字符指令頭<STX> 2: //Author:chenkai DAta:12/08 11 AM 3: protected override string Leading() 4: { 5: #region 轉16進制數據 6: StringBuilder getbuilder = new StringBuilder(); 7: string getconverstr = "<STX>"; 8: char[] values = getconverstr.ToCharArray(); 9: ? 10: foreach (char getchar in values) 11: { 12: int value = Convert.ToInt32(getchar); 13: getbuilder.AppendFormat(String.Format("{0:X}", value)); 14: } 15: #endregion 17: this.StartStr = "<STX>".ToString();//3c 53 54 58 3E[16進制結果一直 無打印效果] 18: string teststr = "EF BB BF 02"; 19: ? 20: #region 16進制轉字符串 21: StringBuilder getAsibuilder = new StringBuilder(); 22: string[] spiltstr = teststr.Split(' '); 24: string[] charstr = new string[spiltstr.Length]; 25: int count = 0; 26: foreach (string hex in spiltstr) 27: { 28: int value = Convert.ToInt32(hex, 16); 29: string stringValue = Char.ConvertFromUtf32(value); 31: //回歸字符 32: char charValue = (char)value; 33: charstr[count] = charValue.ToString(); 35: count++; 36: getAsibuilder.AppendFormat(charValue.ToString());//測試發現 最后一位16ASII碼即為有效字符[Fuck] 37: } 38: #endregion 39: return charstr[charstr.Length - 1] + "L" + "\n";//D11<CR>\n";//[測試成功 但每次出現WebServer重啟現象] 40: }

經過對<STX>16進制編碼進行反編譯成字符發現最后一個16進制碼3E對應就是打印識別特殊字符 . ok至此第一步讓DataMAX打印機識別DPL指令.如下在來解決涉及BArcode 128在打印中涉及具體問題.

首先來看如何在利用DPL指令方式控制BarCode在打印中初始位置X,Y: 在打印中如果想知道打印元素對應的方位坐標則需要知道目前打印機對坐標系統設置對應關系:

?

?

?

?

?

?

?

打印機中不同的坐標系統.同一個元素所在坐標位置值則不同.類似坐標系統A中:條碼對應XY坐標也不同:

?

?

?

根據DPL中說明DAtaMAx坐標為A方案.那么如何來通過DPL指令來控制條碼在紙帶上初始位置? 在DPL文檔中仔細研究發現設置BArCode初始位置屬性時Row OffSet和Column OFFset 分別對應語法:

?

?

?

?

?

?

?

?

?

基本語法為R0015,則設置在紙帶上初始X坐標位置15點, 值的范圍[0-9999],對應格式必須是4位數作為標識,Column Offset則基本雷同.不在贅述.添加了初始化位置DPL指令如下:

1: //設置初始位置DPL指令 chenkai 2: L 3: R0044<CR> 4: C0015<CR> 5: D11<CR> 6: 1E000000015010082001590000000013324<CR> 7: E 8: ?

從上可以看出對應初始坐標為X:y=44:15.程序中控制坐標位置格式000R:

1: //格式化初始打印位置數據 chenkai 2: public string ConvertDataFormat(float getvalue) 3: { 4: string converstr = string.Empty; 5: if (!string.IsNullOrEmpty(getvalue.ToString())) 6: { 7: //Convert Float to int type 8: string getfromtint = Convert.ToInt32(Math.Round(getvalue)).ToString(); 9: if (4 - getfromtint.Length > 0) 10: { 11: int getlength = 4 - getfromtint.Length; 12: for (int count = 0; count < getlength; count++) 13: { 14: getfromtint = "0" + getfromtint; 15: } 16: converstr = getfromtint; 17: } 18: else 19: { 20: //長度超過或等于格式長度4 21: if (4 - getfromtint.Length == 0) 22: converstr = getfromtint; 23: else 24: { 25: converstr = string.Empty; 26: throw new EquipmentException("打印位置超過本地打印機設置 設置小于等于4位數"); 27: } 28: } 29: } 30: return converstr; 31: }

調用控制XY坐標:

1: //設置初始打印Row OffSet 位置值 2: string topstr = this.ConvertDataFormat(top); 3: string leftstr = this.ConvertDataFormat(left); 4: ? 5: //設置初始打印Column OffSet 位置值 6: getbuilder.AppendFormat("R{0}<CR>\n", topstr); 7: getbuilder.AppendFormat("C{0}<CR>\n", leftstr);

如下在關注條碼寬度設置,在圖一中我們對條碼設置一個屬性值叫密爾 即條碼寬度單位.在測試ZeBar打印計算ZPL中計算寬度是每密爾對應0.25CM. 但是在DPL設置則不同,單一單位區域內打印點DOt數量是不變的,只有設置DOt的高度和寬度才能設置條碼外在寬度效果.203DPI 對應每英寸8個點Dot. DPL如何來設置每個點的Width和Height:具體語法格式

?

?

?

?

?

?

?

D11是默認值,針對300、400 600DPI打印機,DAtaMAx-i-4208的DPi為203,則對應的設置為D22. 在界面中密爾值范圍8-17共10個值:

?

?

?

?

?

?

?

?

?

10值范圍對應可以設置的比例關系為6個: 分別為1:1 /1:2/1:3/2:1/2:2/2:3. C#中進行范圍指定控制:

1: #region 設置密爾值. 2: string miwidth="1", miheight="1"; 3: int barLineWidth = PubMethod.ToInt(detailtmp.BARLINEWIDTH); 4: int midvalue = barLineWidth; 5: if (barLineWidth < 10) 6: { 7: //Default Code128 Bint 8: miwidth = "1"; 9: miheight = "1"; 10: } 11: else if (barLineWidth >= 10 && midvalue < 12) 12: { 13: miwidth = "1"; 14: miheight = "2"; 15: } 16: //密爾值設置BarCode 寬高比例關系. 17: //DPL使用Dot 在Inch中密度在決定寬高. 不能直接設置 值范圍Width[1-2] Height[1-3] 18: //DAtaMAx中DPi203 默認值 為D22 Code 128設置Defaul D11 19: string setLocation="D"+miwidth+miheight; 20: getbuilder.AppendFormat(setLocation+"<CR>\n"); 21: #endregion

如果采用默認的D11設置發現打印出來效果 總體條碼寬度或高度過小.需要對條碼寬高進行重新設置.在Code128語法命令有一段說明很重要:

?

?

?

?

?

其中明確提到第四個字符用來設置條碼寬度,從第五個字符串到第七位設置條碼高度值. Height[0-999] C#則需要憑借字符串方式來組合DPL指令:

1: #region 處理條碼寬高比例 2: //BarCode設置寬高比例需要Header FrmatString設置 寬第四個字符 高 第五至第七個字符串 3: //Width[0-9]-Common[0-4] height[0-999]-Common[32-45] 4: string widthstr = string.Empty; 5: string heightstr = string.Empty; 6: ? 7: //元素在打印效果中寬高 8: width = (detailtmp.ENDX - detailtmp.BEGINX); 9: height = (detailtmp.ENDY - detailtmp.BEGINY); 10: ? 11: if (this.Template != null) 12: { 13: widthstr = ((int)width/100).ToString(); 14: heightstr =this.FormatBarCodeHeight(((int)height-25).ToString()); 16: if (Convert.ToInt32(widthstr) > 9) 18: widthstr = "9"; 20: else if (Convert.ToInt32(widthstr) == 0) 22: widthstr = "1"; 24: } 26: #endregion 27: getbuilder.AppendFormat("1E0{0}{1}00150100{2}\n","1",heightstr,barcode);//剔除<CR>

至此從程序發給DAtaMAx最終打印DPL指令為:

1: //最終DPL指令 2: L 3: D22<CR> 4: R0044<CR> 5: C0015<CR> 6: 1E01032001501008200745869542876<CR> 7: 121100000000100Barcode T<CR> 8: E

最終控制打印效果[居中設置]:

?

?

?

?

最后關于<CR>如果在傳入條碼值時最好去掉 在指令中有時會把CR作為字符串打印條碼數據中.

總結

以上是生活随笔為你收集整理的C#控制DataMax指令打印DPL问题总结的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 国产女人18毛片水真多18 | 国产在线视频一区二区三区 | 国产精品乱码一区 | 欧美大片在线 | 涩涩国产 | 成色视频 | 草久在线观看 | 久久人人精品 | 涩涩视频在线免费看 | 久久精品国产网红主播 | 国产精品一二三四 | 国产精品视屏 | 久久久久久久久久久久久久国产 | 日韩在线免费视频观看 | 伊人天天操 | 成人a视频在线观看 | 欧美成人精品二区三区99精品 | 国产一区二区免费在线 | 欧美激情在线播放 | 一区二区三区在线免费观看视频 | 亚洲第一中文字幕 | 欧美 在线 | 午夜婷婷色 | 裸体裸乳免费看 | 三级欧美视频 | 善良的女朋友在线观看 | 久久久亚洲一区二区三区 | 亚洲色图 美腿丝袜 | 在线免费观看国产精品 | 奇米四色影视 | 四虎永久在线观看 | 亚洲视频一区二区三区在线观看 | 国产成人无码精品 | 日韩视频在线观看二区 | 欧美日韩免费在线 | 中文字幕欧美另类精品亚洲 | 国产91在线观看 | 国产精品久久久久久久久久久久久 | 一级黄色免费视频 | 毛片久久久久 | 久久国产精品久久久久久电车 | 成人av在线网 | 国产小视频在线免费观看 | 亚洲性视频网站 | v片在线看 | 日日日日干 | 五月婷婷丁香综合 | 美女啪啪无遮挡 | jzjzz成人免费视频 | 人妻精品一区一区三区蜜桃91 | 欧美性白人极品1819hd | 国产欧美精品一区二区三区 | 中国极品少妇xxxx做受 | 俺也来俺也去俺也射 | 狠狠操在线视频 | 夜色在线影院 | 精品久久久久一区二区 | 污漫在线观看 | 欧美日韩国产一区在线 | 国产偷人爽久久久久久老妇app | 色网站观看 | 黑人操白妞 | 国产高潮又爽又无遮挡又免费 | 日韩精品一区二区三区中文在线 | 欧美日a | 影音先锋中文字幕资源 | 免费伊人网 | 亚洲精品一区二区三区四区五区 | 精品一区二区三区免费毛片 | 欧美三p| 人妻夜夜爽天天爽三区麻豆av网站 | 亚洲第一黄色片 | 激情小说图片视频 | 麻豆精品视频免费观看 | 无码人妻丰满熟妇啪啪 | 国产在线一区不卡 | 亚洲成人自拍视频 | 久久久国产一区二区三区 | 特级淫片aaaaaaa级 | 免费的一级片 | 激情视频91| 亚洲一级二级片 | 国产福利精品在线观看 | av网站在线观看免费 | 久久人人妻人人人人妻性色av | 色噜噜综合网 | 国产精品视频 | 亚洲欧美在线成人 | 日韩欧美亚洲一区二区 | 欧美三级视频在线观看 | 无码精品国产一区二区三区免费 | 一区二区免费看 | 亚洲毛片a | 国产黄网在线观看 | 日本h在线观看 | 亚洲免费观看在线 | 日韩乱码一区二区 | 一级特黄aa| 国产色综合天天综合网 |