Node.js - 等待文件完全写入

Owe*_*rce 3 node.js wkhtmltopdf

我正在使用 child_process 运行 wkhtmltopdf 从 html 文档构建 PDF。我想等到 wkhtmltopdf 将文档处理成 PDF 后再继续。我认为当 wkh​​tmltopdf 发送其完成信号时从 stdout 读取以捕获是执行此操作的最佳方法,但以下代码在 res.send() 处报告 stdout 为空。当标准输出向我提供数据时,如何设置要触发的事件?

代码:

var buildPdf = function(error){
    var pdfLetter;

    var child = exec('wkhtmltopdf temp.html compensation.pdf', function(error, stdout, stderr) {
        if (error)
            res.send({
                err:error.message
                });
        else
            res.send({
                output : stdout.toString()
        });
                    // sendEmail();
    });
};
Run Code Online (Sandbox Code Playgroud)

Jor*_*ing 5

您遇到了 wkhtmltopdf 陷阱。它不会将状态信息写入 STDOUT,而是将其写入 STDERR。

$ node -e \
  "require('child_process').exec( \
   'wkhtmltopdf http://stackoverflow.com/ foo.pdf', \
   function(err, stdout, stderr) { process.stdout.write( stderr ); } );"
Loading pages (1/6)
content-type missing in HTTP POST, defaulting to application/octet-stream
Counting pages (2/6)
Resolving links (4/6)
Loading headers and footers (5/6)
Printing pages (6/6)
Done
Run Code Online (Sandbox Code Playgroud)