在电子浏览器窗口中查看PDF

时间:2018-10-16 21:14:22

标签: javascript node.js pdf electron chromium

现在在将其标记为重复之前,我知道有那些:

我已经仔细阅读了所有内容,并对其中的一些内容进行了评论,但是似乎没有一种解决方法适用。

所以我有这个电子应用程序,并且在一个.html文件中,我链接了另一个脚本,该脚本为该程序提供了一些实用功能,其中一个是这个功能:

case message.(Message)

因此,这应该使用集成的Electron PDF Viewer(使用Chromium)在新窗口中打开PDF。我使用了臭名昭著的function openPDF(filePath){ let pdfWindow = new electron.remote.BrowserWindow({ icon: './build/icon.png', width: 1200, height: 800, webPreferences: { plugins: true } }); pdfWindow.loadURL(url.format({ pathname: filePath, protocol: 'file:', slashes: true })); pdfWindow.setMenu(null); pdfWindow.on("closed", function () { pdfWindow = null }); } ,我尝试了大部分thousands of preferences you can define for a BrowserWindow,但是它总是打开窗口,然后开始下载文件而不显示它。

我三重检查了文件路径,“导入”等,更新了所有内容,但似乎找不到问题。自1.6.4起,Electron本身就支持此功能,但对我而言不起作用。

帮我,堆栈溢出,您是我唯一的希望。

1 个答案:

答案 0 :(得分:9)

@karthick正确地指出,尽管有plugins: true,这是一个禁用插件的错误。它存在since 3.0.0,今天有待修复:Issue on GitHub

更新19年3月: A fix is on the way。我会不断更新这个答案。
更新May'19::上述修复程序目前处于等待better extension support的状态。


知道这一点后,我可以通过降级到最新的2.X.X使其成功运行。为此,您必须在项目文件夹中的devDependencies中更改package.json

"devDependencies": {
    "electron": "^2.0.18"
},

或者,您可以调用系统打开文件。它将选择分配给PDF的默认程序:

shell.openItem(fullPath);

请确保始终使用fullPath之类的东西正确解析路径(path.resolve(app.getAppPath(), filePath)),因为在构建应用程序时路径可能会更改。