由于工作需求要调用打印机打印PDF文件(在WIN7 32位 8G内存机器上打印),但是网上资料大多都是东拼西凑, 所以特地记录一下个人的尝试方案路线。 使用到的点(ipcMain, ipcRenderer 渲染进程与主进程通信、 Node.js 下载文件、child_process、spawn )
尝试方案1: 调用 electron 自带的 webview.print 方法 可以通过创建隐藏的printWindow窗口, 渲染窗口调用 ipcRenderer.send 发送打印事件、 主窗口在监听事件后下发打印指令printWindow.webContents.print ,可以打印普通的HTML页面, 如果有打印固定的网页页面如(打印标签、静态网页)等, 无法打印PDF。
代码示例:
渲染进程: ipcRenderer.send(“print”, url);
主进程: const printWindow = new BrowserWindow({
show: false,
webPreferences: {
nodeIntegration: true,
contextIsolation: false,
devTools: true,
webviewTag: true,
}
})
ipcMain.on(“print”, (e, url) => {
printWindow.loadURL(url).then(res =>{
console.log(“加载完成”);
printWindow.webContents.print({
silent: true,
printBackground: true,
deviceName: ” //这里指定打印机
})
});
})
尝试方案2:调用SumatraPDF软件child_process.spawn命令行打印 (相关NPM库node-printer、node-pdf-printer),把文件下载至本地后命令行调用打印(参考教程 http://www.manongjc.com/detail/22-ccxzhiiydhnlsma.html ), 这个方案存在的问题在于打印时传输到打印机的PDF文件大小相比其他软件打印(如:同一份文件在wps、网页直接右键打印、PDFtoPrinter.exe)过大、 一份700Kb的PDF文件、他传输的文件大小为8-9M, 其他方式为2-3M, 尚不清楚是否由于这个原因导致在win7 32位 8G内存机器上打印至第5-6页开始有大概率会出现乱码
