问题描述
我的目标是添加一个虚拟打印机(无论您使用什么操作系统)并在我的 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 (将#修改为@)