【问题标题】:Can you insert a PDF generated by PDFKit into a MongoDB collection?您可以将 PDFKit 生成的 PDF 插入 MongoDB 集合吗?
【发布时间】:2017-03-28 10:04:49
【问题描述】:

我正在使用 PDFKit 库生成 PDF,我想将生成的 PDF 插入到 MongoDB 集合中。在客户端,用户应该能够看到集合中的文件列表并选择其中一个文件进行下载。

到目前为止,我将集合中的 PDF 保存为 Uint8Array,然后我可以单击前端的文件进行下载。

但是,我的问题是文件似乎已损坏。它不会在 Adob​​e Reader 或 Chrome 中打开。 我已经尝试将它保存到带有和不带有 PDFKits 压缩的集合中。

这可能吗?或者我对此有什么不好的方法。
对此的任何帮助都会非常好,并在此先感谢!

服务器端
这里的大部分代码都是基于this post on the PDFKit GitHub

  var doc = new PDFDocument();
  var stream = require('stream');
  var converter = new stream.PassThrough();
  doc.pipe(converter);

  var data = [];
  converter.on('data', function(chunk) {
    data.push(chunk);
  });

  converter.on('end',  Meteor.bindEnvironment( function () {
    var buffer = Buffer.concat(data);
    PdfFiles.insert({ data:buffer, userID:userId });
  }));

  // Adding content to the PDF

  doc.end();

客户端

'click .downloadPDF': function (event) {
    event.preventDefault();

    var file = UserFiles.findOne({userID:Meteor.userId()});

    var FileSaver = require('file-saver');
    var blob = new Blob(file.data, {type: "application/pdf"});
    FileSaver.saveAs(blob, "AwesomePDF");
}

【问题讨论】:

  • GridFS 是在 MongoDB 中保存二进制文件的常用方法;您没有使用 GridFS 有什么特别的原因吗?

标签: javascript node.js mongodb meteor pdfkit


【解决方案1】:

我只需更改代码就可以按预期工作:

var blob = new Blob(file.data, {type: "application/pdf"});

var blob = new Blob([file.data], {type: "application/pdf"});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-14
    • 2022-01-04
    相关资源
    最近更新 更多