jcPrinterSdk_api_third.js 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824
  1. //websocket
  2. var websocket;
  3. /* //响应数据 */
  4. var ackJsonData;
  5. /**消息列表 */
  6. var MessageList = {};
  7. let timeoutTimer;
  8. var timeout_duration = 10000;
  9. /**通过websocket发送消息 */
  10. function sendMsg(msg, callback) {
  11. console.log("timeout_duration",timeout_duration)
  12. console.log('sendMsg', msg.apiName);
  13. MessageList[msg.apiName] = callback;
  14. var data = JSON.stringify(msg);
  15. var tryTimes = 10;
  16. if (!websocket || websocket.readyState !== WebSocket.OPEN) {
  17. if (callback && typeof callback === 'function') {
  18. callback(new Error("打印服务未开启"))
  19. }
  20. return;
  21. }
  22. timeoutTimer = setTimeout(function () {
  23. // //超时关闭打印服务,进入重连机制
  24. // websocket.close();
  25. if (callback && typeof callback === 'function') {
  26. console.log('回调超时');
  27. callback(new Error("打印服务消息接收超时"))
  28. }
  29. }, timeout_duration);
  30. for (var i = 0; i < tryTimes; i++) {
  31. websocket.send(data);
  32. return;
  33. }
  34. }
  35. /**
  36. * 初始化打印服务,连接打印服务
  37. *
  38. * @param {function} onServiceConnected - 当打印服务连接建立时调用的回调函数。
  39. * @param {function} onNotSupportedService - 当打印服务服务不支持时调用的回调函数。
  40. * @param {function} onServiceDisconnected - 当打印服务连接断开时调用的回调函数。
  41. * @param {function} onPrinterDisConnect - 当打印机离线时调用的回调函数。
  42. * @return {undefined} 该函数没有返回值。
  43. *
  44. * @description
  45. * 1. 所有接口的调用前提是先调用该接口进行打印服务连接。
  46. * 2. 调用成功后会停止初始化打印服务,如果未调用成功,会间隔3秒调用一次,直到成功连接为止。
  47. * 3. 建议在页面加载时调用该接口,回调成功后依次调用初始化SDK、获取打印机、选择打印机等接口。
  48. */
  49. function getInstance(onServiceConnected, onNotSupportedService, onServiceDisconnected, onPrinterDisConnect) {
  50. //是否已连接
  51. let isConnected = false;
  52. //是否已重连
  53. let isReconnecting = false;
  54. //重连时间
  55. let reconnectTimer = null;
  56. const connect = () => {
  57. if ('WebSocket' in window) {
  58. websocket = new WebSocket('ws://127.0.0.1:37989');
  59. if ('binaryType' in WebSocket.prototype) {
  60. websocket.binaryType = 'arraybuffer';
  61. }
  62. if ('timeout' in WebSocket.prototype) {
  63. websocket.timeout = 5000;
  64. }
  65. websocket.addEventListener('open', (event) => {
  66. isConnected = true;
  67. isReconnecting = false;
  68. console.log('WebSocket connected !');
  69. clearInterval(reconnectTimer);
  70. onServiceConnected();
  71. });
  72. websocket.addEventListener('error', (event) => {
  73. if (timeoutTimer != null) {
  74. clearTimeout(timeoutTimer);
  75. }
  76. isConnected = false;
  77. ackJsonData = '';
  78. console.log('WebSocket error !', event);
  79. if (!isReconnecting) {
  80. isReconnecting = true;
  81. onServiceDisconnected();
  82. reconnect();
  83. }
  84. });
  85. websocket.addEventListener('close', (event) => {
  86. if (timeoutTimer != null) {
  87. clearTimeout(timeoutTimer);
  88. }
  89. isConnected = false;
  90. ackJsonData = '';
  91. console.log('WebSocket close !', event);
  92. if (!isReconnecting) {
  93. isReconnecting = true;
  94. onServiceDisconnected();
  95. reconnect();
  96. }
  97. });
  98. websocket.addEventListener('message', (event) => {
  99. if (timeoutTimer != null) {
  100. console.log('收到消息');
  101. clearTimeout(timeoutTimer);
  102. }
  103. readCallback(event, () => {
  104. onPrinterDisConnect();
  105. });
  106. });
  107. } else {
  108. onNotSupportedService();
  109. }
  110. };
  111. const reconnect = () => {
  112. if (!isConnected && isReconnecting) {
  113. clearInterval(reconnectTimer);
  114. reconnectTimer = setInterval(connect, 3000);
  115. }
  116. };
  117. connect();
  118. }
  119. /**
  120. * 从事件对象中读取回调信息,并根据接收到的数据执行各种操作。
  121. *
  122. * @param {object} event - 包含回调信息的事件对象。
  123. * @param {function} onPrinterDisConnect - 打印机断开连接时要执行的回调函数。
  124. * @return {undefined} 此函数没有返回值。
  125. */
  126. function readCallback(event, onPrinterDisConnect) {
  127. var callBackInfo = event.data;
  128. console.log('readCallback', callBackInfo);
  129. ackJsonData = callBackInfo;
  130. var callbackName;
  131. if (isJSON(ackJsonData)) {
  132. var arrParse = JSON.parse(ackJsonData);
  133. //接口回调
  134. if (!!MessageList[arrParse.apiName]) {
  135. MessageList[arrParse.apiName](null, arrParse);
  136. }
  137. if (arrParse.apiName == 'configurationWifi') {
  138. timeout_duration = 10000
  139. }
  140. //回调分发
  141. if (arrParse.apiName == 'printStatus') {
  142. if (arrParse['resultAck']['online'] == 'offline') {
  143. onPrinterDisConnect();
  144. }
  145. } else {
  146. if (arrParse['resultAck']['callback'] != undefined) {
  147. callbackName = arrParse['resultAck']['callback']['name'];
  148. if (callbackName == 'onCoverStatusChange') {
  149. var coverStatus = arrParse['resultAck']['callback']['coverStatus'];
  150. onCoverStatusChange(coverStatus);
  151. } else if (callbackName == 'onElectricityChange') {
  152. var powerLever = arrParse['resultAck']['callback']['powerLever'];
  153. onElectricityChange(powerLever);
  154. }else{
  155. console.log('无需处理');
  156. }
  157. }
  158. }
  159. ackJsonData = '';
  160. }
  161. }
  162. /**
  163. * 打印机上盖状态变化回调函数。
  164. *
  165. * @param {type} coverStatus - 打印机上盖状态,0为上盖开启,1为上盖关闭
  166. *
  167. */
  168. function onCoverStatusChange(coverStatus) {
  169. console.log('打印机盒盖有变化!');
  170. }
  171. /**
  172. * 打印机电量变化回调函数。
  173. *
  174. * @param {type} powerLever - 电量等级,取值范围1-4,满格电为4
  175. *
  176. */
  177. function onElectricityChange(powerLever) {
  178. console.log('打印机电量有变化!');
  179. }
  180. /**
  181. * 初始化SDK,在打印服务连接成功后调用此接口。
  182. * 在调用SDK的绘制接口之前,必须先调用此接口。
  183. *
  184. * @param {object} json - 包含必要参数的JSON对象,格式如下:
  185. * {
  186. * "fontDir": string, //字体文件目录,默认为"",暂不生效
  187. * }
  188. * @param {function} callbackFunction - 发送消息后执行的回调函数。
  189. * @return {undefined} 该函数没有返回值。
  190. */
  191. function initSdk(json, callbackFunction) {
  192. var jsonObj = {
  193. apiName: 'initSdk',
  194. parameter: json
  195. };
  196. sendMsg(jsonObj, callbackFunction);
  197. }
  198. /**
  199. * 获取所有打印机信息。
  200. *
  201. * @param {function} callbackFunction - 获取信息后执行的回调函数。
  202. * @return {undefined} 该函数没有返回值。
  203. *
  204. * @description
  205. * 需要在打印服务连接成功后调用此函数,建议在打印服务连接成功的回调函数中调用。
  206. * 注意:此函数只能获取 USB连接的打印机列表。
  207. */
  208. function getAllPrinters(callbackFunction) {
  209. //刷新设备时,关闭设备
  210. //closePrinter();
  211. var jsonObj = { apiName: 'getAllPrinters' };
  212. sendMsg(jsonObj, callbackFunction);
  213. }
  214. /**
  215. * 获取所有打印机信息。
  216. *
  217. * @param {function} callbackFunction - 获取信息后执行的回调函数。
  218. * @return {undefined} 该函数没有返回值。
  219. *
  220. * @description
  221. * 需要在打印服务连接成功后调用此函数,建议在打印服务连接成功的回调函数中调用。
  222. * 注意:此函数只能获取 USB连接的打印机列表。
  223. */
  224. function scanUSBPrinters(callbackFunction) {
  225. //刷新设备时,关闭设备
  226. //closePrinter();
  227. var jsonObj = { apiName: 'scanUSBPrinters' };
  228. sendMsg(jsonObj, callbackFunction);
  229. }
  230. /**
  231. * 搜索Wifi打印机
  232. *
  233. * @param {function} callbackFunction - 获取信息后执行的回调函数。
  234. * @return {undefined} 该函数没有返回值。
  235. *
  236. * @description
  237. * 需要在打印服务连接成功后调用此函数,建议在打印服务连接成功的回调函数中调用。
  238. */
  239. function scanWifiPrinter(callbackFunction) {
  240. timeout_duration = 25000;
  241. //刷新设备时,关闭设备
  242. //closePrinter();
  243. var jsonObj = { apiName: 'scanWifiPrinter' };
  244. sendMsg(jsonObj, callbackFunction);
  245. }
  246. /**
  247. * 发送消息以选择打印机。
  248. *
  249. * @param {string} printerName - 打印机名称。
  250. * @param {number} port - 端口号。
  251. * @param {function} callbackFunction - 消息发送后的回调函数。
  252. * @return {undefined} 无返回值。
  253. *
  254. * @description
  255. * 需要在打印服务连接成功后调用此函数,建议在getAllPrinters调用成功的回调接口中调用该接口,保证传入的打印机名称和端口的打印机状态正常。
  256. * 注意:此函数仅能连接 USB 打印机列表中的打印机。
  257. */
  258. function selectPrinter(printerName, port, callbackFunction) {
  259. var jsonObj = {
  260. apiName: 'selectPrinter',
  261. parameter: { printerName: printerName, port: port }
  262. };
  263. sendMsg(jsonObj, callbackFunction);
  264. }
  265. /**
  266. * 发送消息以选择打印机。
  267. *
  268. * @param {string} printerName - 打印机名称。
  269. * @param {number} port - 端口号。
  270. * @param {function} callbackFunction - 消息发送后的回调函数。
  271. * @return {undefined} 无返回值。
  272. *
  273. * @description
  274. * 需要在打印服务连接成功后调用此函数,建议在scanWifiPrinter调用成功的回调接口中调用该接口,保证传入的打印机名称和端口的打印机状态正常。
  275. * 注意:此函数仅能连接 WIFI 打印机列表中的打印机。
  276. */
  277. function connectWifiPrinter(printerName, port, callbackFunction) {
  278. timeout_duration = 25000;
  279. var jsonObj = {
  280. apiName: 'connectWifiPrinter',
  281. parameter: { printerName: printerName, port: port }
  282. };
  283. sendMsg(jsonObj, callbackFunction);
  284. }
  285. /**
  286. * 配置打印机的Wifi网络
  287. *
  288. * @param {string} wifiName - wifi网络的名称。
  289. * @param {string} wifiPassword - wifi网络的密码。
  290. * @param {function} callbackFunction - wifi配置完成后要调用的回调函数。
  291. * @return {undefined} 此函数不返回任何值。
  292. *
  293. * @description
  294. * 注意:仅支持2.4G频段网络,且需要在连接成功后配置。需要在USB连接成功后配置
  295. */
  296. function configurationWifi(wifiName, wifiPassword, callbackFunction) {
  297. timeout_duration = 25000;
  298. var jsonObj = {
  299. apiName: 'configurationWifi',
  300. parameter: { wifiName: wifiName, wifiPassword: wifiPassword }
  301. }
  302. sendMsg(jsonObj, callbackFunction);
  303. }
  304. /**
  305. * 获取打印机的wifi配置。
  306. *
  307. * @param {function} callbackFunction - 在获取WiFi配置后将调用的回调函数。
  308. * @return {undefined} 此函数不返回任何值。
  309. */
  310. function getWifiConfiguration(callbackFunction){
  311. var jsonObj = {
  312. apiName: 'getWifiConfiguration'
  313. }
  314. sendMsg(jsonObj, callbackFunction);
  315. }
  316. /**
  317. * 初始化绘制画板
  318. *
  319. * @param {Object} json - 包含初始化绘制画板所需数据的JSON对象。格式如下:
  320. * {
  321. * "width": number, // 画板的宽度,单位为mm
  322. * "height": number, // 画板的高度,单位为mm
  323. * "rotate": number, // 画板的旋转角度,仅支持0、90、180、270
  324. * "path": string, // 字体文件的路径,默认为"",暂不生效
  325. * "verticalShift": number, // 垂直偏移量,暂不生效
  326. * "horizontalShift": number // 水平偏移量,暂不生效
  327. * }
  328. * @param {Function} callbackFunction - 消息发送后要执行的回调函数。
  329. * @return {undefined} 此函数不返回任何值。
  330. *
  331. * @description
  332. * 增加接口说明:
  333. * 1. 在调用绘制接口之前,必须先初始化SDK。
  334. * 2. 绘制元素前,必须先初始化画板,否则会引起崩溃!
  335. * 3. 初始化画板时会清空画板上次绘制的内容!
  336. */
  337. function InitDrawingBoard(json, callbackFunction) {
  338. var jsonObj = {
  339. apiName: 'InitDrawingBoard',
  340. parameter: json
  341. };
  342. sendMsg(jsonObj, callbackFunction);
  343. }
  344. /**
  345. * 绘制标签文本。
  346. * @param {object} json - 包含标签文本信息的JSON对象。
  347. * JSON格式要求如下:
  348. * - x: x轴坐标,单位mm
  349. * - y: y轴坐标,单位mm
  350. * - height: 文本高度,单位mm
  351. * - width: 文本宽度,单位mm
  352. * - value: 文本内容
  353. * - fontFamily: 字体名称,暂不生效,使用默认字体思源黑体
  354. * - rotate: 旋转角度,仅支持0、90、180、270
  355. * - fontSize: 字号,单位mm
  356. * - textAlignHorizonral: 水平对齐方式:0:左对齐 1:居中对齐 2:右对齐
  357. * - textAlignVertical: 垂直对齐方式:0:顶对齐 1:垂直居中 2:底对齐
  358. * - letterSpacing: 字母之间的标准间隔,单位mm
  359. * - lineSpacing: 行间距(倍距),默认1
  360. * - lineMode: 1:宽高固定,内容大小自适应,预设宽高过大时字号放大,预设宽高过小时字号缩小,
  361. * 保证内容占据满预设宽高(字号/字符间距/行间距 按比例缩放)
  362. * 2:宽度固定,高度自适应
  363. * 4:宽高固定,超出内容直裁切
  364. * 6:宽高固定,内容超过预设的文本宽高自动缩放
  365. * 建议设置为6
  366. * - fontStyle: 字体样式[加粗,斜体,下划线,删除下划线(预留)]
  367. * @param {function} callbackFunction - 绘制完成后执行的回调函数。
  368. * @description 绘制标签文本前必须先初始化画板
  369. */
  370. function DrawLableText(json, callbackFunction) {
  371. var jsonObj = {
  372. apiName: 'DrawLableText',
  373. parameter: json
  374. };
  375. sendMsg(jsonObj, callbackFunction);
  376. }
  377. /**
  378. * 绘制一维码条形码。
  379. *
  380. * @param {Object} json - 包含一维码条形码信息的JSON对象。格式如下:
  381. * {
  382. * "x": number, // x轴坐标,单位mm
  383. * "y": number, // y轴坐标,单位mm
  384. * "height": number, // 一维码宽度,单位mm
  385. * "width": number, // 一维码高度,单位mm(包含文本高度)
  386. * "value": string, // 一维码内容
  387. * "codeType": number, // 条码类型:
  388. * // 20: CODE128
  389. * // 21: UPC-A
  390. * // 22: UPC-E
  391. * // 23: EAN8
  392. * // 24: EAN13
  393. * // 25: CODE93
  394. * // 26: CODE39
  395. * // 27: CODEBAR
  396. * // 28: ITF25
  397. * "rotate": number, // 旋转角度,仅支持0、90、180、270
  398. * "fontSize": number, // 文本字号,单位mm,字号为0则文本不显示
  399. * "textHeight": number, // 文本高度,单位mm,高度为0则文本不显示
  400. * "textPosition": number // 一维码文字识别码显示位置:
  401. * // 0: 下方显示
  402. * // 1: 上方显示
  403. * // 2: 不显示
  404. * }
  405. * @param {Function} callbackFunction - 消息发送后要执行的回调函数。
  406. * @return {undefined} 此函数不返回任何值。
  407. *
  408. * @description
  409. * 1. 绘制元素前,必须先初始化画板
  410. */
  411. function DrawLableBarCode(json, callbackFunction) {
  412. var jsonObj = {
  413. apiName: 'DrawLableBarCode',
  414. parameter: json
  415. };
  416. sendMsg(jsonObj, callbackFunction);
  417. }
  418. /**
  419. * 绘制二维码。
  420. *
  421. * @param {Object} json - 包含二维码信息的JSON对象。格式如下:
  422. * {
  423. * "x": number, // x轴坐标,单位mm
  424. * "y": number, // y轴坐标,单位mm
  425. * "height": number, // 二维码高度,默认宽高一致
  426. * "width": number, // 二维码宽度,单位mm
  427. * "value": string, // 二维码内容
  428. * "codeType": number, // 条码类型:
  429. * // 31: QR_CODE
  430. * // 32: PDF417
  431. * // 33: DATA_MATRIX
  432. * // 34: AZTEC
  433. * "rotate": number, // 旋转角度,仅支持0、90、180、270
  434. * }
  435. * @param {Function} callbackFunction - 消息发送后要执行的回调函数。
  436. * @return {undefined} 此函数不返回任何值。
  437. *
  438. * @description
  439. * 1. 绘制元素前,必须先初始化画板
  440. */
  441. function DrawLableQrCode(json, callbackFunction) {
  442. var jsonObj = {
  443. apiName: 'DrawLableQrCode',
  444. parameter: json
  445. };
  446. sendMsg(jsonObj, callbackFunction);
  447. }
  448. /**
  449. * 绘制线条。
  450. *
  451. * @param {Object} json - 包含线条信息的JSON对象。格式如下:
  452. * {
  453. * "x": number, // x轴坐标,单位mm
  454. * "y": number, // y轴坐标,单位mm
  455. * "height": number, // 线高,单位mm
  456. * "width": number, // 线宽,单位mm
  457. * "lineType": number, // 线条类型:1:实线 2:虚线类型,虚实比例1:1
  458. * "rotate": number, // 旋转角度,仅支持0、90、180、270
  459. * "dashwidth": number // 线条为虚线宽度,【实线段长度,空线段长度】
  460. * }
  461. * @param {Function} callbackFunction - 消息发送后要执行的回调函数。
  462. * @return {undefined} 此函数不返回任何值。
  463. *
  464. * @description
  465. * 1. 绘制元素前,必须先初始化画板
  466. */
  467. function DrawLableLine(json, callbackFunction) {
  468. var jsonObj = {
  469. apiName: 'DrawLableLine',
  470. parameter: json
  471. };
  472. sendMsg(jsonObj, callbackFunction);
  473. }
  474. /**
  475. * 绘制图形。
  476. *
  477. * @param {Object} json - 包含绘制图形信息的JSON对象。格式如下:
  478. * {
  479. * "x": number, // x轴坐标,单位mm
  480. * "y": number, // y轴坐标,单位mm
  481. * "height": number, // 图形高度,单位mm
  482. * "width": number, // 图形宽度,单位mm
  483. * "rotate": number, // 旋转角度,仅支持0、90、180、270
  484. * "cornerRadius": number, // 圆角半径,单位mm,暂不生效
  485. * "lineWidth": number, // 线宽,单位mm
  486. * "lineType": number, // 线条类型:1:实线 2:虚线类型,虚实比例1:1
  487. * "graphType": number, // 图形类型:1:圆,2:椭圆,3:矩形 4:圆角矩形
  488. * "dashwidth": number // 线条为虚线宽度,【实线段长度,空线段长度】
  489. * }
  490. * @param {Function} callbackFunction - 消息发送后要执行的回调函数。
  491. * @return {undefined} 此函数不返回任何值。
  492. *
  493. * @description
  494. * 1. 绘制元素前,必须先初始化画板
  495. */
  496. function DrawLableGraph(json, callbackFunction) {
  497. var jsonObj = {
  498. apiName: 'DrawLableGraph',
  499. parameter: json
  500. };
  501. sendMsg(jsonObj, callbackFunction);
  502. }
  503. /**
  504. * 绘制图片。
  505. *
  506. * @param {Object} json - 包含绘制图片信息的JSON对象。格式如下:
  507. * {
  508. * "x": number, // x轴坐标,单位mm
  509. * "y": number, // y轴坐标,单位mm
  510. * "height": number, // 图片高度,单位mm
  511. * "width": number, // 图片宽度,单位mm
  512. * "rotate": number, // 旋转角度,仅支持0、90、180、270
  513. * "imageProcessingType": number, // 图像处理算法,默认0
  514. * "imageProcessingValue": number, // 算法参数,默认127
  515. * "imageData": number, // 图片base64数据,不含数据头
  516. * // 如原始数据为“data:image/png;base64,iVBORw0KGgoAAAANSU”
  517. * // 传入的数据需要去除头部,数据为,“iVBORw0KGgoAAAANSU”
  518. * }
  519. * @param {Function} callbackFunction - 消息发送后要执行的回调函数。
  520. * @return {undefined} 此函数不返回任何值。
  521. *
  522. * @description
  523. * 增加接口说明:
  524. * 1. 绘制元素前,必须先初始化画板
  525. */
  526. function DrawLableImage(json, callbackFunction) {
  527. var jsonObj = {
  528. apiName: 'DrawLableImage',
  529. parameter: json
  530. };
  531. sendMsg(jsonObj, callbackFunction);
  532. }
  533. /**
  534. * 生成图像预览图像。
  535. *
  536. * @param {number} displayScale - 图像显示比例,表示 1mm 的点数,可调整预览图大小。
  537. * 例如,200dpi 的打印机可设置为 8,300dpi 的打印机可设置为 11.81。
  538. * @param {Function} callbackFunction - 图像生成后要执行的回调函数。
  539. * @return {undefined} 此函数不返回任何值。
  540. *
  541. * @description
  542. * 增加方法说明:
  543. * 1. 在调用此函数之前,必须确保图像数据已准备好,否则无法生成预览。
  544. */
  545. function generateImagePreviewImage(displayScale, callbackFunction) {
  546. var jsonObj = {
  547. apiName: 'generateImagePreviewImage',
  548. displayScale: displayScale
  549. };
  550. sendMsg(jsonObj, callbackFunction);
  551. }
  552. /**
  553. * 启动打印任务。
  554. *
  555. * @param {number} printDensity - 打印浓度,根据不同打印机型号取值范围不同,具体如下:
  556. * - D11、D101、D110、H10、B16、B18: 取值范围 1~3,默认为 2。
  557. * - B3S、B203、B1、K3、K3W、M2: 取值范围 1~5,默认为 3。
  558. * - B50、B11、B50W、B32、Z401: 取值范围 1~15,默认为 8。
  559. * @param {number} paperType - 纸张类型,可选值:
  560. * 1: 间隙纸
  561. * 2: 黑标纸
  562. * 3: 连续纸
  563. * 4: 定孔纸
  564. * 5: 透明纸
  565. * 6: 标牌
  566. * @param {string} printMode - 打印模式,可选值:
  567. * 1: 热敏
  568. * 2: 热转印
  569. * 注意,不同打印机型号支持的打印模式有限制,具体如下:
  570. * - D11、D101、D110、H10、B16、B18、B3S、B203、B1、K3、K3W、B11 仅支持热敏。
  571. * - B50、B50W、B32、Z401、M2 仅支持热转印。
  572. * @param {number} count - 总打印份数,表示所有页面的打印份数之和。
  573. * 例如,如果你有3页需要打印,第一页打印3份,第二页打印2份,第三页打印5份,那么count的值应为10(3+2+5)。
  574. * @param {Function} callbackFunction - 打印任务启动后要执行的回调函数。
  575. * @return {undefined} 此函数不返回任何值。
  576. *
  577. * @description
  578. * 1. 在调用此函数之前,请确保打印设备已准备好并连接。
  579. */
  580. function startJob(printDensity, printLabelType, printMode, count, callbackFunction) {
  581. var jsonObj = {
  582. apiName: 'startJob',
  583. parameter: {
  584. printDensity: printDensity,
  585. printLabelType: printLabelType,
  586. printMode: printMode,
  587. count: count
  588. }
  589. };
  590. sendMsg(jsonObj, callbackFunction);
  591. }
  592. /**
  593. * 提交打印任务,并执行回调函数。
  594. *
  595. * @param {string} [printData=null] - 打印数据的 JSON 字符串。
  596. * @param {string} printerImageProcessingInfo - 打印机图像处理信息的 JSON 字符串,包含打印份数信息,格式如下:
  597. * {
  598. * "printerImageProcessingInfo": {
  599. * "printQuantity": 1 // 用于指定当前页的打印份数。例如,如果需要打印3页,第一页打印3份,第二页打印2份,第三页打印5份,则在3次提交数据时,printerImageProcessingInfo 中的 "printQuantity" 值分别应为 3,2,5。
  600. * }
  601. * }
  602. * @param {function} callbackFunction - 提交作业后的回调函数。
  603. * @return {undefined} 此函数不返回任何值。
  604. *
  605. * @description
  606. * 需要先开启打印任务,完成绘制后再提交打印任务
  607. */
  608. function commitJob(printData, printerImageProcessingInfo, callbackFunction) {
  609. // 解析 printDataJson,如果解析失败则使用空对象
  610. var printDataJson = parseJsonSafely(printData);
  611. // 解析 printerImageProcessingInfoJson,如果解析失败则使用空对象
  612. var printerImageProcessingInfoJson = parseJsonSafely(printerImageProcessingInfo);
  613. // 构建提交作业的参数对象
  614. var jsonObj = {
  615. apiName: 'commitJob',
  616. parameter: {
  617. printData: printDataJson,
  618. printerImageProcessingInfo: printerImageProcessingInfoJson['printerImageProcessingInfo'],
  619. }
  620. };
  621. // 调用 sendMsg 函数发送消息并执行回调函数
  622. sendMsg(jsonObj, callbackFunction);
  623. }
  624. /**
  625. * 结束打印任务
  626. *
  627. * @param {function} callbackFunction - 结束任务后的回调函数
  628. * @description
  629. * 收到最后一页最后一份打印页面后调用该函数结束打印任务
  630. */
  631. function endJob(callbackFunction) {
  632. var jsonObj = { apiName: 'endJob' };
  633. sendMsg(jsonObj, callbackFunction);
  634. }
  635. /**
  636. * 取消当前的打印任务,并执行回调函数。
  637. *
  638. * @param {function} callbackFunction - 取消打印任务后的回调函数。
  639. * @return {undefined} 此函数不返回任何值。
  640. */
  641. function cancleJob(callbackFunction) {
  642. var jsonObj = { apiName: 'stopPrint' };
  643. sendMsg(jsonObj, callbackFunction);
  644. }
  645. /**
  646. * 设置打印机的自动关机时间。
  647. *
  648. * @param {number} nType - 自动关机时间的类型:
  649. * 1: 15分钟,
  650. * 2: 30分钟,
  651. * 3: 60分钟,
  652. * 4: 从不
  653. * @param {function} callbackFunction - 请求完成后的回调函数。
  654. */
  655. function setPrinterAutoShutDownTime(nType, callbackFunction) {
  656. var jsonObj = {
  657. apiName: 'setPrinterAutoShutDownTime',
  658. parameter: { nType: nType }
  659. };
  660. sendMsg(jsonObj, callbackFunction);
  661. }
  662. /**
  663. * 将字符串解析为 JSON 对象,如果解析失败则返回空对象
  664. * @param {string} jsonString - 待解析的 JSON 字符串
  665. * @returns {object} - 解析得到的 JSON 对象
  666. */
  667. function parseJsonSafely(jsonString) {
  668. try {
  669. return JSON.parse(jsonString) || {};
  670. } catch (error) {
  671. return {};
  672. }
  673. }
  674. /**
  675. * 在一定次数的尝试后从 API 获取结果。
  676. *
  677. * @param {number} tryTime - 尝试获取结果的次数。
  678. * @param {string} apiName - API 的名称。
  679. * @param {string} errInfo - 错误信息。
  680. * @return {object} 包含获取到的结果的对象。
  681. */
  682. function getResult(tryTime, apiName, errInfo) {
  683. tryTimes = tryTime;
  684. let result = {};
  685. while (tryTimes--) {
  686. if (!isJSON(ackJsonData)) continue;
  687. var arrParse = JSON.parse(ackJsonData);
  688. if (arrParse['apiName'] === apiName) {
  689. result = arrParse['resultAck'];
  690. break;
  691. }
  692. }
  693. if (tryTimes <= 0) {
  694. result['result'] = false;
  695. result['errorCode'] = 0x12;
  696. result['info'] = errInfo;
  697. }
  698. return result;
  699. }
  700. /**
  701. * 检查字符串是否为JSON格式。
  702. *
  703. * @param {string} str - 要检查的字符串。
  704. * @returns {boolean} 如果字符串是JSON格式的,则返回true,否则返回false。
  705. */
  706. function isJSON(str) {
  707. if (typeof str == 'string') {
  708. try {
  709. var obj = JSON.parse(str);
  710. if (typeof obj == 'object' && obj) {
  711. return true;
  712. } else {
  713. return false;
  714. }
  715. } catch (e) {
  716. //console.log('error:'+str+'!!!'+e);
  717. return false;
  718. }
  719. }
  720. console.log('It is not a string!');
  721. }