Node.js和PdfKit问题

问题描述

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 (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...