tspl.js 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. import encode from './encoding.js';
  2. class jpPrinter {
  3. constructor() {
  4. this.name = "标签模式";
  5. this.data = "";
  6. this.command = [];
  7. }
  8. init() {
  9. // 初始化代码逻辑
  10. }
  11. addCommand (content) { //将指令转成数组装起
  12. const code = new encode.TextEncoder(
  13. 'gb18030', {
  14. NONSTANDARD_allowLegacyEncoding: true
  15. }).encode(content);
  16. code.forEach(byte => this.command.push(byte));
  17. }
  18. setSize (pageWidght, pageHeight) { //设置页面大小
  19. this.data = `SIZE ${pageWidght} mm,${pageHeight} mm\r\n`;
  20. this.addCommand(this.data);
  21. }
  22. setSpeed (printSpeed) { //设置打印机速度
  23. this.data = `SPEED ${printSpeed}\r\n`;
  24. this.addCommand(this.data);
  25. }
  26. setDensity (printDensity) { //设置打印机浓度
  27. this.data = `DENSITY ${printDensity}\r\n`;
  28. this.addCommand(this.data);
  29. }
  30. setGap (printGap) { //传感器
  31. this.data = `GAP ${printGap} mm\r\n`;
  32. this.addCommand(this.data);
  33. }
  34. setCountry (country) { //选择国际字符集
  35. /*
  36. 001:USA
  37. 002:French
  38. 003:Latin America
  39. 034:Spanish
  40. 039:Italian
  41. 044:United Kingdom
  42. 046:Swedish
  43. 047:Norwegian
  44. 049:German
  45. */
  46. this.data = `COUNTRY ${country}\r\n`;
  47. this.addCommand(this.data);
  48. }
  49. setCodepage (codepage) { //选择国际代码页
  50. /*
  51. 8-bit codepage 字符集代表
  52. 437:United States
  53. 850:Multilingual
  54. 852:Slavic
  55. 860:Portuguese
  56. 863:Canadian/French
  57. 865:Nordic
  58. Windows code page
  59. 1250:Central Europe
  60. 1252:Latin I
  61. 1253:Greek
  62. 1254:Turkish
  63. 以下代码页仅限于 12×24 dot 英数字体
  64. WestEurope:WestEurope
  65. Greek:Greek
  66. Hebrew:Hebrew
  67. EastEurope:EastEurope
  68. Iran:Iran
  69. IranII:IranII
  70. Latvian:Latvian
  71. Arabic:Arabic
  72. Vietnam:Vietnam
  73. Uygur:Uygur
  74. Thai:Thai
  75. 1252:Latin I
  76. 1257:WPC1257
  77. 1251:WPC1251
  78. 866:Cyrillic
  79. 858:PC858
  80. 747:PC747
  81. 864:PC864
  82. 1001:PC100
  83. */
  84. this.data = `CODEPAGE ${codepage}\r\n`;
  85. this.addCommand(this.data);
  86. }
  87. setCls () { //清除打印机缓存
  88. this.data = "CLS \r\n";
  89. this.addCommand(this.data);
  90. }
  91. setFeed (feed) { //将纸向前推出n
  92. this.data = `FEED ${feed}\r\n`;
  93. this.addCommand(this.data);
  94. }
  95. setBackFeed (backup) { //将纸向后回拉n
  96. this.data = `BACKFEED ${backup}\r\n`;
  97. this.addCommand(this.data);
  98. }
  99. setDirection (direction) { //设置打印方向,参考编程手册 正向0,0 反向1,0
  100. this.data = `DIRECTION ${direction}\r\n`;
  101. this.addCommand(this.data);
  102. }
  103. setReference (x, y) { //设置坐标原点,与打印方向有关
  104. this.data = `REFERENCE ${x},${y}\r\n`;
  105. this.addCommand(this.data);
  106. }
  107. setFromfeed () { //根据Size进一张标签纸
  108. this.data = "FORMFEED \r\n";
  109. this.addCommand(this.data);
  110. }
  111. setHome () { //根据Size找到下一张标签纸的位置
  112. this.data = "HOME \r\n";
  113. this.addCommand(this.data);
  114. }
  115. setSound (level, interval) { //控制蜂鸣器
  116. this.data = `SOUND ${level},${interval}\r\n`;
  117. this.addCommand(this.data);
  118. }
  119. setLimitfeed (limit) { // 检测垂直间距
  120. this.data = `LIMITFEED ${limit}\r\n`;
  121. this.addCommand(this.data);
  122. }
  123. setBar (x, y, width, height) { //绘制线条
  124. this.data = `BAR ${x},${y},${width},${height}\r\n`;
  125. this.addCommand(this.data);
  126. }
  127. setBox (x_start, y_start, x_end, y_end, thickness) { //绘制方框
  128. this.data = `BOX ${x_start},${y_start},${x_end},${y_end},${thickness}\r\n`;
  129. this.addCommand(this.data);
  130. }
  131. setErase (x_start, y_start, x_width, y_height) { //清除指定区域的数据
  132. this.data = `ERASE ${x_start},${y_start},${x_width},${y_height}\r\n`;
  133. this.addCommand(this.data);
  134. }
  135. setReverse (x_start, y_start, x_width, y_height) { //将指定的区域反相打印
  136. this.data = `REVERSE ${x_start},${y_start},${x_width},${y_height}\r\n`;
  137. this.addCommand(this.data);
  138. }
  139. setText (x, y, font, x_, y_, str) { //打印文字
  140. this.data = `TEXT ${x},${y},"${font}",0,${x_},${y_},"${str}"\r\n`;
  141. this.addCommand(this.data);
  142. }
  143. setQR (x, y, level, width, mode, content) { //打印二维码
  144. this.data = `QRCODE ${x},${y},${level},${width},${mode},0,"${content}"\r\n`;
  145. this.addCommand(this.data);
  146. }
  147. setBarCode (x, y, codetype, height, readable, narrow, wide, content) { //打印条形码
  148. this.data = `BARCODE ${x},${y},"${codetype}",${height},${readable},0,${narrow},${wide},"${content}"\r\n`;
  149. this.addCommand(this.data);
  150. }
  151. setBitmap (x, y, mode, res) { //添加图片,res为画布参数
  152. console.log(res);
  153. let width = parseInt(String((res.width + 7) / 8), 10) * 8; // 确保宽度是8的倍数
  154. let height = res.height;
  155. console.log(width + "--" + height);
  156. let pointList = [];
  157. let data = `BITMAP ${x},${y},${width},${height},${mode},`;
  158. this.addCommand(data);
  159. for (let i = 0; i < height; ++i) {
  160. for (let j = 0; j < width; j += 8) {
  161. let byte = 0;
  162. for (let k = 0; k < 8; ++k) {
  163. let index = (i * res.width + j + k) * 4;
  164. // 检查像素是否为黑色
  165. if (res.data[index] === 0 && res.data[index + 1] === 0 && res.data[index + 2] === 0 && res.data[index + 3] === 0) {
  166. byte |= (1 << (7 - k)); // 设置位为1
  167. }
  168. }
  169. pointList.push(byte);
  170. }
  171. }
  172. // 将点列表转换为打印机命令
  173. pointList.forEach(byte => {
  174. this.command.push(byte);
  175. });
  176. }
  177. setPagePrint () { //打印页面
  178. this.data = "PRINT 1,1\r\n";
  179. this.addCommand(this.data);
  180. }
  181. //获取打印数据
  182. getData() {
  183. return this.command;
  184. }
  185. }
  186. // module.exports.jpPrinter = jpPrinter;
  187. export default jpPrinter;