node.js - 强制保存 PDF 而不是预览
问题描述
我需要保存所有 PDF(带对话框)而不是预览。在 Electron (electron-forge) 应用程序中,我总是得到 PDF 内容的空白无效空白 PDF 预览 - 即使我尝试了一些外部确定有效的内容 - 这是一个有效的 PDF 文件:
mainWindow.loadURL('https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf')
但是,如果我使用LoadURL()
将我重定向到其他 url,使用
header('Content-Disposition:attachment;filename=
.. 下载的文件在哪里,对于 xls 它工作得很好,我只听'will-download'
mainWindow.webContents.session.on('will-download', (event, item, webContents) => {
item.once('done', (event, state) => { // process DownloadItem, show dialog
但是对于 pdf 应用程序仍然尝试在电子中使用有缺陷的默认 pdf 查看器,它只会显示查看器的空骨架。在 "webRequest.onHeadersReceived" 期间,是否有一些东西(最好是快速)开始下载已经在进行中的 Web 请求?
在应用程序中,我可以根据请求判断它是否是 PDF,需要弄清楚下一步该做什么:
app.on('ready', function () {
const { session } = require('electron');
session.defaultSession.webRequest.onHeadersReceived(function (details, callback) {
console.log('onHeadersReceived', details);
// WHAT NOW, HOW SAVE THIS, IF IT IS PDF ?
callback({ cancel: false, responseHeaders: details.responseHeaders });
});
});
我需要继续保存当前 webRequest 中的文件,而不是重定向请求,因为生成器(一些古老的古老 API)会再次重新生成 PDF,这将成为性能杀手。
解决方案
推荐阅读
- react-native-router-flux - 没有为 Key X 定义路由
- html - WebSql 不适用于此表单的输入
- buildroot - Buildroot virtual package (openssl)
- python - remove 'this field is required' text above django form
- javascript - Looking for a way to have chrome extension badge popup before clicking on extension?
- php - How to fetch notifications from a table to session users
- kotlin - A forEach function that supports stepping
- javascript - Map two arrays and compare in Javascript(React)
- pine-script - Enter Opposite Position How?
- python - How to run a flask program when debug = True