Source: tests/playground/printpdf.js

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);
})