来自BrowserWindow的电子,printToPDF

时间:2017-03-25 10:05:26

标签: javascript pdf electron

我理解电子中printToPDF的常用方法是在main过程中调用以下代码: -

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。

我从中理解:https://github.com/electron/electron/pull/1835/commits/1eba552a8d1ab4479824275f0e0a2cea9337bd8c printToPDF已暴露给BrowserWindow,但没有关于如何从网页中实际调用printToPDF的文档。

它的谷歌也没有透露一个例子。有线索吗?

3 个答案:

答案 0 :(得分:3)

renderer.js

CFURL

main.js

const ipc = require('electron').ipcRenderer

const printPDFBtn = document.getElementById('pdfME')

printPDFBtn.addEventListener('click', function (event) {
  ipc.send('print-to-pdf')
})

答案 1 :(得分:0)

要导出当前窗口:

// In renderer process

let remote = require('electron').remote

remote.getCurrentWindow().webContents.printToPDF(...)

答案 2 :(得分:0)

可接受的答案涉及使用 printToPDF()ipc事件将内容另存为pdf的方面。但是我们也可以从渲染器过程中printToPDF。这是一个如何从渲染器进程本身打印而不是从main保存的示例。

按给定的方式导入remotefsshell(用于预览PDF),

const remote = require("electron").remote;
const fs = remote.require('fs');
const shell = remote.shell;

使用remote,检索当前窗口并调用printToPDF()方法,如下所示,

function saveInvoiceToStorage(){
    remote.getCurrentWindow().webContents.printToPDF({
        pageSize : 'A4',
    } , function(error , data){

            if(error){
                console.log(error);
                return;
            }

            let pdfPath = `Users/vkiranmaniya/Desktop/print.pdf`;

            fs.writeFile(pdfPath, data, function (error) {
                if (error) {
                     console.log(error);
                }

                shell.openExternal('file://' + pdfPath);
            });
    });
}

您还有更多配置printToPDF功能的选项,请访问Official Docs以获取更多信息。