在我的
在
api
路由器中,有一个名为generatePDF
的函数,它旨在使用 PDFKit 模块在内存中生成 PDF 文件,并将其发送给客户端以供下载,而不仅仅是显示。在
api.js
文件中:var express = require('express');
var router = express.Router();
const PDFDocument = require('pdfkit');
router.get('/generatePDF', async function(req, res, next) {
var myDoc = new PDFDocument({bufferPages: true});
myDoc.pipe(res);
myDoc.font('Times-Roman')
.fontSize(12)
.text(`this is a test text`);
myDoc.end();
res.writeHead(200, {
'Content-Type': 'application/pdf',
'Content-disposition': 'attachment;filename=test.pdf',
'Content-Length': 1111
});
res.send( myDoc.toString('base64'));
});
module.exports = router;
这个不起作用。错误消息是(node:11444) UnhandledPromiseRejectionWarning: Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
。
我该如何修复这个问题并让它正常工作?
另一个相关的问题是如何将PDF生成的业务逻辑与路由分离并将它们链接起来?
body
是什么引用?是mydoc
吗? - alextcend
事件绑定到 myDoc 感到困惑。这在 PDFKit 文档中没有提到,但文档确实提到使用 doc.pipe(res) 将 pdf doc 写入 http 响应中。但在您的答案中没有使用它。 - alextc如何将 PDF 生成的业务逻辑与路由分离并将它们链接起来?
我想从 req.query 中获取一个参数并将其传递给 PDF 生成逻辑。 这值得单独提出一个问题吗? - alextc