tsc-print
前言
本插件基于 typescript
开发,目的在于解决公司正在使用的 MA2400P打印机
的前端本地打印需求。插件对 MA2400P打印机
内部的初始化、连接、打印机全局命令、常用打印快捷命令、打印方法、websocket打印等方法封装,插件内部需要异步的接口均使用Promise封装,争取做到简单易用。
代码地址
仓库地址
快速使用
import tscPrint from 'tsc-print'
const tsc = new tscPrint({
width: 60,
height: 40,
gapHeight: 2.65
})
tsc.addBarCode({
x: 10,
y: 1,
height: 20,
narrow: 0.5,
wide: 0.5,
code: '123456'
})
tsc.addQrCode({
x: 10,
y: 10,
cellWidth: 8,
content: '爱我中华'
})
tsc.addFont({
x: 10,
y: 1,
fontheight: 10,
text: '爱我中华'
})
tsc.startPrint().then(res => {
console.log(res)
}).catch(_ => {
console.log('打印失败', _)
})
API列表
> new tscPrint()
使用 new tscPrint()
方法创建一个打印对象,反回打印机常用方法以及本地usb打印机列表usbPrintList,后续所有打印操作都在此对象上进行。paper
参数为纸张相关信息,部分字段必填,connection
参数为连接信息,一般本地启动的socket服务的默认信息不用改,当改变了本地的连接信息后,如 端口,需要传入此项参数,或者配置了网络打印机的情况下,需要配置此参数。
const tsc = new tscPrint(paper: Paper, connection?: Connection)
interface Paper {
width: number
height: number
gapHeight: number
speed?: number
density?: number
sensor?: sensorEnum
gapOffset?: number
}
interface Connection {
printType?: printTypeEnum
socketIp?: string
socketPort?: string
networkIp?: string
networkPort?: string
}
enum printTypeEnum {
USB,
NETWORK
}
enum sensorEnum {
GAP,
BLINE
}
> tsc.getSelfTest(usbPath?: string):Promise<object []>
打印自检页。
tsc.getSelfTest().then(res => {
console.log(res)
})
> tsc.getUsbPrintList():Promise<object []>
获取usb打印机列表。
tsc.getUsbPrintList().then(res => {
console.log(res)
})
> tsc.getPrintState(usbPath?: string):Promise<object []>
获取打印机状态。
tsc.getPrintState().then(res => {
})
> tsc.resetDot(dot: number):void
重置插件内部dot,dot用于内部计算统一单位所用,部分api用的参数不是mm, 而是dot, 插件内部通过dot来转换的,默认为1 mm = 8 dots, 一般情况不用修改,如果外部设备DPI有变,调用此方法即可重置。
- 200 DPI : 1 mm = 8 dots
- 300 DPI : 1mm = 12 dots
tsc.resetDot(12)
> tsc.clearCmd():void
用于清空已经添加到内部缓存区的命令,清空完后可以重新添加,而不用再重新new一个对象,ps:调用打印方法后会自动清空缓存区内容,不用手动调用此方法,仅针对添加了错误命令的情况。
tsc.clearCmd()
> setCustomCmd(cmd: object):void
向缓存区尾部添加自定义命令,用于添加一些插件内部不能满足的自定义命令。
tsc.setCustomCmd({ printername: '' })
> setCustomCmdUnShift(cmd: object):void
向缓存区头部添加自定义命令。
tsc.setCustomCmdUnShift({ printername: '' })
> commandCrlf(cmd: string):void
向缓存区添加sendcommand_crlf命令。
tsc.commandCrlf('QRCODE 0,0,Q,10,A,0,M2,S7,"content"')
tsc.setCustomCmd({ sendcommand_crlf: 'QRCODE 0,0,Q,10,A,0,M2,S7,"content"' })
> sendUint8Array(uint8_arr: Uint8Array):void
向缓存区添加uint8_arr命令。
const u8 = new Uint8Array([12, 10])
tsc.sendUint8Array(u8)
> addBarCode(bc: BarCodeModel):void
向缓存区添加条形码。
interface BarCodeModel {
x: number
y: number
height: number
narrow: number
wide: number
code: string
type?: string
readable?: number
rotation?: number
}
tsc.addBarCode({
x: 10,
y: 1,
height: 20,
narrow: 0.5,
wide: 0.5,
code: '123456'
})
> addQrCode(q: QrCodeModel):void
向缓存区添加二维码。
interface QrCodeModel {
x: number
y: number
cellWidth: number
content: string
mask?: string
eccLevel?: string
mode?: string
rotation?: number
model?: string
}
tsc.addQrCode({
x: 10,
y: 10,
cellWidth: 8,
content: '爱我中华'
})
> addFont(q: FontModel):void
向缓存区添加文字信息。
interface FontModel {
x: number
y: number
fontheight: number
text: string
rotation?: number
fontstyle?: number
fontunderline?: number
szFaceName?: string
}
tsc.addFont({
x: 10,
y: 1,
fontheight: 10,
text: '爱我中华'
})
> tsc.startPrint(usbPath?: string[, lq?: LabelQuantity]):Promise<>
开始打印,打印后会自动清理缓存区,下次再打印时不必手动清理缓存区内容。
interface LabelQuantity {
sets: number
copies?: number
}
tsc.startPrint().then(res => {
})
> Q&A一些常见问题
1. webSocket连接服务在哪里?
答: tsc提供了一个windows的安装包,启动即可在本地启动webSocket服务,不管是使用网络打印方式还是本地打印机打印方式,均需在本地安装此软件(如果有远程服务器,在远程上安装了安装包,也可以连接远程的服务)。
2. 为什么网络打印还是需要连接本地webSocket服务?
答:所有的打印api都在本地的webSocket服务中,由本地服务向打印机发送消息,安装包在代码仓库根目录。
3. 本地多台打印机的情况怎么办?
答:本插件所有关于打印相关的接口均支持传打印机path,tsc对象里有usbList列表,打印时尽量带上usbPath路径打印,否则当本地有多台打印机时程序将会变得不可控。
4. 打印机还支持那些打印?
答:打印机支持的打印内容还比较多,比如打印图片(但是非常难用,需要使用本地文件系统的文件地址,前端不能实现,除非手动将图片地址复制进去,可以使用DiagTool_V1.54.exe软件先上传到打印机后再打印),设置字体,或者其他更多的内容,详见PSCL.pdf文档。
5. 怎么添加文档里没有的内容,比如打印图片?
答:可以使用 setCustomCmd(cmd: object) 方法和 setCustomCmdUnShift(cmd: object) 添加自定义命令到缓存区。