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