首页 > 解决方案 > 使用 Node、Express、EJS:如何提供 PDF 文件

问题描述

我认为这很简单,但我已经被困了一段时间了。我正在尝试创建一个在新选项卡中提供 PDF 文件的链接。理想情况下,PDF 将在新选项卡中打开(即不下载)。为清楚起见,我没有尝试将 HTML 转换为 PDF - 我已经创建并保存了 PDF。

作为参考,这就是我想要完成的。

This is sample text in my .ejs file. I want to open myPDF in a new tab.

我检查了这个这个SO 帖子,但这对我不起作用。让我失望的部分是通过链接提供 PDF 文件。

更新
我在这里添加更多细节。在此期间,我取得了一些进展。

当用户转到指定的 URL 时,我可以下载 PDF。但是,如何让 PDF 在新选项卡中打开,而不是自动下载?

这是我正在使用的代码:

router.get('/test', (req, res) => {
    //res.send('success');
    console.log(__dirname);
    var file = fs.createReadStream('./public/Literature/table1.pdf');
    var stat = fs.statSync('./public/Literature/table1.pdf');
    res.setHeader('Content-Length', stat.size);
    res.setHeader('Content-Type', 'application/pdf');
    res.setHeader('Content-Disposition', 'attachment; filename=table1.pdf');
    file.pipe(res);
});

谢谢。

标签: node.jsexpressejs

解决方案


我找到了我的问题的答案,在这里发布给其他人。

要下载 PDF,请从这个SO 帖子中提取以下作品。

    var file = fs.createReadStream('./public/Literature/table1.pdf');
    var stat = fs.statSync('./public/Literature/table1.pdf');
    res.setHeader('Content-Length', stat.size);
    res.setHeader('Content-Type', 'application/pdf');
    res.setHeader('Content-Disposition', 'attachment; filename=table1.pdf');
    file.pipe(res);

要在新选项卡中打开 PDF,第二个答案适用于同一个 SO 帖子。

    var data = fs.readFileSync('./public/Literature/table1.pdf');
    res.contentType('application/pdf');
    res.send(data);

由于不相关的路由问题,此代码之前对我不起作用。菜鸟的错误是痛苦的。


推荐阅读