Node.js PDFKit:将动态生成的PDF附加到电子邮件(Mandrill-API)

5
我正在使用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; filename="mytestPDF.pdf"
PDF1370obj/Predictor15/Colors1/BitsPerComponent8/Columns100endobj60obj/Type/XObject/Subtype/Image/BitsPerComponent8/Width100/Height19/Filter/FlateDecode/DecodeParms70R/ColorSpace/Indexed/DeviceRGB25580R/Length1751streamxdSSNEhGIRTRkWbY/nHaOMJln7t+vv89ylF111PlYNB9Nm6e9DENsd9FxLFUbOjrgt+ErRgWtj9vPCTBH oohMHl9oZ7IdpC/hxusjTHFFMcxhwIxPlbNorOB+bH8exrrA1DUnzKzq/UXI xT456nxtB59fQNiIrBT2apETJZieZvltpeThrObiZ4ydtY0koKJ2Epb940A1 iXyehONQVXiZr8jRP/NJ3bmjHA0sygAou4Q=
虽然我已经在这个问题上折腾了数小时,但我的最佳猜测是我的PDF内容中存在换行符/新行错误。我获取PDF内容的方式是创建一个名为buffers的数组,然后:doc.on('data',buffers.push.bind(buffers));
我假设我需要添加/n或/r等...但我使用NodeJS和AngularJS大约一个月,我知道我几乎所有错误都是因为我过于复杂化了问题...所以我求助于你们,希望有一种简单的方法,将我用PDFKit创建的新PDFDocument的内容附加到使用NodeJS发送电子邮件中。

预先感谢您...请原谅我的啰嗦,但我大约在8个小时前开始写这篇文章(现在是我当地时间凌晨3:25)。

1个回答

10

我最近在使用node.js将电子邮件PDF附件发布到Mandrill时遇到了同样的问题,但成功地解决了。

这是我所做的:

    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);
        });
    });

希望这能帮到你。如果需要额外的帮助,请@我 =)


谢谢您,Mraxus先生,这正是我所需要的。我非常感谢您的帮助! - user2348688
1
非常欢迎。很高兴我的经历也能帮到你 =) - mraxus
这些 BufferpdfBuffer 变量是什么意思? - 2dvisio
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - mraxus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接