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

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

doc.pipe(res);

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

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

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

I have managed to get my PDF attachment to have a valid size of 445KB but this is the content of the email:

--_av-Ti-H6i8tBBHL4BgoXnyC2Q Content-Type: application/pdf Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="mytestPDF.pdf"

PDF1370obj/Predictor15/Colors1/BitsPerComponent8/Columns100e ndobj60obj/Type/XObject/Subtype/Image/BitsPerComponent8/Widt h100/Height19/Filter/FlateDecode/DecodeParms70R/ColorSpace/I ndexed/DeviceRGB25580R/Length1751streamxdSSNEhGIRTRkWbY/nHaO MJln7t+vv89ylF111PlYNB9Nm6e9DENsd9FxLFUbOjrgt+ErRgWtj9vPCTBH oohMHl9oZ7IdpC/hxusjTHFFMcxhwIxPlbNorOB+bH8exrrA1DUnzKzq/UXI xT456nxtB59fQNiIrBT2apETJZieZvltpeThrObiZ4ydtY0koKJ2Epb940A1 iXyehONQVXiZr8jRP/NJ3bmjHA0sygAou4Q=

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

我假设我需要添加/n 或/r 等...但我已经使用 NodeJS 和 AngularJS 一个月左右了,我知道我做错的几乎所有事情都是因为我'我把事情搞得太复杂了……所以我求助于你们,希望有一种简单的方法可以将我使用 PDFKit 创建的新 PDFDocument 的内容附加到使用 NodeJS 的电子邮件中。

提前谢谢你...请原谅我的胡言乱语,但我大约 8 小时前开始这个(现在是我的时间凌晨 3:25)。 :)

请您参考如下方法:

我最近在通过 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); 
        }); 
    }); 

希望对您有所帮助。如果您需要其他帮助,请 Ping =)


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!