You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

153 lines
4.8 KiB

3 days ago
  1. var LODOP = getCLodop();
  2. //初始化
  3. function initPrintSetting(clodoplisence) {
  4. try{
  5. var LODOP= getCLodop();
  6. if (LODOP.VERSION) {
  7. if (LODOP.CVERSION){
  8. //alert("当前有WEB打印服务C-Lodop可用!\n C-Lodop版本:"+LODOP.CVERSION+"(内含Lodop"+LODOP.VERSION+")");
  9. //如果没有问题打印的信息
  10. //LODOP.SET_LICENSES("","646464550585055535859561289003","688858710010010811411756128900","");
  11. LODOP.SET_LICENSES("",clodoplisence,"","");
  12. //判断当前打印模式
  13. /* if(printerData.seq >= 0){
  14. LODOP.SET_PRINTER_INDEXA(printerData.printName);
  15. LODOP.PRINT();
  16. }else if(printerData.seq === -1){
  17. LODOP.PREVIEW();
  18. }else if(printerData.seq === -2){
  19. LODOP.PRINT_DESIGN();
  20. }*/
  21. }else {
  22. alert("本机已成功安装了Lodop控件!\n 版本号:"+LODOP.VERSION);
  23. }
  24. };
  25. }catch(err){
  26. }
  27. };
  28. //批量打印标签的方法
  29. function printRollLabel(printRow, printerData){
  30. // 初始化 LODOP 对象
  31. initPrintSetting(printerData.clodoplisence);
  32. //初始化打印机
  33. LODOP.NewPage();
  34. LODOP.SET_PRINT_PAGESIZE(0,770,770,"");
  35. //打印二维码内容
  36. LODOP.ADD_PRINT_BARCODE(10,23,75,75,"QRCode", printRow.qrtext);
  37. LODOP.SET_PRINT_STYLE("FontSize",18);
  38. LODOP.ADD_PRINT_TEXT(80,26,300,20,row.qrtext);
  39. //判断是否存在
  40. let partType = printRow.partType;
  41. if(partType && partType != ''){
  42. LODOP.ADD_PRINT_TEXT(45,150,120,75, partType);
  43. LODOP.SET_PRINT_STYLE("FontSize",14);
  44. }
  45. LODOP.ADD_PRINT_TEXT(100,26,300,20,"SO No:"+printRow.orderNo);
  46. LODOP.ADD_PRINT_TEXT(120,26,300,20,"Part No:"+printRow.partNo);
  47. LODOP.ADD_PRINT_TEXT(140,26,300,20,"APN:"+printRow.apn);
  48. LODOP.ADD_PRINT_TEXT(160,26,300,20,"qty:"+printRow.qty);
  49. LODOP.ADD_PRINT_TEXT(180,26,300,20,"Operator:"+printRow.username);
  50. LODOP.ADD_PRINT_TEXT(200,26,300,20,"Create Date:"+printRow.createdDate);
  51. //判断是否存在排位
  52. let col = printRow.col;
  53. if(col){
  54. LODOP.ADD_PRINT_TEXT(220,26,300,20,"排位:"+col);
  55. }
  56. let rewind = printRow.rewind;
  57. if(rewind){
  58. LODOP.ADD_PRINT_TEXT(232,164,123,41,rewind);
  59. LODOP.SET_PRINT_STYLEA(0,"FontSize",21);
  60. LODOP.SET_PRINT_STYLEA(0,"Bold",1);
  61. }
  62. //判断当前打印模式
  63. if(printerData.seq >= 0){
  64. LODOP.SET_PRINTER_INDEXA(printerData.printName);
  65. LODOP.PRINT();
  66. }else if(printerData.seq === -1){
  67. LODOP.PREVIEW();
  68. }else if(printerData.seq === -2){
  69. LODOP.PRINT_DESIGN();
  70. }
  71. }
  72. //生成二维码
  73. function generateDataMatrixImage(serialNo, width, height) {
  74. const canvas = document.createElement('canvas');
  75. canvas.width = width;
  76. canvas.height = height;
  77. const ctx = canvas.getContext('2d');
  78. // 白色背景
  79. ctx.fillStyle = 'white';
  80. ctx.fillRect(0, 0, width, height);
  81. // 生成DataMatrix码
  82. const codeCanvas = document.createElement('canvas');
  83. try {
  84. bwipjs.toCanvas(codeCanvas, {
  85. bcid: 'datamatrix', // 条码类型:DataMatrix
  86. text: serialNo, // 要编码的文本
  87. scale: 35, // 缩放因子
  88. height: 9, // 条码高度
  89. includetext: false, // 不在条码中包含文本
  90. backgroundcolor: 'ffffff', // 白色背景
  91. barcolor: '000000' // 黑色条码
  92. });
  93. // 将条码绘制到主canvas上方(占用约2/3高度)
  94. const codeSize = Math.min(width * 0.95, height * 0.65);
  95. const codeX = (width - codeSize) / 2; // 水平居中
  96. const codeY = height * 0.05; // 顶部留5%空白
  97. ctx.drawImage(codeCanvas, codeX, codeY, codeSize, codeSize);
  98. } catch (e) {
  99. console.error('生成DataMatrix失败:', e);
  100. }
  101. // 返回图片的base64数据
  102. return canvas.toDataURL('image/png');
  103. }
  104. //打印A类型标签
  105. function printPageA(serialNo, dmCode){
  106. //初始化打印机
  107. LODOP.NewPage();
  108. LODOP.SET_PRINT_PAGESIZE(0,150,150,"");
  109. LODOP.ADD_PRINT_IMAGE(5, 10, 46, 46, dmCode);
  110. LODOP.SET_PRINT_STYLEA(0, "Stretch", 2);
  111. }
  112. //打印B类型标签
  113. function printPageB(serialNo, dmCode){
  114. //初始化打印机
  115. LODOP.NewPage();
  116. LODOP.SET_PRINT_PAGESIZE(0,600,180,"");
  117. LODOP.ADD_PRINT_IMAGE(2, 17, 46, 46, dmCode);
  118. LODOP.SET_PRINT_STYLEA(0, "Stretch", 2);
  119. //打印二维码的内容
  120. LODOP.ADD_PRINT_TEXT(40,25,220,15, serialNo);
  121. LODOP.SET_PRINT_STYLEA(0,"FontName","微软雅黑");
  122. LODOP.SET_PRINT_STYLEA(0,"FontSize",8);
  123. LODOP.SET_PRINT_STYLEA(0,"Bold",1);
  124. }
  125. //打印C标签
  126. function printPageC(serialNo, dmCode){
  127. //初始化打印机
  128. LODOP.NewPage();
  129. LODOP.SET_PRINT_PAGESIZE(0,400,120,"");
  130. LODOP.ADD_PRINT_IMAGE(2, 15, 36, 36, dmCode);
  131. LODOP.SET_PRINT_STYLEA(0, "Stretch", 2);
  132. //打印二维码的内容
  133. LODOP.ADD_PRINT_TEXT(32,21,220,15,serialNo);
  134. LODOP.SET_PRINT_STYLEA(0,"FontName","微软雅黑");
  135. LODOP.SET_PRINT_STYLEA(0,"FontSize",6);
  136. LODOP.SET_PRINT_STYLEA(0,"Bold",1);
  137. }