生成PDF文件的方法:使用Node.js连接MySQL数据库
<p>我正在尝试使用存储在Mysql数据库中的数据使用Node js、Pdfkit和pdfkit-table生成PDF文件。我需要将数据库中的记录打印到PDF文档中的一个表格中。</p>
<p>下面的代码生成一个空的PDF文件。请帮我解决为什么它不生成带有数据的PDF文件的问题。</p>
<p>这是index.js文件。</p>
<pre class="brush:php;toolbar:false;">var express = require('express');
var router = express.Router();
var PDFDocument = require('pdfkit');
var orm = require('orm');
var PDFDoc = require("pdfkit-table");
router.use(orm.express("mysql://root:@localhost:/kirula_fashion", {
define: function (db, models, next) {
models.news = db.define("ledger", {
id : String,
date : String,
description : String,
debit : String,
credit : String,
});
next();
}
}));
router.get('/', function(req, res, next) {
var result = req.models.news.find({
}, function(error, news){
if(error) throw error;
res.render('index', { news:news, title: '使用NodeJS生成PDF'
});
});
});
router.get('/pdf', function(req, res, next) {
var id = req.query.id;
const doc = new PDFDocument();
const docTable = new PDFDoc();
var result = req.models.news.find({id: id}, function(error, newspost){
if(error) throw error;
else{
if(newspost.length>0){
for(var i=0; i<newspost.length;i++){
var date = newspost[0]['date'];
var description = newspost[0]['description'];
var debit = newspost[0]['debit'];
var credit = newspost[0]['credit'];
var table = {
title: "账簿记录",
subtitle: "2020年5月",
headers: [
{ "label":"日期", "property":"date", "width":100 },
{ "label":"描述", "property":"description", "width":100 },
{ "label":"借方", "property":"debit", "width":100 },
{ "label":"贷方", "property":"credit", "width":100 }
],
datas:
[
{ "date":date, "description":description, "debit":debit, "credit":credit},
{
"renderer": "function(value, i, irow){ return value + `(${(1+irow)})`; }"
}
],
};
docTable.table( table, {
width: 300,
});
}
}
}
var title = "2020年5月账簿";
var filename = encodeURIComponent(title) + '.pdf';
res.setHeader('Content-disposition', 'attachment; filename="' + filename + '"');
res.setHeader('Content-type', 'application/pdf');
doc.pipe(res);
doc.end();
});
});
module.exports = router;</pre></p>
我遇到了与数据选项相同的问题,但是对于行选项,pdfkit-table工作得很好,也许可以将[{..},{...}]映射为[[..],[...]],然后使用行选项