nodejs pdfkit将动态生成的PDF附加到电子邮件(Mandrill-API)

时间:2014-09-17 10:12:22

标签: javascript node.js email node-pdfkit

我正在使用PDFKit和NodeJS动态生成PDF文档,我想将所述文档附加到电子邮件中。此刻我通过NPM使用Mandril-API。

我可以毫无问题地生成PDF并通过以下方式在浏览器中显示:

doc.pipe(res);

我可以毫无问题地发送电子邮件,但我在获取正确的PDF内容方面失败了。我相当肯定我99%的方式 - 但我错过了一些东西。我使用Google / StackOverflow等进行了大量的阅读和测试,但我被卡住了。

我得到的内容是,当我进行base64解码时,我得到:

  

%PDF-1.3%7 0 obj<< / Predictor 15

     

我设法让我的PDF附件的有效大小为445KB   但这是电子邮件的内容:

     

--_ av-Ti-H6i8tBBHL4BgoXnyC2Q Content-Type:application / pdf Content-Transfer-Encoding:base64 Content-Disposition:attachment;   文件名=" mytestPDF.pdf"

     

PDF1370obj / Predictor15 / COLORS1 / BitsPerComponent8 / Columns100e   ndobj60obj /类型/ x对象/亚型/图像/ BitsPerComponent8 / WIDT   H100 / Height19 /过滤/ FlateDecode / DecodeParms70R / ColorSpace中/ I   ndexed / DeviceRGB25580R / Length1751streamxdSSNEhGIRTRkWbY / nHaO   MJln7t + vv89ylF111PlYNB9Nm6e9DENsd9FxLFUbOjrgt + ErRgWtj9vPCTBH   oohMHl9oZ7IdpC / hxusjTHFFMcxhwIxPlbNorOB + bH8exrrA1DUnzKzq / UXI   xT456nxtB59fQNiIrBT2apETJZieZvltpeThrObiZ4ydtY0koKJ2Epb940A1   iXyehONQVXiZr8jRP / NJ3bmjHA0sygAou4Q =

虽然我已经搞砸了好几个小时了,但我最好的预感是我的PDF内容中有换行/换行错误。我获取PDF内容的方法是创建一个名为buffers的数组,然后:doc.on(' data',buffers.push.bind(buffers));

我想我需要添加/ n或/ r等...但我已经和NodeJS和AngularJS一起工作了一个月左右,而且我几乎知道我做错了是因为我过度复杂化了这个问题......所以我向大家求助,并希望有一种简单的方法可以将我用PDFKit创建的新PDF文档中的内容附加到使用NodeJS的电子邮件中。

提前谢谢你......请原谅我的漫无边际,但是我大约8小时前开始这个(现在是我现在凌晨3:25)。 :)

1 个答案:

答案 0 :(得分:9)

我最近在通过node.js向mandrill发送电子邮件pdf附件时遇到了同样的问题,但设法解决了这个问题。

这是我做的:

    generatePdf(inputData, function (err, doc) {
        if (err) return callback(err);

        var bufferChunks = [];

        doc.on('readable', function() {
            // Store buffer chunk to array
            bufferChunks.push(doc.read());
        });
        doc.on('end', function() {

            var pdfBuffer = Buffer.concat(bufferChunks),
                pdfBase64String = pdfBuffer.toString('base64');

            // This string is perfectly ok to use as an attachment to the mandrillAPI
            sendMandrillEmailWithAttachment(pdfBase64String);
        });
    });

我希望这会有所帮助。 Ping如果您需要其他帮助=)