electron 打印PDF的思路与碰到的BUG及缺陷


由于工作需求要调用打印机打印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页开始有大概率会出现乱码

      尝试方案3:调用PDFtoPrinter.exe软件 命令行打印 调用步骤跟方案2相似、把文件下载至本地、只是调用的软件不同了而已。  存在问题:可能由于个人水平问题未找到软件相关命令行参数配置、 在打印PDF时 页面边缘的文字会被裁剪掉部分。 尝试方案4:调用 PDFXCview.exe ,PDFtoPrinter 是对这个软件进行了封装, 所以理论上PDFXCview可配置项会多一点, 但是实际由于个人水平问题找不到太多配置项, 出现了跟PDFtoPrinter 一样的边缘文字被裁剪问题。  

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注