node.js - express.js - 创建一个新的 pdf 并强制下载,而不将其保存在服务器上

标签 node.js express pdf-generation

我将 express.js 与 pdfkit 一起使用来生成 pdf 并强制下载给用户。为此,我使用了属于 express.js 的 res.download 函数。我也可以将 pdf piperes,但下载不会开始。

好的,那么我的问题是什么:是否有可能以某种方式在服务器上创建 pdf 并将其存储在“内存中”或类似的地方?目前,我必须定义创建 pdf 的特定位置,然后从该位置读取并将其提供给用户。基本上,我想“跳过”保存到磁盘和从磁盘读取,但仍然强制用户下载。

也许我不理解这里的一些概念,所以非常感谢任何形式的解释!

代码如下:

router.get('/pdf/:id', function(req, res) {
    Order._getById(req.params.id).
    then(function(order) {
        if (order !== null) {
            var doc = new PDFDocument();
            var result = order.toJSON();

            var products = result.products;
            var user = result.user;
            var comments = result.comments;

            doc.registerFont('arial', path.join(__dirname, '../fonts', 'arial' , 'arial.ttf'));         

            for (var i in products) {
                var product = products[i];
                doc.font('arial').text(product.name);
                doc.image(path.join(__dirname,'../uploads','thumb', product.picture), {scale: 1.0});
                doc.font('arial').text(product.price + ' €');
            }

            var r = doc.pipe(fs.createWriteStream(path.join(__dirname, '../uploads', 'out.pdf')));
            doc.end();

            r.on('finish', function(){
                //the response is a "forced" download of a file I had to save on the disk
                res.download(path.join(__dirname, '../uploads', 'out.pdf'));
            });

        } else {
            res.json(false);
        }
    });
});

同样,如果我不保存文件而只执行以下操作:doc.pipe(res); pdf 将在新选项卡中打开,而不是强制下载。

最佳答案

我认为这就是答案...我可以将结果pipe 给客户端,但需要设置 header ,即:

        res.writeHead(200, {
            'Content-Type': 'application/pdf',
            'Access-Control-Allow-Origin': '*',
            'Content-Disposition': 'attachment; filename=out.pdf'
        });

关于node.js - express.js - 创建一个新的 pdf 并强制下载,而不将其保存在服务器上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30059002/

相关文章:

javascript - 无法让 populate() 填充 Mongoose 中的数组

xml - xsl 应用模板的问题

jquery - 前端 jQuery 代码无法使用 Node.js 正确执行

node.js - 用于 Web 应用程序 JWT 的 Nodejs Express,带有数据库或 session 来对用户进行身份验证

pdf-generation - 如何防止 cairo 栅格化我的图案填充?

java - 使用 itext jar 创建的 pdf 在打开时给出错误(不支持或损坏),我使用 itext 版本 5.3.0

node.js - 在 Node.js 中获取父目录名称

node.js - MongoDB 和 Node.js 中的动态查询

node.js - 如何将 node-js 应用程序打包成单个 rpm?

ajax - socket.io变量检查