NWJS(Node-Webkit)如何获取系统默认打印机?
解决NWJS中识别系统默认打印机的问题
方法1:直接解析win.getPrinters返回结果
win.getPrinters(callback)返回的打印机对象在不同系统中自带默认标识:
- Windows系统:打印机对象包含
isDefault布尔属性,值为true时即为默认打印机 - macOS系统:打印机对象包含
default布尔属性,值为true时即为默认打印机
代码示例:
const win = nw.Window.get(); win.getPrinters(function(printers) { const defaultPrinter = printers.find(p => p.isDefault || p.default); if (defaultPrinter) { console.log('默认打印机:', defaultPrinter.name); // 后续可直接使用该打印机执行打印逻辑 } else { console.log('未检测到系统默认打印机'); } });
方法2:用Node.js第三方模块实现跨系统兼容
如果上述方法在你的环境中不生效,可使用printer模块来获取默认打印机,兼容性更强:
- 安装模块:
npm install printer --save
- 调用示例:
const printer = require('printer'); const defaultPrinter = printer.getDefaultPrinter(); if (defaultPrinter) { console.log('默认打印机名称:', defaultPrinter.name); // 示例:提交打印任务 printer.printDirect({ data: '测试打印内容', printer: defaultPrinter.name, type: 'TEXT', success: jobID => console.log('打印任务提交成功,ID:', jobID), error: err => console.error('打印失败:', err) }); } else { console.log('系统未设置默认打印机'); }
补充:Linux系统的额外处理
部分Linux发行版中,可通过执行系统命令lpstat -d获取默认打印机,借助Node.js的child_process实现:
const { exec } = require('child_process'); exec('lpstat -d', (err, stdout) => { if (!err) { const defaultPrinterName = stdout.split(': ')[1].trim(); console.log('Linux默认打印机:', defaultPrinterName); } });
打包注意事项
使用printer模块时,打包NWJS应用前需用nw-gyp重新编译模块以匹配NWJS版本:
nw-gyp rebuild --target=<你的NWJS版本号> --arch=x64
内容的提问来源于stack exchange,提问作者Xsmael
相关产品推荐
相关产品推荐

