我需要在保存pdf文件后做一些家务:
docx2pdf(doc, function (pdf) {
console.log("saving file");
var pdfFile = fs.createWriteStream("./test2.pdf");
pdf.on('finish',function(){
console.log("Finished");
process.exit();
}).pipe(pdfFile);
pdf.end();
console.log("After save");
}, true, true);
但是第二个嵌套函数中的代码永远不会启动。PDF是来自pdfkit库的对象。我该怎么修理它?
UPD:此方法也不起作用:
docx2pdf(doc, function (pdf) {
console.log("saving file");
var pdfFile = fs.createWriteStream("./test2.pdf");
pdfFile.on('finish',function(){
console.log("Finished");
process.exit();
});
pdf.pipe(pdfFile);
//pdf.end();
console.log("After save");
}, true, true);
您需要在管道对象上捕获事件finish
,而不是在pdf对象上:
console.log("saving file");
pdf
.pipe( fs.createWriteStream("./test2.pdf") )
.on( 'finish', function(){
console.log("Finished");
});
pdf.end();
console.log("After save");
如果pdf
是一个合适的NodeJS流,您可以简单地将其管道到写流中并完成。如果你想在文件保存后退出程序,你可以按"close"键。注意:没有"保存后"状态(因为你结束了进程)。在文件保存之前,代码中的console.log("After save")
行被称为 !
docx2pdf(doc, function (pdf) {
console.log("saving file");
var pdfFile = fs.createWriteStream("./test2.pdf");
pdf.pipe(pdfFile);
pdfFile.on('close',function(){
console.log("Finished");
process.exit();
});
}, true, true);
pdf
表示从读取,而不是将写入。这意味着您应该将其视为可读流,因此侦听pdfFile
上的finish
并删除pdf.end()
。