ZebraPrinter.cs 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  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.Windows.Forms;
  8. namespace PrintSolution.LabelPrinter
  9. {
  10. public class ZebraPrinter : ZPL2Command
  11. {
  12. /******************* 标签位置 ***********************/
  13. int blankOffset = 5; //边界宽带 单位:mm
  14. int labBoxLen1 = 26; //左边标签盒长度 单位:mm
  15. int labBoxLen2 = 29; //右边标签盒长度 单位:mm
  16. int fillBoxLen1 = 58; //左边填充盒长度 单位:mm
  17. int fillBoxLen2 = 60; //右边填充盒长度 单位:mm
  18. int rowHeight = 11; //行高 单位:mm
  19. int labHeadLen = 173; //标签头长度 单位:mm
  20. int labHeadWith = 29; //标签头宽带 单位:mm
  21. int offsetY = 0; //X坐标偏移量 单位:mm
  22. int offsetX = 0; //Y坐标偏移量 单位:mm
  23. int version = 2; //标签版本 1: 横向版本, 2: 纵向版本
  24. /******************* 可变参数 ***********************/
  25. string strCmd = ""; // 指令
  26. int xPos = 0; // X坐标
  27. int yPos = 0; // Y坐标
  28. int rowNum = 0; // 字段行数
  29. /******************* 可变参数 ***********************/
  30. /// <summary>
  31. /// 构造函数
  32. /// </summary>
  33. public ZebraPrinter() : base()
  34. {
  35. initLabelSetting();
  36. }
  37. /// <summary>
  38. /// 构造函数
  39. /// </summary>
  40. public ZebraPrinter(string ipAddr) : base(ipAddr)
  41. {
  42. Addr = ipAddr;
  43. initLabelSetting();
  44. }
  45. /// <summary>
  46. /// 标签版本属性
  47. /// </summary>
  48. public int LableVersion
  49. {
  50. get
  51. {
  52. return version;
  53. }
  54. set
  55. {
  56. version = value;
  57. }
  58. }
  59. /// <summary>
  60. /// 变量初始化
  61. /// </summary>
  62. public void initLabelSetting()
  63. {
  64. blankOffset = 5; //mm
  65. labBoxLen1 = 26; //mm
  66. labBoxLen2 = 29; //mm
  67. fillBoxLen1 = 58; //
  68. fillBoxLen2 = 60; //
  69. rowHeight = 11;
  70. labHeadLen = 173;
  71. labHeadWith = 29;
  72. offsetY = 0;
  73. offsetX = 0;
  74. // 指令初始化
  75. strCmd = ""; // 指令
  76. xPos = 0; // X坐标
  77. yPos = 0; // Y坐标
  78. rowNum = 0; // 字段行数
  79. //
  80. FontDirect = 'B';
  81. // 设定坐标偏移量
  82. switch (version)
  83. {
  84. case 1:
  85. offsetX = 5;
  86. offsetY = 3;
  87. break;
  88. case 2:
  89. offsetX = 0;
  90. offsetY = -2;
  91. break;
  92. default:
  93. offsetX = 0;
  94. offsetY = -1;
  95. break;
  96. }
  97. }
  98. /// <summary>
  99. /// 打印标签的一行数据
  100. /// </summary>
  101. /// <param name="leftData">左边格子中的数据</param>
  102. /// <param name="rightData">右边格子中的数据</param>
  103. private void printLine(string leftData, string rightData)
  104. {
  105. switch (version)
  106. {
  107. case 1:
  108. // 打印左边的数据
  109. xPos = (blankOffset + labBoxLen1 + offsetX) * getDotMM();
  110. yPos = (blankOffset + labHeadWith + offsetY) * getDotMM() + rowNum * rowHeight * getDotMM();
  111. strCmd += fillDataCmd(xPos, yPos, leftData);
  112. // 打印右边的数据, Y 坐标不变
  113. xPos = (blankOffset + labBoxLen1 + fillBoxLen1 + labBoxLen2 + offsetX) * getDotMM();
  114. strCmd += fillDataCmd(xPos, yPos, rightData);
  115. break;
  116. case 2:
  117. xPos = (blankOffset + labHeadWith + rowNum * rowHeight + offsetX) * getDotMM() + fontHeight;
  118. yPos = (blankOffset + offsetY) * getDotMM() + fillBoxLen2 * getDotMM() - getStringDots(rightData); //fillBoxLen2
  119. strCmd += getFontCmd() + fillDataCmd(xPos, yPos, rightData);
  120. // X 坐标不变
  121. //xPos = (blankOffset + labHeadWith + rowNum * rowHeight + offsetX) * dotsMm +fontHeight ;
  122. yPos = (blankOffset + fillBoxLen2 + labBoxLen2 + offsetY) * getDotMM() + fillBoxLen1 * getDotMM() - getStringDots(leftData);//
  123. strCmd += getFontCmd() + fillDataCmd(xPos, yPos, leftData);
  124. break;
  125. }
  126. rowNum++;
  127. }
  128. /// <summary>
  129. /// 打印条码
  130. /// </summary>
  131. /// <param name="data">条码数据项</param>
  132. private void printBarcode(string data)
  133. {
  134. //int codeHeight = 150;
  135. int offset = 5;
  136. string orientation = "B"; // N = 正常 (Normal);R = 顺时针旋转90度(Roated);I = 顺时针旋转180度(Inverted);B = 顺时针旋转270度 (Bottom)
  137. switch (version)
  138. {
  139. case 1:
  140. xPos = (offset + blankOffset )* getDotMM();
  141. yPos = (blankOffset + labHeadWith + rowNum * rowHeight + offsetY) * getDotMM();
  142. orientation = "N";
  143. strCmd += getBarcodeCmd(xPos, yPos, orientation, data);
  144. break;
  145. case 2:
  146. xPos = (blankOffset + labHeadWith + rowNum * rowHeight + offset) * getDotMM();//+ barcodeHeight
  147. yPos = labHeadLen * getDotMM() - data.Length * fontWidth; //(rowY + offsetY) * dotsMm + rowNum * rowHeight * dotsMm;
  148. orientation = "B";
  149. strCmd += getBarcodeCmd(xPos, yPos, orientation, data);
  150. break;
  151. }
  152. }
  153. /// <summary>
  154. /// 打印标签
  155. /// </summary>
  156. /// <param name="coilLabel">标签内容</param>
  157. public void printLable(ColdCoilLable coilLabel)
  158. {
  159. initLabelSetting();
  160. strCmd += getBeginCmd();
  161. if(1 == version)strCmd += getDefaultFontCmd();
  162. printLine(coilLabel.rollNo, coilLabel.specification);
  163. printLine(coilLabel.coilNo, coilLabel.steelGrade);
  164. printLine(coilLabel.heatNo, coilLabel.dimension);
  165. printLine(coilLabel.contractNo, coilLabel.weight);
  166. printLine(coilLabel.prodDate, coilLabel.checker);
  167. printLine(coilLabel.licenseNo, coilLabel.licenseMark);
  168. printBarcode(coilLabel.barcode);
  169. strCmd += getEndCmd();
  170. sendCommand(strCmd);
  171. }
  172. /// <summary>
  173. /// 测试函数
  174. /// </summary>
  175. public void test()
  176. {
  177. ColdCoilLable coilLabel = new ColdCoilLable();
  178. coilLabel.rollNo = "L1-017355-10";
  179. coilLabel.specification = "GB2009-2011XGSPC";
  180. coilLabel.steelGrade = "SPCC";
  181. coilLabel.dimension = "1.8*1205";
  182. coilLabel.coilNo = "L1-017355-10AA0";
  183. coilLabel.weight = "28050";
  184. coilLabel.heatNo = "J12-56790A";
  185. coilLabel.prodDate = DateTime.Now.ToString("yyyyMMddhhmmss");
  186. coilLabel.contractNo = "532011080001";
  187. coilLabel.licenseNo = "E532011";
  188. coilLabel.licenseMark = "XGHG";
  189. coilLabel.checker = "";
  190. coilLabel.barcode = coilLabel.coilNo;
  191. printLable(coilLabel);
  192. }
  193. }
  194. }