Electron App webview.printToPDF()"另存为..."对话

时间:2017-02-07 09:11:53

标签: javascript webview electron

我正在使用something.Invoke元素创建一个使用的电子应用程序是Web应用程序的包装器。

我想让用户只需点击一个按钮并选择保存PDF的位置即可创建任何页面的PDF。

Electron示例中的代码允许每次都保存在硬编码位置。

<webview>

此工作正常但每次都会保存在同一位置,并且不允许用户选择位置或名称。

是否可以选择显示&#34;另存为...&#34;对话框?

1 个答案:

答案 0 :(得分:1)

我宁愿在服务器端执行保存过程(发送IPC命令并从电子的main.js文件中执行保存)。

无论如何,为了解决你的问题,我不知道是否有官员&#34;另存为&#34;按钮,但你可以实现与它非常相似的东西:

解决方案1 ​​ - 使用Web API:

有一种&#34;另存为&#34; (好吧,从技术上讲,它只是要求你一个目录,但你可以真正编辑按钮值..所以你唯一会想念的是文件名)这里用webkit内置,你基本上可以这样做:

let fpHandler = document.getElementByID("savePath");
fpHandler.addEventListener("change", (event) => {
   const path = event.target.files[0].path;
   // save file happens here.
});

接下来,向按钮添加一个事件监听器:

const filepath = path + "\\" + filename_and_format;

其中path包含所选路径,而字符串末尾没有任何斜杠或反斜杠(因此您需要手动添加,例如:const { remote } = require("electron"); remote.dialog.showSaveDialog(remote.getCurrentWindow(), (filename) => { console.log("filename is: " + filename); // here the save should happen. });

解决方案2 - 使用电子API。

我没试过这个,但我确定它有效。

基本上,诀窍是使用电子远程http://electron.atom.io/docs/api/remote/,可以在渲染器过程中使用。

远程模块公开对话框 gui相关模块:http://electron.atom.io/docs/api/dialog/

所以你可以通过使用showSaveDialog:http://electron.atom.io/docs/api/dialog/#dialogshowsavedialogbrowserwindow-options-callback

来实现这一点
@using (Html.BeginForm("Create", "Article", FormMethod.Post, new { @class = "insert any css class here", role = "form" }))
{