Meteor:使用 pdfKit 和 FlowRouter 动态生成 pdf

Meteor: Dynamic pdf generation with pdfKit and FlowRouter

我在我的 meteor 应用程序上使用 pdfKit 和 FlowRouter。我想生成一个 pdf 文件而不将其保存在服务器上。在文档中有一个例子:

Router.route('/getPDF', function() {
 var doc = new PDFDocument({size: 'A4', margin: 50});
 doc.fontSize(12);
 doc.text('PDFKit is simple', 10, 30, {align: 'center', width: 200});
 this.response.writeHead(200, {
 'Content-type': 'application/pdf',
 'Content-Disposition': "attachment; filename=test.pdf"
 });
 this.response.end( doc.outputSync() );
 }, {where: 'server'});

但这是针对 Iron Router 的使用。因为我正在使用 FlowRouter,所以我不知道如何 display/download 将 pdf 直接发送给用户而不将文件保存在服务器上。

使用来自 meteorhacks picker 的服务器端路由器。然后是

的内容
Picker.route('/generate/getPdf', function(params, req, res, next) {
    var doc = new PDFDocument({size: 'A4', margin: 50});
    doc.fontSize(12);
    doc.text('PDFKit is simple', 10, 30, {align: 'center', width: 200});
    res.writeHead(200, {
        'Content-Type': 'application/pdf',
        'Content-Disposition': 'attachment; filename=test.pdf'
    });
    res.end(doc.outputSync());
});

更新:现在 outputSync 已弃用,请使用:

Picker.route('/generate/getPdf', function(params, req, res, next) {
    var doc = new PDFDocument({size: 'A4', margin: 50});
    doc.fontSize(12);
    doc.text('PDFKit is simple', 10, 30, {align: 'center', width: 200});
    res.writeHead(200, {
        'Content-Type': 'application/pdf',
        'Content-Disposition': 'attachment; filename=test.pdf'
    });
    doc.pipe(res);
    doc.end();
});

现在 outputSync() 已被删除,具体操作方法如下:

Picker.route('/generate/getPdf', function(params, req, res, next) {
    var doc = new PDFDocument({size: 'A4', margin: 50});
    doc.fontSize(12);
    doc.text('PDFKit is simple', 10, 30, {align: 'center', width: 200});
    res.writeHead(200, {
        'Content-Type': 'application/pdf',
        'Content-Disposition': 'attachment; filename=test.pdf'
    });
  doc.pipe(res);
  doc.end(res);
});