2016-10-27 17 views
0

PDFkitを動的に作成しようとしましたが、電子メールの添付ファイルとして送信したいと考えています。このhttp://pdfkit.org/demo/browser.html例と、私は次のコードを書いたこのhttps://nodemailer.com/using-attachments/ドキュメント以下:nodejsアプリケーションでPDFKitを使用して添付ファイルとして動的に作成されたPDFを送信

var doc = new PDFDocument(); 
      var stream = doc.pipe(blobStream()); 
      doc.text("Howdy!!"); 

      doc.on('end'); 

      stream.on('finish', function() { 

       var htmlMailBody ='Hi' 

        var textMailBody = 'hi'; 
        var mailOptions = 
        { 
         from: 'ASD', // sender address 
         to: '[email protected]', // list of receivers 
         subject: 'Invitation ', // Subject line 
         text: textMailBody, // plaintext body alt for html 
         html: htmlMailBody, 
         attachments:[ 
         { 

          filename:"TEST1.pdf", 
          path:stream.toBlobURL('application/pdf') 


         }] 
        }; 

        // send mail with defined transport object 
        transporter.sendMail(mailOptions, function(error, info){ 
         if(error){ 
          return console.log(error); 
         } 
         console.log('Message sent: ' + info.response); 
         res.redirect('/'); 
        }); 



     }); 

をしかし、私は次のエラーを取得しています:

TypeError: listener must be a function 
at PDFDocument.addListener (events.js:197:11) 
at PDFDocument.Readable.on (_stream_readable.js:665:33) 
at exports.getSendReport (d:\projects\PDFChecker\server\controllers\pdf.js:159:6) 
at Layer.handle [as handle_request] (d:\projects\PDFChecker\node_modules\express\lib\router\layer.js:95:5) 

私はそれを解決する必要がありますどのように?

答えて

0

BlobStreamは使用しないでください。ここで提案されるように代わりにバッファに書く: how to convert pdfkit object into buffer using nodejs

let pdf = new pdfkit(); 

let buffers = []; 
pdf.on('data', buffers.push.bind(buffers)); 
pdf.on('end',() => { 

    let pdfData = Buffer.concat(buffers); 

    const mailOptions = { 
     from: '..', 
     to: "...", 
     attachments: [{ 
      filename: 'attachment.pdf', 
      content: pdfData 
     }] 
    }; 

    mailOptions.subject = 'PDF in mail'; 
    mailOptions.text = 'PDF attached; 
    return mailTransport.sendMail(mailOptions).then(() => { 
     console.log('email sent:'); 
    }).catch(error => { 
     console.error('There was an error while sending the email:', error); 
    }); 

}); 

pdf.text('Hello', 100, 100); 
pdf.end(); 

私はこのアプローチを使用し、バッファAttachmendでnodemailer使用し、正しいPDFファイルを送信することができました。

関連する問題