微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 Node 创建虚拟打印机? (Windows/IOS/Linux)

如何解决如何使用 Node 创建虚拟打印机? (Windows/IOS/Linux)

我的目标是添加一个虚拟打印机(无论您使用什么操作系统)并在我的 Electron 应用程序中监听打印作业。

我想以编程方式安装打印机时出现问题。

我尝试了许多 NPM 软件包,这些软件包几乎都已弃用并且与我正在使用的软件包的当前版本不兼容,并且打印机的安装始终是手动完成的。例如,在 Windows 10 上,您必须使用“添加打印机或扫描仪”按钮。

目前,包@pake/node-printer (https://github.com/ekoeryanto/node-printer) 允许我检索已安装打印机的列表。如果我的打印机没有安装,我会根据操作系统运行命令。

const Printer = require('@pake/node-printer');

if (!isVirtualPrinterReady(PRINTER_NAME)) {
  createVirtualPrinter(PRINTER_NAME,PRINTER_IP)
}

function isVirtualPrinterReady(name) {
    let printers = Printer.getPrinters();

    for (let i in printers) {
        if (typeof printers[i].name !== 'undefined' && printers[i].name === name) {
            return true;
        }
    }
    
    return false;
};

function createVirtualPrinter(printerName,printerIp) {
    let command;
    let args;
    if (process.platform === 'darwin' || process.platform === 'linux') {
        let ppdFilePath = path.resolve(GPSP_PPD_PATH);
        command = 'lpadmin';
        args = [
            '-E','-p "' + printerName + '"','-v "' + printerIp + '"','-P "' + ppdFilePath + '"','-o printer-is-shared=false;','cupsenable "' + printerName + '";','cupsaccept "' + printerName + '"'
        ];
    } else {
        // rundll32.exe printui.dll,PrintUIEntry /b "PRINTER_NAME" /n "PRINTER_NAME" /if /f "%windir%\\inf\\ntprint.inf" /r "http://localhost:631"
      // /m "Microsoft Print To PDF" /w
        command = 'rundll32.exe';
        args = [
            'printui.dll,PrintUIEntry','/x','/b "' + printerName + '"','/n "' + printerName + '"','/if','/f "%windir%\\inf\\ntprint.inf"','/r "' + printerIp + '"','/m "' + (os.release().indexOf("10.") === 0 ? "Microsoft Print To PDF" : "MS Publisher Color Printer") + '"','/z'
        ];
    }
    command = command + " " + args.join(" ");

    return new Promise(function (resolve,reject) {
        child_process.exec(command,function (error) {
            if (error) reject(error);
            else resolve();
        });
    });
};

除了运行这些命令来安装我的打印机(npm 包等)之外,还有其他方法吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。