2016-02-28 49 views
0

我想使用for循环在pdfkit中生成页面。在我的应用程序中,我创建了一个加载请求的新模块(所有这些工作都很好,我可以创建一个没有循环的pdf)。使用循环pdfkit创建一个PDF,但是这个被破坏了。使用PDFKit遍历数据并生成页面

从模块的代码:

module.exports = function() { 

var Project = require('./models/projects'); 
var PDFDocument = require('pdfkit'); 
var doc = new PDFDocument; 

doc.fontSize(25); 
doc.text('Portfolio'); 

Project 
    .find() 
    .exec(function (err, projects) { 
     if (err) { 
      console.log(err); 
     } else { 
     projects.forEach(function (project) { 

      var project_customer = project.customer; 

      doc.addPage(); 
      doc.text('project_customer'); 

     }); 
     } 
    }); 

doc.addPage(); 
doc.text('project_customer'); 

doc.save(); 

    doc.write('./output.pdf'); 

} 

是否有解决方案,我怎样才能得到一个PDF格式,其不破?

回答

0

在您的代码Project.find().exec(...)异步运行。这意味着您要在完成Project.find().exec(...)的呼叫之前创建PDF文档并保存。

我建议把这个PDF的代码到包括在exec()像这样的回调:

module.exports = function() { 

    var Project = require('./models/projects'); 
    var PDFDocument = require('pdfkit'); 

    Project 
     .find() 
     .exec(function (err, projects) { 
     if (err) return console.log(err); 

     var doc = new PDFDocument; 
     doc.fontSize(25); 
     doc.text('Portfolio'); 

     projects.forEach(function (project) { 

      var project_customer = project.customer; 

      doc.addPage(); 
      doc.text('project_customer'); 
     }); 

     doc.addPage(); 
     doc.text('project_customer'); 

     doc.save(); 

     doc.write('./output.pdf'); 

     }); 
} 
+0

哦,我的上帝,你是对的。谢谢,我忘记了代码是异步运行的。 现在它工作正常。 – pkberlin