在我的渲染器中,我可以发出一个事件来创建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)
})
答案 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)
})
})
代码并不完美,但这就是它的工作原理。