5

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

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

doc.pipe( res );

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

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

%PDF-1.3 % 7 0 obj << /预测器 15

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

--_av-Ti-H6i8tBBHL4BgoXnyC2Q 内容类型:application/pdf 内容传输编码:base64 内容处置:附件;文件名="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 分)。:)

4

1 回答 1

10

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

于 2014-09-24T12:58:10.270 回答