node.js html-pdf 转换问题,文件回来损坏

Posted

技术标签:

【中文标题】node.js html-pdf 转换问题,文件回来损坏【英文标题】:node.js html-pdf conversion issue, file is coming back corrupt 【发布时间】:2017-07-18 09:01:12 【问题描述】:

我正在尝试创建一个应用程序,该应用程序将采用使用 jquery get 请求填充的 html 文件。我正在发出 http get 请求以获取 html,将字符串传递给 pdf.create 函数并使用生成的缓冲区通过电子邮件发送 pdf 文件。这似乎处理文件并将其作为电子邮件附件发送出去,但是,当我尝试打开文件时,我收到一条错误消息,指出文件已损坏。

code that convert html document to pdf:
                var options = 
                  host: 'localhost',
                  path: '/salesorder/' + orderid,
                  port: '3000'
                ;

                http.request(options, function(response)
                  let buffer = '';
                  response.on('data', function (chunk) 
                      buffer += chunk;
                  );

                  response.on('end', function () 
                    pdf.create(buffer, 
                        directory: "tmp"
                    ).toBuffer(function(err, newbuffer)
                        if (err)
                            reject(err);
                        

                        if (Buffer.isBuffer(newbuffer))
                            resolve(newbuffer);
                         else 
                            reject(new Error('The pdf file could not be generated at this time.  Please try again later.'));
                        
                    );
                  );
                )
                .end();


code that sends the email:
    var transporter = nodemailer.createTransport(
        service: 'gmail',
        host: this.hostname,
        auth: 
            user: this.smtpusername,
            pass: this.smtppassword
        
    );

    var mailOptions = 
        from: fromaddress, // sender address
        to: toaddresslist, // list of receivers
        subject: subject, // Subject line
        text: text
    ;

    if (attachments)
        mailOptions.attachments = [
               // binary buffer as an attachment
                filename: 'invoice.pdf',
                content: new Buffer(attachments.toString(), 'base64'),
                contentType: 'application/pdf'
            
        ];
    

我正在使用 html-pdf node.js 包来执行转换。我在这里想念什么?我正在获取从 http.request 方法获得的 html,如果我使用 console.log 将其打印出来,我可以看到生成的代码。现在我注意到我没有看到填充的文本字段和标签,因此 jquery 似乎没有在处理。

【问题讨论】:

【参考方案1】:

我没有使用 nodemailer 的经验,但在我看来,您的附件中缺少encoding: 'base64'。 See the docs here.

【讨论】:

解决方案最终是结合编码和使用 attachments.toString() 而不仅仅是附件。

以上是关于node.js html-pdf 转换问题,文件回来损坏的主要内容,如果未能解决你的问题,请参考以下文章

从前端将数据发送回 node.js 服务器

将数据从 Node.js 发送回客户端

将 c++ 双缓冲区传递给 Node Js(直接)[Node JS : V8 c++ : Nan]

如何使用 node.js 将 .pcm 文件转换为 wav 文件?

在 Node.js 中处理回滚的 MySQL 事务

将 html-pdf 与动态数据一起使用