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

Iterating through data and generate pages with PDFKit

本文关键字:PDFKit 遍历 数据 使用      更新时间:2023-09-26

我想使用 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');
      });
}