Files
uniapp-gp-printer/common/js/kit/print/labelCommand.js
2021-06-27 17:28:31 +08:00

147 lines
4.7 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 标签打印命令封装
var tsc = require('@/common/js/kit/print/tsc.js');
// 打印机单位 1mm = 8dots
export function labelCommand(width, height, unit = 'percent') {
// unit 单位: mm|percent ,当单位为百分比时,最小值为1,最大值为100
this.width = width;
this.height = height;
this.unit = unit;
this.tscCommand = tsc.jpPrinter.createNew();
this.tscCommand.setSize(width, height);
this.tscCommand.setGap(3);
this.tscCommand.setCls();
this.toDotX = function(x) {
if (this.unit === 'percent') {
x = this.width * x / 100;
}
return (x * 8).toFixed(0);
}
this.toDotY = function(y) {
if (this.unit === 'percent') {
y = this.height * y / 100;
}
return (y * 8).toFixed(0);
}
this.setHome = function() {
this.tscCommand.setHome();
}
/**
* 该指令用于定义两张卷标纸间的垂直间距距离
* @param {Object} printGap 单位 mm
*/
this.setGap = function(printGap) {
this.tscCommand.setGap(printGap);
}
/**
* 将纸向前推出指定长度 单位mm
* @param {Object} length
*/
this.setFeed = function(length) {
length = length * 8;
this.tscCommand.setFeed(length)
};
/**
* 将纸向后回拉指定长度
* @param {Object} backupLength 单位mm
*/
this.setBackFeed = function(backupLength) {
backupLength = backupLength * 8;
this.tscCommand.setBackFeed(backupLength);
}
/**
* 设置文字
* @param {Object} x
* @param {Object} y
* @param {Object} text
* @param {Number} rotation {0,90,180,270}
*/
this.setText = function(x, y, text, option = {}) {
option = Object.assign({
rotation: 0,
font: 'TSS24.BF2',
xScale: 1, // 横向放大系数
yScale: 1 // 纵向放大系数
}, option)
x = this.toDotX(x);
y = this.toDotY(y);
let data =
`TEXT ${x},${y},"${option.font}",${option.rotation},${option.xScale},${option.yScale},"${text}"\r\n`;
console.log(data);
this.tscCommand.addCommand(data);
}
/**
* 设置垂直放置的文字
* y% x% 内容
*/
this.setVerticalText = function(x, y, text, option = {}) {
option = Object.assign({}, option, {
rotation: 90
})
this.setText(x, y, text, option)
}
/**
* 设置二维码
* width 1-10
* (y%, x%, 内容,大小(单位未知) 向上打印
*/
this.setQrCode = function(x, y, content, width, option = {}) {
option = Object.assign({
eccLevel: 'L', // 纠错等级 L(7%) M(15%) Q(25%) H(30%)
mode: 'M', // A 自动 M 手动
rotation: 0 // 旋转角度 0,90,180,270
}, option)
x = this.toDotX(x);
y = this.toDotY(y);
let data =
`QRCODE ${x},${y},${option.eccLevel},${width},${option.mode},${option.rotation},"${content}"\r\n`;
this.tscCommand.addCommand(data)
}
// 设置线条
//y%, x%, 粗细(一般0.5) 宽度)
this.setBar = function(x, y, width, height = 0.5) {
x = this.toDotX(x);
y = this.toDotY(y);
width = (width * 8).toFixed(0);
height = (height * 8).toFixed(0);
this.setBarByDot(x, y, width, height);
}
this.setBarByDot = function(x, y, width, height = 4) {
let data = `BAR ${x},${y},${width},${height}\r\n`;
console.log(data);
this.tscCommand.addCommand(data);
}
// 设置边框
this.setBox = function(xStart, yStart, xEnd, yEnd, thickness = 0.5) {
thickness = Number(thickness * 8).toFixed(0);
xStart = this.toDotX(xStart);
xEnd = this.toDotX(xEnd);
yStart = this.toDotY(yStart);
yEnd = this.toDotY(yEnd);
let width = (xEnd - xStart).toFixed(0);
let height = (yEnd - yStart).toFixed(0);
// 横线
this.setBarByDot(xStart, yStart, width, thickness);
// 竖线
this.setBarByDot(xStart, yStart, thickness, height);
this.setBarByDot(xEnd, yStart, thickness, height);
// 横线
this.setBarByDot(xStart, yEnd, width, thickness);
// 下面指令不能用,自己封装一个
/* let data = `BOX ${xStart},${yStart},${xEnd},${yEnd},${thickness}\r\n`;
console.log(data);
this.tscCommand.addCommand(data); */
}
this.setPagePrint = function() {
this.tscCommand.setPagePrint();
}
// 获取data
this.getData = function() {
console.log(this.tscCommand.getData().length);
return this.tscCommand.getData();
}
}