minishouyin/node_modules/node-thermal-printer/lib/interfaces/printer.js
2025-11-12 11:35:57 +08:00

55 lines
1.4 KiB
JavaScript

const Interface = require('./interface');
class Printer extends Interface {
constructor (printerName, moduleName) {
super();
this.name = printerName;
if (moduleName && typeof moduleName === 'object') {
this.driver = moduleName;
} else {
throw new Error('No driver set!');
}
}
getPrinterName () {
let { name } = this;
if (!name || name === 'auto') {
const pl = this.driver.getPrinters().filter((p) => p.attributes.indexOf('RAW-ONLY') > -1);
if (pl.length > 0) {
name = pl[0].name;
}
}
if (!name || name === 'auto') {
throw new Error('A RAW-ONLY Printer could not be detected. Please configure a Printer-Name');
}
return name;
}
async isPrinterConnected () {
const foundPrinter = this.driver.getPrinter(this.getPrinterName());
if (foundPrinter && foundPrinter.status.indexOf('NOT-AVAILABLE') === -1) {
return true;
}
throw false;
}
async execute (buffer, options = {}) {
return new Promise((resolve, reject) => {
this.driver.printDirect({
data: buffer,
printer: this.getPrinterName(),
type: 'RAW',
docname: options.docname !== undefined ? options.docname : false,
success (jobID) {
resolve(`Printed with job id: ${jobID}`);
},
error (error) {
reject(error);
},
});
});
}
}
module.exports = Printer;