使用 PDFKit 遍历数据并生成页面

Iterating through data and generate pages with PDFKit

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

来自模块的代码:

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?

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

我建议将 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');

      });
}