【发布时间】:2017-03-28 10:04:49
【问题描述】:
我正在使用 PDFKit 库生成 PDF,我想将生成的 PDF 插入到 MongoDB 集合中。在客户端,用户应该能够看到集合中的文件列表并选择其中一个文件进行下载。
到目前为止,我将集合中的 PDF 保存为 Uint8Array,然后我可以单击前端的文件进行下载。
但是,我的问题是文件似乎已损坏。它不会在 Adobe 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