问题描述
我了解电子中 printToPDF 的常用方法是在 main 进程中调用以下代码:-
I understand the usual method within electron to printToPDF is within the main process to call the following code:-
const {BrowserWindow} = require('electron') const fs = require('fs') let win = new BrowserWindow({width: 800, height: 600}) win.loadURL('http://github.com') win.webContents.on('did-finish-load', () => { // Use default printing options win.webContents.printToPDF({}, (error, data) => { if (error) throw error fs.writeFile('/tmp/print.pdf', data, (error) => { if (error) throw error console.log('Write PDF successfully.') }) }) })
但是,我想要实现的是通过单击按钮从 BrowserWindow 中有效地调用 printToPDF.
However, what I am trying to achieve is to effectively call printToPDF from within BrowserWindow on the click of a button.
我由此理解:http://www.51sjk.com/Upload/Articles/1/0/336/336989_20221116144948989.jpg 已将 printToPDF 暴露给 BrowserWindow,但没有关于如何从网页中实际调用 printToPDF 的文档.
I understand from this: http://www.51sjk.com/Upload/Articles/1/0/336/336989_20221116144948989.jpg that printToPDF has been exposed to BrowserWindow, but there is no documentation on how to actually call printToPDF from within a webpage.
它的谷歌也没有显示一个例子.有什么线索吗?
A google of it doesn't reveal an example either. Any clues?
推荐答案
renderer.js
renderer.js
const ipc = require('electron').ipcRenderer const printPDFBtn = document.getElementById('pdfME') printPDFBtn.addEventListener('click', function (event) { ipc.send('print-to-pdf') })
main.js
const electron = require('electron') const fs = require('fs') const app = electron.app const BrowserWindow = electron.BrowserWindow const Menu = electron.Menu const Tray = electron.Tray const ipc = electron.ipcMain const path = require('path') const url = require('url') const shell = electron.shell let mainWindow ipc.on('print-to-pdf', function (event) { const pdfPath = path.join(__dirname, '/reports/print.pdf') const win = BrowserWindow.fromWebContents(event.sender) win.webContents.printToPDF({printBackground: true, landscape: true}, function (error, data) { if (error) throw error fs.writeFile(pdfPath, data, function (error) { if (error) { throw error } shell.openExternal('file://' + pdfPath) event.sender.send('wrote-pdf', pdfPath) }) }) })