电子:来自缓冲区的loadURL

时间:2018-05-15 09:06:43

标签: electron

在我的渲染器中,我可以发出一个事件来创建PDF。但是,在写入磁盘之前,我想先在另一个窗口中打开新的cerated PDF。如何规避对文件系统的写入并使用data作为loadURL的来源?

到目前为止我的代码:

ipcMain.on('view-pdf', (event, url) => {
  let pdf
  mainWindow.webContents.printToPDF({}, (error, data) => {
    if (error) throw error
    pdf = data
    // what's the magic here to make pdf work?
  })
  const pdfWindow = new BrowserWindow({
    width: 1024,
    height: 800,
    webPreferences: {
      plugins: true,
      webSecurity: false
    }
  })
  pdfWindow.loadURL(pdf)
})

1 个答案:

答案 0 :(得分:0)

Javascript的异步性质是一种野兽。这按预期工作:

ipcMain.on('view-pdf', (event, url) => {
  mainWindow.webContents.printToPDF({}, (error, data) => {
    if (error) throw error
    const pdf = data.toString('base64')
    const pdfWindow = new BrowserWindow({
      width: 1024,
      height: 800,
      webPreferences: {
        plugins: true,
        webSecurity: false
      }
    })
  pdfWindow.loadURL('data:application/pdf;base64,' + pdf)
  })
})

代码并不完美,但这就是它的工作原理。