问题描述
im无法使用node.js和pdfkit创建发票生成器。问题是,当我打开服务器时,仅一次且仅一次正确生成了发票,而其他时候异步功能仍在正常运行。我花了很多时间尝试解决此问题,但是我看不到代码中有任何问题。我想你们会帮助我的。在这里检查我的代码:
orderRoutes.route('/admin/print/').get(function (req,res) {
var fromDate = req.query.fromDate;
var toDate = req.query.toDate;
Order.find(function (err,orders) {
let doc = new PDFDocument({ margin: 15 });
createPages(orders,doc,res,fromDate,toDate).then(() => {
doc.pipe(fs.createWriteStream('invoices/invoice.pdf',{ encoding: 'utf8' }));
doc.pipe(res);
console.log('response sent');
doc.end();
doc.save();
});
});
});
function generateHeader(doc) {
console.log('generateHeader');
return new Promise(function (resolve,reject) {
doc.fillColor('#444444')
.fontSize(20)
.text('Užsakymas',65,{ align: 'center' })
.fontSize(20)
.text(new Date().toLocaleDateString(),200,{ align: 'right' })
.moveDown();
resolve('don');
}).then();
}
async function generateTableRow(doc,y,c1,c2,c3,c4,c5) {
console.log('generateTableRow');
await new Promise(function (resolve,reject) {
doc.fontSize(10)
.font('fonts/OpenSans-Light.ttf')
.text(c1,50,y)
.text(c2,y)
.text(c3,300,y)
.text(c4,400,y)
.text(c5,500,y);
resolve('don');
}).then();
}
async function generateTable(doc,invoice,items) {
console.log('generateTable');
await Promise.all([generateAllRows(doc,items),generateCustomerInformation(doc,invoice)])
.then()
.catch();
}
async function createPages(orders,toDate) {
console.log('createPages');
for (var i = 0; i < orders.length; i++) {
var orderCreated = new Date(orders[i].created_at).getTime();
var fromDateTime = new Date(fromDate).getTime();
var toDateTime = new Date(toDate).getTime();
if (orderCreated > fromDateTime && orderCreated < toDateTime) {
await createPage(orders[i],doc)
.then(() => console.log('pageCreated'))
.catch();
}
}
}
async function createPage(order,doc) {
console.log('createPage');
await new Promise(function (resolve,reject) {
var invoice = {
user: {
id: order.UserId,},items: order.CartItems,subtotal: 8000,paid: 0,};
let invoiceTableTop = 200;
const header = generateHeader(doc);
const tableRow = generateTableRow(
doc,invoiceTableTop,'Pavadinimas','Aukštis(cm)','Kiekis,vnt.','Kaina(eur),vnt','Kaina(eur)',);
const generateAll = generateTable(doc,order.CartItems);
Promise.all([header,tableRow,generateAll])
.then(() => {
doc.addPage({ margin: 50 });
resolve('done');
})
.catch();
});
}
function assureUser(id) {
console.log('assureUser');
return new Promise(function (resolve,reject) {
const user = User.findOne({ _id: id },user => user);
resolve(user);
});
}
function assureFlower(id) {
console.log('assireFlower');
return new Promise(function (resolve,reject) {
const flower = Flower.findOne({ _id: id },flowers => flowers);
resolve(flower);
});
}
async function generateCustomerInformation(doc,invoice) {
console.log('generateCustomerInformation');
const user = await assureUser(invoice.user.id);
console.log(user.userCode);
doc.fontSize(10)
.font('fonts/OpenSans-Light.ttf')
.text('Vartotojas:' + user.name,100,{ align: 'left' })
.text('Vartotojo kodas:' + user.userCode,110,{ align: 'left' })
.text('Kliento informacija:' + user.companyInformation,{ align: 'right' })
.text('Tel. Nr.:' + user.phoneNumber,{ align: 'right' })
.text('Adresas:' + user.adress,120,{ align: 'left' })
.moveDown();
}
async function generateRow(doc,item,i) {
console.log('generateRow');
const flower = await assureFlower(item.item_id);
return new Promise(function (resolve,reject) {
let invoiceTableTop = 200;
invoiceTableTop = invoiceTableTop + (i + 1) * 15;
generateTableRow(doc,flower.Title,flower.Height,item.Quantity,flower.Price,item.Price);
resolve('done');
});
}
async function generateAllRows(doc,items) {
console.log('generateAllROws');
await new Promise(function (resolve,reject) {
var total = 0;
for (var i = 0; i < items.length; i++) {
generateRow(doc,items[i],i);
total += items[i].Price;
if (i === items.length - 1) {
var invoiceTableTop = 200;
invoiceTableTop = invoiceTableTop + (i + 2) * 15;
generateTableRow(doc,'','viso:',total).then(() => resolve('done'));
}
}
});
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)