2016-10-27 2 views
0

PDFkit을 사용하여 동적으로 pdf를 만들고 이메일 첨부 파일로 보내려고합니다.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) 
을 를 해결해야 이 http://pdfkit.org/demo/browser.html 예를 나는 다음과 같은 코드를 작성이 https://nodemailer.com/using-attachments/ 문서에 따라?

답변

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 파일을 보낼 수 있었다.

관련 문제