const EventEmitter = require('events');
const Printer = require('pdf-to-printer');
const fs = require('fs');
class Printing extends EventEmitter {
constructor() {
super();
this.availablePrinters = []; // holds all available printers
this.defaultPrinter = ''; // holds the defailt printer
this.printerToUse = ''; // if not default printer -> add the printer to print on in this property
// is set to default printer during initialization and needs to be overwritten
// if another printer has to be used.
this.getAvailablePrinters((success) => {
console.log(`CORE | PRINTING | Read available printers: ${success}`);
this.getDefaultPrinter((successDefault) => {
console.log(`CORE | PRINTING | Read default printer: ${successDefault}`);
})
}); // initialized list of available printers
}
/**
* Returns list of availbale printers
* @param {function} callback success (true/false)
*/
getAvailablePrinters(callback) {
Printer
.getPrinters()
.then((printers) => {
if (printers !== null) {
this.availablePrinters = printers;
callback(true);
} else {
this.availablePrinters = [];
callback(false);
}
})
.catch((err) => {
console.log('ERROR: ' + err.message);
callback(false);
});
}
/**
* gets the default printer from os and sets the printer to be used
* @param {function} callback success (true/false)
*/
getDefaultPrinter(callback) {
Printer
.getDefaultPrinter()
.then((printer) => {
console.log('Default printer: ' + printer);
this.defaultPrinter = printer;
this.printerToUse = printer;
callback(true);
})
.catch((err) => {
console.log('ERROR: ' + err.message);
callback(false);
})
}
/**
* Sends a PDF Document to default printer
* @param {string} pdfPath path to pdf file to be printed
* @param {function} callback success (true/false)
*/
printPDFToDefaultPrinter(pdfPath, callback) {
try {
if (fs.existsSync(pdfPath)) {
// Set page to be printed scaled to fit a page of the printer
const options = {
printer: this.printerToUse,
unix: ["-o fit-to-page"],
win32: ['-print-settings "fit"']
};
Printer
.print(pdfPath, options)
.then((result) => {
console.log(result);
return callback(true);
})
.catch((err) => {
console.log('CORE PRINTING | ERROR | Error printing document: ' + err.message);
return callback(false);
});
} else {
console.log('CORE PRINTING | ERROR | PDF File to be printed can not be found: ' + pdfPath);
return callback(false);
}
} catch (err) {
console.log('CORE PRINTING | ERROR | Error while printing a pdf document: ' + err.message);
return callback(false);
}
}
}
module.exports = Printing;
const printing = new Printing();
printing.printPDFToDefaultPrinter(__dirname + '/../../temp/credentials_1.pdf', (successPrint) => {
console.log('Success Printing: ' + successPrint);
})