首页 > 解决方案 > 强制保存 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,这将成为性能杀手。

标签: node.jselectronwebrequest

解决方案


推荐阅读