ZebraPrinter.cs 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747
  1. using System;
  2. using System.Collections.Generic;
  3. //using System.Linq;
  4. using System.Text;
  5. using System.Net;
  6. using System.Net.Sockets;
  7. using System.IO;
  8. using System.Drawing;
  9. //using System.Windows.Forms;
  10. namespace PrintSolution.LabelPrinter
  11. {
  12. public class ZebraPrinter : ZPL2Command
  13. {
  14. /******************* 标签位置 ***********************/
  15. int blankOffset = 5; //边界宽带 单位:mm
  16. int labBoxLen1 = 26; //左边标签盒长度 单位:mm
  17. int labBoxLen2 = 29; //右边标签盒长度 单位:mm
  18. int fillBoxLen1 = 58; //左边填充盒长度 单位:mm
  19. int fillBoxLen2 = 60; //右边填充盒长度 单位:mm
  20. int rowHeight = 11; //行高 单位:mm
  21. int labHeadLen = 173; //标签头长度 单位:mm
  22. int labHeadWith = 29; //标签头宽带 单位:mm
  23. int offsetY = 0; //X坐标偏移量 单位:mm
  24. int offsetX = 0; //Y坐标偏移量 单位:mm
  25. int version = 2; //标签版本 1: 横向版本, 2: 纵向版本,3: 纵向版本(数据横着排),4: 横向版本,数据只有钢卷号、重量、生产日期
  26. /******************* 可变参数 ***********************/
  27. string strCmd = ""; // 指令
  28. int xPos = 0; // X坐标
  29. int yPos = 0; // Y坐标
  30. int rowNum = 0; // 字段行数
  31. /******************* 可变参数 ***********************/
  32. /// <summary>
  33. /// 构造函数
  34. /// </summary>
  35. public ZebraPrinter() : base()
  36. {
  37. initLabelSetting();
  38. }
  39. /// <summary>
  40. /// 构造函数
  41. /// </summary>
  42. public ZebraPrinter(string ipAddr) : base(ipAddr)
  43. {
  44. Addr = ipAddr;
  45. initLabelSetting();
  46. }
  47. /// <summary>
  48. /// 标签版本属性
  49. /// </summary>
  50. public int LableVersion
  51. {
  52. get
  53. {
  54. return version;
  55. }
  56. set
  57. {
  58. version = value;
  59. }
  60. }
  61. /// <summary>
  62. /// 变量初始化
  63. /// </summary>
  64. public void initLabelSetting()
  65. {
  66. blankOffset = 5; //mm
  67. labBoxLen1 = 26; //mm
  68. labBoxLen2 = 29; //mm
  69. fillBoxLen1 = 58; //
  70. fillBoxLen2 = 60; //
  71. rowHeight = 11;
  72. labHeadLen = 173;
  73. labHeadWith = 29;
  74. offsetY = 0;
  75. offsetX = 0;
  76. // 指令初始化
  77. strCmd = ""; // 指令
  78. xPos = 0; // X坐标
  79. yPos = 0; // Y坐标
  80. rowNum = 0; // 字段行数
  81. //
  82. FontDirect = 'B';
  83. // 设定坐标偏移量
  84. switch (version)
  85. {
  86. case 1:
  87. offsetX = 5;
  88. offsetY = 3;
  89. break;
  90. case 2:
  91. offsetX = 0;
  92. offsetY = -2;
  93. break;
  94. case 3:
  95. offsetX = 5;
  96. offsetY = 0;
  97. break;
  98. default:
  99. offsetX = 0;
  100. offsetY = -1;
  101. break;
  102. }
  103. }
  104. /// <summary>
  105. /// 把文字转换才Bitmap
  106. /// </summary>
  107. /// <param name="text"></param>
  108. /// <param name="font"></param>
  109. /// <param name="rect">用于输出的矩形,文字在这个矩形内显示,为空时自动计算</param>
  110. /// <param name="fontcolor">字体颜色</param>
  111. /// <param name="backColor">背景颜色</param>
  112. /// <returns></returns>
  113. private Bitmap CreateImage(string text, Font font, Rectangle rect, Color fontcolor, Color backColor)
  114. {
  115. Graphics g;
  116. Bitmap bmp;
  117. StringFormat format = new StringFormat(StringFormatFlags.NoClip);
  118. if (rect == Rectangle.Empty)
  119. {
  120. bmp = new Bitmap(1, 1);
  121. g = Graphics.FromImage(bmp);
  122. //计算绘制文字所需的区域大小(根据宽度计算长度),重新创建矩形区域绘图
  123. SizeF sizef = g.MeasureString(text, font, PointF.Empty, format);
  124. int width = (int)(sizef.Width + 1);
  125. int height = (int)(sizef.Height + 1);
  126. rect = new Rectangle(0, 0, width, height);
  127. bmp.Dispose();
  128. bmp = new Bitmap(width, height);
  129. }
  130. else
  131. {
  132. bmp = new Bitmap(rect.Width, rect.Height);
  133. }
  134. g = Graphics.FromImage(bmp);
  135. //使用ClearType字体功能
  136. g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;
  137. g.FillRectangle(new SolidBrush(backColor), rect);
  138. g.DrawString(text, font, Brushes.Black, rect, format);
  139. bmp.RotateFlip(RotateFlipType.Rotate270FlipNone);
  140. return bmp;
  141. }
  142. public static string Convert(Bitmap bms)
  143. {
  144. int b = 0;
  145. long n = 0;
  146. long clr;
  147. StringBuilder sb = new StringBuilder();
  148. sb.Append("~DGR:ZONE.GRF,");
  149. Bitmap bm = new Bitmap(bms);
  150. int w = ((bm.Size.Width / 8 + ((bm.Size.Width % 8 == 0) ? 0 : 1)) * bm.Size.Height);
  151. int h = (bm.Size.Width / 8 + ((bm.Size.Width % 8 == 0) ? 0 : 1));
  152. sb.Append(w.ToString().PadLeft(5, '0') + "," + h.ToString().PadLeft(3, '0') + ",\n");
  153. using (Bitmap bmp = new Bitmap(bm.Size.Width, bm.Size.Height))
  154. {
  155. for (int y = 0; y < bm.Size.Height; y++)
  156. {
  157. for (int x = 0; x < bm.Size.Width; x++)
  158. {
  159. b = b * 2;
  160. clr = bm.GetPixel(x, y).ToArgb();
  161. string s = clr.ToString("X");
  162. if (s.Substring(s.Length - 6, 6).CompareTo("BBBBBB") < 0)
  163. {
  164. bmp.SetPixel(x, y, bm.GetPixel(x, y));
  165. b++;
  166. }
  167. n++;
  168. if (x == (bm.Size.Width - 1))
  169. {
  170. if (n < 8)
  171. {
  172. b = b * (2 ^ (8 - (int)n));
  173. sb.Append(b.ToString("X").PadLeft(2, '0'));
  174. b = 0;
  175. n = 0;
  176. }
  177. }
  178. if (n >= 8)
  179. {
  180. sb.Append(b.ToString("X").PadLeft(2, '0'));
  181. b = 0;
  182. n = 0;
  183. }
  184. }
  185. }
  186. sb.Append("^LH0,0^FO354,600^XGR:ZONE.GRF^FS");
  187. }
  188. return sb.ToString();
  189. }
  190. public static string Convert2(Bitmap bms)
  191. {
  192. int b = 0;
  193. long n = 0;
  194. long clr;
  195. StringBuilder sb = new StringBuilder();
  196. sb.Append("~DGR:ZONE1.GRF,");
  197. Bitmap bm = new Bitmap(bms);
  198. int w = ((bm.Size.Width / 8 + ((bm.Size.Width % 8 == 0) ? 0 : 1)) * bm.Size.Height);
  199. int h = (bm.Size.Width / 8 + ((bm.Size.Width % 8 == 0) ? 0 : 1));
  200. sb.Append(w.ToString().PadLeft(5, '0') + "," + h.ToString().PadLeft(3, '0') + ",\n");
  201. using (Bitmap bmp = new Bitmap(bm.Size.Width, bm.Size.Height))
  202. {
  203. for (int y = 0; y < bm.Size.Height; y++)
  204. {
  205. for (int x = 0; x < bm.Size.Width; x++)
  206. {
  207. b = b * 2;
  208. clr = bm.GetPixel(x, y).ToArgb();
  209. string s = clr.ToString("X");
  210. if (s.Substring(s.Length - 6, 6).CompareTo("BBBBBB") < 0)
  211. {
  212. bmp.SetPixel(x, y, bm.GetPixel(x, y));
  213. b++;
  214. }
  215. n++;
  216. if (x == (bm.Size.Width - 1))
  217. {
  218. if (n < 8)
  219. {
  220. b = b * (2 ^ (8 - (int)n));
  221. sb.Append(b.ToString("X").PadLeft(2, '0'));
  222. b = 0;
  223. n = 0;
  224. }
  225. }
  226. if (n >= 8)
  227. {
  228. sb.Append(b.ToString("X").PadLeft(2, '0'));
  229. b = 0;
  230. n = 0;
  231. }
  232. }
  233. }
  234. // sb.Append("^LH0,0^FO1200,200^XGR:ZONE.GRF^FS");
  235. }
  236. return sb.ToString();
  237. }
  238. protected string ConvertImageToCode(Bitmap img)
  239. {
  240. var sb = new StringBuilder();
  241. long clr = 0, n = 0;
  242. int b = 0;
  243. for (int i = 0; i < img.Size.Height; i++)
  244. {
  245. for (int j = 0; j < img.Size.Width; j++)
  246. {
  247. b = b * 2;
  248. clr = img.GetPixel(j, i).ToArgb();
  249. string s = clr.ToString("X");
  250. if (s.Substring(s.Length - 6, 6).CompareTo("BBBBBB") < 0)
  251. {
  252. b++;
  253. }
  254. n++;
  255. if (j == (img.Size.Width - 1))
  256. {
  257. if (n < 8)
  258. {
  259. b = b * (2 ^ (8 - (int)n));
  260. sb.Append(b.ToString("X").PadLeft(2, '0'));
  261. b = 0;
  262. n = 0;
  263. }
  264. }
  265. if (n >= 8)
  266. {
  267. sb.Append(b.ToString("X").PadLeft(2, '0'));
  268. b = 0;
  269. n = 0;
  270. }
  271. }
  272. sb.Append(System.Environment.NewLine);
  273. }
  274. return sb.ToString();
  275. }
  276. /// <summary>
  277. /// 打印标签的一行数据
  278. /// </summary>
  279. /// <param name="leftData">左边格子中的数据</param>
  280. /// <param name="rightData">右边格子中的数据</param>
  281. private void printLine(string leftData, string rightData)
  282. {
  283. switch (version)
  284. {
  285. case 1:
  286. // 打印左边的数据
  287. xPos = (blankOffset + labBoxLen1 + offsetX) * getDotMM();
  288. yPos = (blankOffset + labHeadWith + offsetY) * getDotMM() + rowNum * rowHeight * getDotMM();
  289. strCmd += fillDataCmd(xPos, yPos, leftData);
  290. // 打印右边的数据, Y 坐标不变
  291. xPos = (blankOffset + labBoxLen1 + fillBoxLen1 + labBoxLen2 + offsetX) * getDotMM();
  292. strCmd += fillDataCmd(xPos, yPos, rightData);
  293. break;
  294. case 2:
  295. xPos = (blankOffset + labHeadWith + rowNum * rowHeight + offsetX) * getDotMM() + fontHeight;
  296. yPos = (blankOffset + offsetY) * getDotMM() + fillBoxLen2 * getDotMM() - getStringDots(rightData); //fillBoxLen2
  297. strCmd += getFontCmd() + fillDataCmd(xPos, yPos, rightData);
  298. // X 坐标不变
  299. //xPos = (blankOffset + labHeadWith + rowNum * rowHeight + offsetX) * dotsMm +fontHeight ;
  300. yPos = (blankOffset + fillBoxLen2 + labBoxLen2 + offsetY) * getDotMM() + fillBoxLen1 * getDotMM() - getStringDots(leftData);//
  301. strCmd += getFontCmd() + fillDataCmd(xPos, yPos, leftData);
  302. break;
  303. case 3:
  304. /** 有标题的
  305. // 打印左边的数据
  306. strCmd += "^CFF,50,19\r\n"; //'^CFA,50,24';
  307. xPos = (blankOffset + 2 + offsetX) * getDotMM();
  308. yPos = (blankOffset + offsetY) * getDotMM() + rowNum * rowHeight * getDotMM();
  309. strCmd += fillDataCmd(xPos, yPos, leftData);
  310. // 打印右边的数据, Y 坐标不变
  311. strCmd += "^CFF,50,20\r\n"; //'^CFA,50,24';
  312. xPos = (blankOffset + labBoxLen1 + 3) * getDotMM();
  313. strCmd += fillDataCmd(xPos, yPos, rightData);
  314. **/
  315. //只打印数据
  316. strCmd += "^AFF,67,40\r\n"; //'^CFA,50,24';
  317. xPos = (blankOffset + 10 + offsetX) * getDotMM();
  318. yPos = (blankOffset + offsetY) * getDotMM() + rowNum * rowHeight * getDotMM();
  319. strCmd += fillDataCmd(xPos, yPos, rightData);
  320. break;
  321. }
  322. rowNum++;
  323. }
  324. private void printstl(string leftData, string rightData)
  325. {
  326. switch (version)
  327. {
  328. case 1:
  329. // 打印左边的数据
  330. xPos = (blankOffset + labBoxLen1 + offsetX) * getDotMM();
  331. yPos = (blankOffset + labHeadWith + offsetY) * getDotMM() + rowNum * rowHeight * getDotMM();
  332. strCmd += fillDataCmd(xPos, yPos, leftData);
  333. // 打印右边的数据, Y 坐标不变
  334. xPos = (blankOffset + labBoxLen1 + fillBoxLen1 + labBoxLen2 + offsetX) * getDotMM();
  335. strCmd += fillDataCmd(xPos, yPos, rightData);
  336. break;
  337. case 2:
  338. xPos = (blankOffset + labHeadWith + rowNum * rowHeight + offsetX) * getDotMM() + fontHeight;
  339. yPos = (blankOffset + offsetY) * getDotMM() + fillBoxLen2 * getDotMM() - getStringDots(rightData); //fillBoxLen2
  340. strCmd += getFontCmd() + fillDataCmd(xPos, yPos, rightData);
  341. // X 坐标不变
  342. //xPos = (blankOffset + labHeadWith + rowNum * rowHeight + offsetX) * dotsMm +fontHeight ;
  343. yPos = (blankOffset + fillBoxLen2 + labBoxLen2 + offsetY) * getDotMM() + fillBoxLen1 * getDotMM() - getStringDots(leftData);//
  344. strCmd += getFontCmd() + fillDataCmd(xPos, yPos, leftData);
  345. break;
  346. case 3:
  347. strCmd += "^A0F,120,120\r\n"; //'^CFA,50,24';
  348. xPos = (blankOffset + 10 + offsetX) * getDotMM();
  349. yPos = (blankOffset + offsetY) * getDotMM() + rowNum * rowHeight * getDotMM();
  350. strCmd += fillDataCmd(xPos, yPos, rightData);
  351. break;
  352. }
  353. rowNum++;
  354. }
  355. private void printstl2(string leftData, string rightData)
  356. {
  357. switch (version)
  358. {
  359. case 1:
  360. // 打印左边的数据
  361. xPos = (blankOffset + labBoxLen1 + offsetX) * getDotMM();
  362. yPos = (blankOffset + labHeadWith + offsetY) * getDotMM() + rowNum * rowHeight * getDotMM();
  363. strCmd += fillDataCmd(xPos, yPos, leftData);
  364. // 打印右边的数据, Y 坐标不变
  365. xPos = (blankOffset + labBoxLen1 + fillBoxLen1 + labBoxLen2 + offsetX) * getDotMM();
  366. strCmd += fillDataCmd(xPos, yPos, rightData);
  367. break;
  368. case 2:
  369. xPos = (blankOffset + labHeadWith + rowNum * rowHeight + offsetX) * getDotMM() + fontHeight;
  370. yPos = (blankOffset + offsetY) * getDotMM() + fillBoxLen2 * getDotMM() - getStringDots(rightData); //fillBoxLen2
  371. strCmd += getFontCmd() + fillDataCmd(xPos, yPos, rightData);
  372. // X 坐标不变
  373. //xPos = (blankOffset + labHeadWith + rowNum * rowHeight + offsetX) * dotsMm +fontHeight ;
  374. yPos = (blankOffset + fillBoxLen2 + labBoxLen2 + offsetY) * getDotMM() + fillBoxLen1 * getDotMM() - getStringDots(leftData);//
  375. strCmd += getFontCmd() + fillDataCmd(xPos, yPos, leftData);
  376. break;
  377. case 3:
  378. strCmd += "^A0F,200,200\r\n"; //'^CFA,50,24';
  379. xPos = (blankOffset + 10 + offsetX) * getDotMM();
  380. yPos = (blankOffset + offsetY) * getDotMM() + rowNum * rowHeight * getDotMM();
  381. strCmd += fillDataCmd(xPos, yPos, rightData);
  382. break;
  383. }
  384. rowNum++;
  385. }
  386. /// <summary>
  387. /// 打印条码
  388. /// </summary>
  389. /// <param name="data">条码数据项</param>
  390. private void printBarcode(string data)
  391. {
  392. //int codeHeight = 150;
  393. int offset = 5;
  394. string orientation = "B"; // N = 正常 (Normal);R = 顺时针旋转90度(Roated);I = 顺时针旋转180度(Inverted);B = 顺时针旋转270度 (Bottom)
  395. switch (version)
  396. {
  397. case 1:
  398. xPos = (offset + blankOffset )* getDotMM();
  399. yPos = (blankOffset + labHeadWith + rowNum * rowHeight + offsetY) * getDotMM();
  400. orientation = "N";
  401. strCmd += getBarcodeCmd(xPos, yPos, orientation, data);
  402. break;
  403. case 2:
  404. xPos = (blankOffset + labHeadWith + rowNum * rowHeight + offset) * getDotMM();//+ barcodeHeight
  405. yPos = labHeadLen * getDotMM() - data.Length * fontWidth; //(rowY + offsetY) * dotsMm + rowNum * rowHeight * dotsMm;
  406. orientation = "B";
  407. strCmd += getBarcodeCmd(xPos, yPos, orientation, data);
  408. break;
  409. case 3:
  410. offset = 52;
  411. xPos = (offset + blankOffset) * getDotMM();
  412. yPos = (blankOffset + 30 + rowNum * rowHeight + offsetY) * getDotMM();
  413. orientation = "N";
  414. strCmd += getBarcodeCmd(xPos, yPos, orientation, data);
  415. break;
  416. }
  417. }
  418. /// <summary>
  419. /// 打印标签
  420. /// </summary>
  421. /// <param name="coilLabel">标签内容</param>
  422. public void printLable(ColdCoilLable coilLabel)
  423. {
  424. initLabelSetting();
  425. strCmd += getBeginCmd();
  426. if(1 == version)strCmd += getDefaultFontCmd();
  427. if (3 == version) //添加标签打印模板3 纸张竖着、数据横排
  428. {
  429. blankOffset = 10;//为左边数据与边的间距;
  430. labBoxLen1 = 24;
  431. rowHeight = 10;
  432. //offsetY = 5;
  433. ////offsetX = 0;
  434. //strCmd += "^CFF,50,20\r\n"; //'^CFA,50,24';
  435. //// 打印标签头名称
  436. //xPos = (blankOffset + 2 + offsetX) * getDotMM();
  437. //yPos = (blankOffset + 2 + offsetY) * getDotMM() + rowNum * 5 * getDotMM();
  438. //strCmd += fillDataCmd(xPos, yPos, coilLabel.labelHeadName); //打印标签头,用labelHeadName来设置标签头名称,如:新钢冷轧厂冷硬卷标签
  439. //rowNum++;
  440. offsetY = 10;
  441. printstl("COIL NO.:", coilLabel.coilNo);
  442. printLine("SPECIFICATION:", coilLabel.specification);
  443. printstl("GRADE:", coilLabel.steelGrade);
  444. printLine("HEAT NO.:", coilLabel.heatNo);
  445. printLine("DIMENSION(mm):", coilLabel.dimension);
  446. printLine("WEIGHT(kg):", coilLabel.weight);
  447. printLine("DATE:", coilLabel.prodDate);
  448. //if (null != coilLabel.checker && "" != coilLabel.checker)
  449. // printLine("CHECKER:", coilLabel.checker);
  450. printstl2("REMARKS:", coilLabel.steelGrade);
  451. //printBarcode(coilLabel.barcode); //取消条形码
  452. strCmd += getEndCmd();
  453. //writeDoc(strCmd);
  454. //sendMessage(Encoding.Default.GetBytes(strCmd));
  455. sendCommand(strCmd);
  456. }
  457. else if (4 == version) //添加标签打印模板4 纸张竖着、数据竖着(成品包装作业管理)
  458. {
  459. /*offsetX = 5;
  460. strCmd += "^A0R,140,140\r\n"; //'^CFA,50,24';字体设置:第一个字母A表示粗体,第3个字母R表示字体纵向,F表示横向;
  461. // 打印标签钢卷号
  462. //xPos = (blankOffset + labHeadWith + rowNum * rowHeight + offsetX) * getDotMM() + fontHeight;
  463. //yPos = (blankOffset + offsetY) * getDotMM() + 15;
  464. //strCmd += fillDataCmd(xPos, yPos, coilLabel.coilNo); //钢卷号
  465. xPos = (blankOffset + labHeadWith * 2 + rowNum * rowHeight + offsetX-48) * getDotMM() + fontHeight ;
  466. yPos = (blankOffset + offsetY + labHeadWith/2-10) * getDotMM() + 35;
  467. strCmd += fillDataCmd(xPos, yPos, coilLabel.coilNo); //钢卷号
  468. rowNum++;
  469. offsetX = 0;
  470. strCmd += "^A0R,120,120\r\n";//"^A0R,75,60\r\n"; //'^CFA,50,24';
  471. xPos = (blankOffset + labHeadWith + offsetX - 30) * getDotMM() + fontHeight;//(blankOffset + 23 + labHeadWith + offsetX-58+5) * getDotMM() + fontHeight;
  472. yPos = (blankOffset + offsetY + labHeadWith/2) * getDotMM() + 35; //fillBoxLen2
  473. strCmd += fillDataCmd(xPos, yPos, coilLabel.weight + "kg");
  474. // X 坐标不变
  475. strCmd += "^A0R,120,120\r\n"; //'^CFF,50,20';
  476. //xPos = (blankOffset + labHeadWith + rowNum * rowHeight + offsetX) * dotsMm +fontHeight ; fillBoxLen1 * getDotMM()
  477. yPos = (blankOffset + 5 + offsetY + labHeadWith/2) * getDotMM() + fillBoxLen1 * getDotMM() - getStringDots(coilLabel.weight);//
  478. strCmd += fillDataCmd(xPos, yPos, coilLabel.prodDate.Replace("-","").Substring(0, 10));
  479. //strCmd += fillDataCmd(xPos, yPos, coilLabel.prodDate);
  480. strCmd += getEndCmd();
  481. //writeDoc(strCmd);
  482. //sendMessage(Encoding.Default.GetBytes(strCmd));
  483. sendCommand(strCmd);*/
  484. offsetX = 5;
  485. strCmd += "^A0R,140,140\r\n"; //'^CFA,50,24';字体设置:第一个字母A表示粗体,第3个字母R表示字体纵向,F表示横向;
  486. // 打印标签钢卷号
  487. //xPos = (blankOffset + labHeadWith + rowNum * rowHeight + offsetX) * getDotMM() + fontHeight;
  488. //yPos = (blankOffset + offsetY) * getDotMM() + 15;
  489. //strCmd += fillDataCmd(xPos, yPos, coilLabel.coilNo); //钢卷号
  490. xPos = (blankOffset + labHeadWith * 2 + rowNum * rowHeight + offsetX - 40) * getDotMM() + fontHeight;
  491. yPos = (blankOffset + offsetY + labHeadWith / 2) * getDotMM() + 35;
  492. // yPos = (blankOffset + offsetY + labHeadWith/2-10) * getDotMM() + 35;
  493. strCmd += fillDataCmd(xPos, yPos, coilLabel.coilNo); //钢卷号
  494. rowNum++;
  495. offsetX = 0;
  496. strCmd += "^A0R,120,120\r\n";//"^A0R,75,60\r\n"; //'^CFA,50,24';
  497. xPos = (blankOffset + labHeadWith + offsetX - 20) * getDotMM() + fontHeight;//(blankOffset + 23 + labHeadWith + offsetX-58+5) * getDotMM() + fontHeight;
  498. yPos = (blankOffset + offsetY + labHeadWith / 2 + 10) * getDotMM() + 35; //fillBoxLen2
  499. strCmd += fillDataCmd(xPos, yPos, coilLabel.weight + "kg");
  500. // X 坐标不变
  501. strCmd += "^A0R,120,120\r\n"; //'^CFF,50,20';
  502. //xPos = (blankOffset + labHeadWith + rowNum * rowHeight + offsetX) * dotsMm +fontHeight ; fillBoxLen1 * getDotMM()
  503. yPos = (blankOffset + 5 + offsetY + labHeadWith / 2) * getDotMM() + fillBoxLen1 * getDotMM() - getStringDots(coilLabel.weight);//
  504. strCmd += fillDataCmd(xPos, yPos, coilLabel.prodDate.Replace("-", "").Substring(0, 10));
  505. String BarCode = "";
  506. BarCode += coilLabel.coilNo + ";";
  507. //BarCode += "*XINSTEEL* CoilNo:" + coilLabel.coilNo + " ";
  508. //BarCode += "Dimension:" + coilLabel.dimension + " ";
  509. //BarCode += "SteelGrade:" + coilLabel.steelGrade + " ";
  510. //BarCode += "Date:" + coilLabel.prodDate + " ";
  511. BarCode += coilLabel.weight + "kg";
  512. xPos = (blankOffset + labHeadWith + offsetX - 30) * getDotMM() + fontHeight;
  513. yPos = (blankOffset) * getDotMM();
  514. strCmd += fillBQDataCmd(xPos, yPos, BarCode);
  515. //strCmd += fillDataCmd(xPos, yPos, coilLabel.prodDate);
  516. strCmd += getEndCmd();
  517. //writeDoc(strCmd);
  518. //sendMessage(Encoding.Default.GetBytes(strCmd));
  519. sendCommand(strCmd);
  520. }
  521. else if (5 == version) //添加标签打印模板4 纸张竖着、数据竖着(成品包装作业管理)
  522. {
  523. offsetX = 15;
  524. strCmd += "^A0B,80,60\r\n";// "^A0B,80,60\r\n"; //'^CFA,50,24';字体设置:第一个字母A表示粗体,第3个字母R表示字体纵向,F表示横向;
  525. // 打印标签钢卷号
  526. xPos = (labHeadWith + rowNum * rowHeight + offsetX + rowHeight) * getDotMM();
  527. yPos = (blankOffset + offsetY + fillBoxLen1) * getDotMM() - getStringDots(coilLabel.coilNo)-52;//yPos = (blankOffset + offsetY ) * getDotMM() + 15
  528. strCmd += fillDataCmd(xPos, yPos, coilLabel.coilNo); //钢卷号
  529. strCmd += "^A0B,75,60\r\n"; //'^CFA,50,24';
  530. yPos = (blankOffset + offsetY + fillBoxLen2*2 + labBoxLen1) * getDotMM() + 15 - getStringDots(coilLabel.specification);//yPos = (blankOffset + offsetY + fillBoxLen2 + labBoxLen1) * getDotMM() + 15; //fillBoxLen2
  531. strCmd += fillDataCmd(xPos, yPos, coilLabel.specification);//标准号
  532. rowNum++;
  533. strCmd += "^A0B,80,60\r\n";
  534. // 打印标签牌号炉号
  535. xPos = (labHeadWith + rowNum * rowHeight + offsetX + rowHeight) * getDotMM();
  536. yPos = (blankOffset + offsetY + fillBoxLen1) * getDotMM() - getStringDots(coilLabel.heatNo)-52;//yPos = (blankOffset + offsetY ) * getDotMM() + 15;
  537. strCmd += fillDataCmd(xPos, yPos, coilLabel.heatNo); //炉次号
  538. strCmd += "^A0B,75,60\r\n"; //'^CFA,50,24';
  539. yPos = (blankOffset + offsetY + fillBoxLen2 * 2 + labBoxLen1) * getDotMM() + 15 - getStringDots(coilLabel.steelGrade)-26;//yPos = (blankOffset + offsetY + fillBoxLen2 + labBoxLen1 ) * getDotMM() + 15; //fillBoxLen2
  540. strCmd += fillDataCmd(xPos, yPos, coilLabel.steelGrade);//牌号
  541. rowNum++;
  542. strCmd += "^A0B,80,60\r\n";
  543. // 打印标签规格重量
  544. xPos = (labHeadWith + rowNum * rowHeight + offsetX + rowHeight) * getDotMM();
  545. yPos = (blankOffset + offsetY + fillBoxLen1) * getDotMM() - getStringDots(coilLabel.weight)-60;//yPos = (blankOffset + offsetY) * getDotMM() + 15;
  546. strCmd += fillDataCmd(xPos, yPos, coilLabel.weight); //重量
  547. strCmd += "^A0B,75,60\r\n"; //'^CFA,50,24';
  548. yPos = (blankOffset + offsetY + fillBoxLen2 * 2 + labBoxLen1) * getDotMM() + 15 - getStringDots(coilLabel.dimension);//yPos = (blankOffset + offsetY + fillBoxLen2 + labBoxLen1) * getDotMM() + 15; //fillBoxLen2
  549. strCmd += fillDataCmd(xPos, yPos, coilLabel.dimension);//规格
  550. rowNum++;
  551. strCmd += "^A0B,80,60\r\n";
  552. // 打印标签日期合同号
  553. xPos = (labHeadWith + rowNum * rowHeight + offsetX + rowHeight) * getDotMM();
  554. yPos = (blankOffset + offsetY + fillBoxLen1) * getDotMM() - getStringDots(coilLabel.prodDate);//yPos = (blankOffset + offsetY) * getDotMM() + 15;
  555. strCmd += fillDataCmd(xPos, yPos, coilLabel.prodDate); //日期
  556. strCmd += "^A0B,75,60\r\n"; //'^CFA,50,24';
  557. yPos = (blankOffset + offsetY + fillBoxLen2 * 2 + labBoxLen1) * getDotMM() + 15 - getStringDots(coilLabel.contractNo)+13;//yPos = (blankOffset + offsetY + fillBoxLen2 + labBoxLen1) * getDotMM() + 15; //fillBoxLen2
  558. strCmd += fillDataCmd(xPos, yPos, coilLabel.contractNo);//合同号
  559. String BarCode = "";
  560. BarCode += "CoilNo:"+coilLabel.coilNo + " ";
  561. BarCode += "Dimension:" + coilLabel.dimension + " ";
  562. BarCode += "SteelGrade:" + coilLabel.steelGrade + " ";
  563. BarCode += "Date:" + coilLabel.prodDate + " ";
  564. BarCode += "Weight:" + coilLabel.weight;
  565. xPos = (blankOffset + labHeadWith / 2+3) * getDotMM() + fontHeight;
  566. yPos = (blankOffset) * getDotMM();
  567. strCmd += fillBQDataCmd(xPos, yPos, BarCode);
  568. //strCmd += "^FO100,100";
  569. //strCmd += "^BQ,2,10";
  570. //strCmd += "^FDLA," + BarCode + "^FS";
  571. /*
  572. System.Drawing.Color co = Color.Red;
  573. System.Drawing.Font fo = new System.Drawing.Font("微软雅黑", 45, System.Drawing.FontStyle.Bold);
  574. Bitmap img = this.CreateImage(coilLabel.custName + "\r\n" + coilLabel.licenseMark+ "\r\n" + coilLabel.prodName, fo, new System.Drawing.Rectangle(), co, co);
  575. String aa = Convert(img);*/
  576. System.Drawing.Color co = Color.Red;
  577. System.Drawing.Font fo = new System.Drawing.Font("微软雅黑", 35, System.Drawing.FontStyle.Bold);
  578. Bitmap img = this.CreateImage(coilLabel.custName + "\r\n\r\n" + coilLabel.prodName + "\r\n" + coilLabel.licenseMark, fo, new System.Drawing.Rectangle(), co, co);
  579. String aa = Convert2(img);
  580. aa = aa + "^LH0,0^FO340," + "400" + "^XGR:ZONE1.GRF^FS";//1145
  581. string tempstr = coilLabel.checker;
  582. string tempstr1 = "";
  583. int len = tempstr.Length;
  584. if (len > 40)
  585. {
  586. tempstr1 = tempstr.Substring(0, 40);
  587. tempstr = tempstr.Substring(40, len - 40);
  588. }
  589. Bitmap img2 = this.CreateImage(tempstr1 + "\r\n" + tempstr, fo, new System.Drawing.Rectangle(), co, co);
  590. // Bitmap img2 = this.CreateImage(tempstr, fo, new System.Drawing.Rectangle(), co, co);
  591. String aa2 = Convert2(img2);
  592. // aa2 = aa2 + "^LH0,0^FO1145,300^XGR:ZONE1.GRF^FS";//1145
  593. aa2 = aa2 + "^LH0,0^FO1145,"+yPos+"^XGR:ZONE1.GRF^FS";//1145
  594. var t = ((img.Size.Width / 8 + ((img.Size.Width % 8 == 0) ? 0 : 1)) * img.Size.Height).ToString();
  595. var w = (img.Size.Width / 8 + ((img.Size.Width % 8 == 0) ? 0 : 1)).ToString();
  596. string zpl = string.Format("^IDB:imgName.GRF~DGR:imgName.GRF,{0},{1},{2}", t, w, aa);
  597. //strCmd += fillDataCmd(0, 0, zpl + "^LH" + xPos.ToString() + ",600" + "^FO5,60^XGR:imgName.GRF");//牌号
  598. strCmd += aa;
  599. strCmd += aa2;
  600. strCmd += getEndCmd();
  601. sendCommand(strCmd);
  602. }
  603. else if (6 == version) //添加标签打印模板4 纸张竖着、数据竖着(成品包装作业管理)
  604. {
  605. xPos = (blankOffset + labHeadWith / 2 + 5) * getDotMM() + fontHeight;
  606. yPos = (blankOffset) * getDotMM();
  607. System.Drawing.Color co = Color.Red;
  608. System.Drawing.Font fo = new System.Drawing.Font("", 20, System.Drawing.FontStyle.Bold);
  609. Bitmap img = this.CreateImage("中国", fo, Rectangle.Empty, co, co);
  610. String aa = Convert(img);
  611. var t = ((img.Size.Width / 8 + ((img.Size.Width % 8 == 0) ? 0 : 1)) * img.Size.Height).ToString();
  612. var w = (img.Size.Width / 8 + ((img.Size.Width % 8 == 0) ? 0 : 1)).ToString();
  613. //string zpl = string.Format("~DGR:imgName.GRF,{0},{1},{2}", t, w, aa);
  614. //strCmd += fillDataCmd(xPos, yPos, zpl + "^LH0,0^FO5,60^XGR:imgName.GRF");//牌号
  615. //strCmd += "^XA~DGR:imgName.GRF,";
  616. //strCmd += zpl;
  617. //strCmd += "^LH0,0^FO5,60^XGR:imgName.GRF^FS^XZ";
  618. strCmd += aa;
  619. // strCmd += getEndCmd();
  620. sendCommand(strCmd);
  621. }
  622. else
  623. {
  624. printLine(coilLabel.rollNo, coilLabel.specification);
  625. printLine(coilLabel.coilNo, coilLabel.steelGrade);
  626. printLine(coilLabel.heatNo, coilLabel.dimension);
  627. printLine(coilLabel.contractNo, coilLabel.weight);
  628. printLine(coilLabel.prodDate, coilLabel.checker);
  629. printLine(coilLabel.licenseNo, coilLabel.licenseMark);
  630. printBarcode(coilLabel.barcode);
  631. strCmd += getEndCmd();
  632. sendCommand(strCmd);
  633. }
  634. }
  635. //测试写入数据到文本文件中
  636. public void writeDoc(string str)
  637. {
  638. string filePath = "d:\\infor.txt";//这里是你的已知文件,需先创建此文件
  639. FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.ReadWrite);
  640. StreamWriter sw = new StreamWriter(fs);
  641. fs.SetLength(0);//首先把文件清空了。
  642. sw.Write(str);//写你的字符串。
  643. sw.Close();
  644. }
  645. /// <summary>
  646. /// 测试函数
  647. /// </summary>
  648. public void test()
  649. {
  650. ColdCoilLable coilLabel = new ColdCoilLable();
  651. coilLabel.rollNo = "L1-017355-10";
  652. coilLabel.specification = "GB2009-2011XGSPC";
  653. coilLabel.steelGrade = "SPCC";
  654. coilLabel.dimension = "1.8*1205";
  655. coilLabel.coilNo = "L1-017355-10AA0";
  656. coilLabel.weight = "28050";
  657. coilLabel.heatNo = "J12-56790A";
  658. coilLabel.prodDate = DateTime.Now.ToString("yyyyMMddhhmmss");
  659. coilLabel.contractNo = "532011080001";
  660. coilLabel.licenseNo = "E532011";
  661. coilLabel.licenseMark = "XGHG";
  662. coilLabel.checker = "";
  663. coilLabel.barcode = coilLabel.coilNo;
  664. printLable(coilLabel);
  665. }
  666. }
  667. }