Electron控制打印行为与导出PDF
控制打印行为
打印是日常办公常见的需求,Electron支持把webContents内的内容发送至打印机进行打印,下面是打印webContents内容的代码:
let { remote } = require("electron");
let webContents = remote.getCurrentWebContents();
webContents.print( {
silent: false,
printBackground: true,
deviceName:'',
}, (success, errorType) => {
if (!success) console.log(errorType);
如你所见,通过调用webContents对象的print方法,即可打印当前页面的内容。执行上面的代码,系统提示你选择打印机,如图所示:
如果你希望通过程序指定一个打印机,那么你应该先获得链接当前电脑的所有打印机,找出你要使用的打印机,代码如下:
let { remote } = require("electron");
let webContents = remote.getCurrentWebContents();
let printers = webContents.getPrinters();
printers.forEach(element => {
console.log(element.name);
以上程序执行后,在我的电脑上输出如下内容:
Send To OneNote 2016
Microsoft XPS Document Writer
Microsoft Print to PDF
Fax
选择其中一个,设置为webContents.print方法的参数的deviceName属性,然后把silent属性设置为true,即可跳过配置打印机的环节,直接打印内容。
当打印成功之后,会直接进入webContents.print的回调函数,回调函数success参数为true;如果打印失败,或者用户取消打印,success参数为false。
导出PDF
开发者可以利用WebContents的打印能力把页面内容导出成PDF文件,如下代码所示:
let { remote } = require("electron");
let path = require("path");
let fs = require("fs");
let webContents = remote.getCurrentWebContents();
let data = await webContents.printToPDF({});
let filePath = path.join(__static, "allen.pdf");
fs.writeFile(filePath, data, error => {
if (error) throw error;
console.log("保存成功");
webContents.printToPDF,接收一个配置参数,与print接收的配置参数类似,不再详述。此方法返回一个Promise对象,对象的内容是pdf的Buffer缓存,开发者可以直接把这个Buffer保存到指定的文件路径,就像上面代码演示的一样。
也可以打开保存文件对话框,让用户选择保存文件的路径,如下代码所示:
let pathObj = await remote.dialog.showSaveDialog({
title: "保存成PDF",
filters: [{ name: "pdf", extensions: ["pdf"] }]