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

314 lines
6.7 KiB
JavaScript

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

var encode = require("./encoding.js")
var jpPrinter = {
createNew: function() {
var jpPrinter = {};
var data = [];
var bar = ["UPC-A", "UPC-E", "EAN13", "EAN8", "CODE39", "ITF", "CODABAR", "CODE93", "CODE128"];
jpPrinter.name = "账单模式";
jpPrinter.init = function() { //初始化打印机
data.push(27)
data.push(64)
};
jpPrinter.setText = function(content) { //设置文本内容
var code = new encode.TextEncoder(
'gb18030', {
NONSTANDARD_allowLegacyEncoding: true
}).encode(content)
for (var i = 0; i < code.length; ++i) {
data.push(code[i])
}
}
jpPrinter.setBarcodeWidth = function(width) { //设置条码宽度
data.push(29)
data.push(119)
if (width > 6) {
width = 6;
}
if (width < 2) {
width = 1;
}
data.push(width)
}
jpPrinter.setBarcodeHeight = function(height) { //设置条码高度
data.push(29)
data.push(104)
data.push(height)
}
jpPrinter.setBarcodeContent = function(t, content) {
var ty = 73;
data.push(29)
data.push(107)
switch (t) {
case bar[0]:
ty = 65;
break;
case bar[1]:
ty = 66;
break;
case bar[2]:
ty = 67;
break;
case bar[3]:
ty = 68;
break;
case bar[4]:
ty = 69;
break;
case bar[5]:
ty = 70;
break;
case bar[6]:
ty = 71;
break;
case bar[7]:
ty = 72;
break;
case bar[8]:
ty = 73;
break;
}
data.push(ty)
}
jpPrinter.setSelectSizeOfModuleForQRCode = function(n) { //设置二维码大小
data.push(29)
data.push(40)
data.push(107)
data.push(3)
data.push(0)
data.push(49)
data.push(67)
if (n > 15) {
n = 15
}
if (n < 1) {
n = 1
}
data.push(n)
}
jpPrinter.setSelectErrorCorrectionLevelForQRCode = function(n) { //设置纠错等级
/*
n 功能 纠错能力
48 选择纠错等级 L 7
49 选择纠错等级 M 15
50 选择纠错等级 Q 25
51 选择纠错等级 H 30
*/
data.push(29)
data.push(40)
data.push(107)
data.push(3)
data.push(0)
data.push(49)
data.push(69)
data.push(n)
}
jpPrinter.setStoreQRCodeData = function(content) { //设置二维码内容
var code = new encode.TextEncoder(
'gb18030', {
NONSTANDARD_allowLegacyEncoding: true
}).encode(content)
data.push(29)
data.push(40)
data.push(107)
data.push(parseInt((code.length + 3) % 256))
data.push(parseInt((code.length + 3) / 256))
data.push(49)
data.push(80)
data.push(48)
for (var i = 0; i < code.length; ++i) {
data.push(code[i])
}
}
jpPrinter.setPrintQRCode = function() { //打印二维码
data.push(29)
data.push(40)
data.push(107)
data.push(3)
data.push(0)
data.push(49)
data.push(81)
data.push(48)
}
jpPrinter.setHorTab = function() { //移动打印位置到下一个水平定位点的位置
data.push(9)
}
jpPrinter.setAbsolutePrintPosition = function(where) { //设置绝对打印位置
data.push(27)
data.push(36)
data.push(parseInt(where % 256))
data.push(parseInt(where / 256))
}
jpPrinter.setRelativePrintPositon = function(where) { //设置相对横向打印位置
data.push(27)
data.push(92)
data.push(parseInt(where % 256))
data.push(parseInt(where / 256))
}
jpPrinter.setSelectJustification = function(which) { //对齐方式
/*
0, 48 左对齐
1, 49 中间对齐
2, 50 右对齐
*/
data.push(27)
data.push(97)
data.push(which)
}
jpPrinter.setLeftMargin = function(n) { //设置左边距
data.push(29)
data.push(76)
data.push(parseInt(n % 256))
data.push(parseInt(n / 256))
}
jpPrinter.setPrintingAreaWidth = function(width) { //设置打印区域宽度
data.push(29)
data.push(87)
data.push(parseInt(width % 256))
data.push(parseInt(width / 256))
}
jpPrinter.setSound = function(n, t) { //设置蜂鸣器
data.push(27)
data.push(66)
if (n < 0) {
n = 1;
} else if (n > 9) {
n = 9;
}
if (t < 0) {
t = 1;
} else if (t > 9) {
t = 9;
}
data.push(n)
data.push(t)
}
jpPrinter.setBitmap = function(res) { //参数,画布的参数
console.log(res)
var width = parseInt((res.width + 7) / 8 * 8 / 8)
var height = res.height;
var time = 1;
var temp = res.data.length - width * 32;
var point_list = []
console.log(width + "--" + height)
data.push(29)
data.push(118)
data.push(48)
data.push(0)
data.push((parseInt((res.width + 7) / 8) * 8) / 8)
data.push(0)
data.push(parseInt(res.height % 256))
data.push(parseInt(res.height / 256))
console.log(res.data.length)
console.log("temp=" + temp)
for (var i = 0; i < height; ++i) {
for (var j = 0; j < width; ++j) {
for (var k = 0; k < 32; k += 4) {
var po = {}
if (res.data[temp] == 0 && res.data[temp + 1] == 0 && res.data[temp + 2] == 0 && res
.data[temp + 3] == 0) {
po.point = 0;
} else {
po.point = 1;
}
point_list.push(po)
temp += 4
}
}
time++
temp = res.data.length - width * 32 * time
}
for (var i = 0; i < point_list.length; i += 8) {
var p = point_list[i].point * 128 + point_list[i + 1].point * 64 + point_list[i + 2].point *
32 + point_list[i + 3].point * 16 + point_list[i + 4].point * 8 + point_list[i + 5]
.point * 4 + point_list[i + 6].point * 2 + point_list[i + 7].point
data.push(p)
}
}
jpPrinter.setPrint = function() { //打印并换行
data.push(10)
}
jpPrinter.setPrintAndFeed = function(feed) { //打印并走纸feed个单位
data.push(27)
data.push(74)
data.push(feed)
}
jpPrinter.setPrintAndFeedRow = function(row) { //打印并走纸row行
data.push(27)
data.push(100)
data.push(row)
}
jpPrinter.getData = function() { //获取打印数据
return data;
};
return jpPrinter;
},
Query: function() {
var queryStatus = {};
var buf;
var dateView;
queryStatus.getRealtimeStatusTransmission = function(n) { //查询打印机实时状态
/*
n = 1传送打印机状态
n = 2传送脱机状态
n = 3传送错误状态
n = 4传送纸传感器状态
*/
buf = new ArrayBuffer(3)
dateView = new DataView(buf)
dateView.setUint8(0, 16)
dateView.setUint8(1, 4)
dateView.setUint8(2, n)
queryStatus.query(buf)
}
queryStatus.query = function(buf) {
wx.writeBLECharacteristicValue({
deviceId: app.BLEInformation.deviceId,
serviceId: app.BLEInformation.writeServiceId,
characteristicId: app.BLEInformation.writeCharaterId,
value: buf,
success: function(res) {
},
complete: function(res) {
console.log(res)
buf = null
dateView = null;
}
})
}
return queryStatus;
}
};
module.exports.jpPrinter = jpPrinter;