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

时间:2016-04-26 13:39:39

标签: meteor pdf-generation flow-router

我在我的meteor App上使用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,我不知道如何直接向用户显示/下载pdf而不将文件保存在服务器上。

2 个答案:

答案 0 :(得分:1)

使用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();
});

答案 1 :(得分:0)

以下是删除outputSync()的方法:

app.factory("YourInterceptor", ["$q", "$rootScope", "$location",
function($q, $rootScope, $location) {
    var success = function(response) {
        //do something
        return response;
    },
    error = function(response) {
        if(response.status === 401) {
                // do something
        }

        return $q.reject(response); //reject on error
    };

    return function(httpPromise) {
        return httpPromise.then(success, error);
    };
}