如何使用 pdfmake 生成 pdf 并使用 Angular 中的 firebase 触发器电子邮件扩展将其作为附件通过电子邮件发送

问题描述

我正在尝试使用 pdfmake 创建一个 pdf 文件,并使用 firebase trgger 电子邮件扩展将其发送给我的客户。我为此使用了 Angular(typescript)。但它不起作用。

我正在使用 Angular 11 和 pdfmake。我现在已经创建了一个代码,用于从客户端创建 pdf 并尝试获取流并发送它。我也尝试在服务器端创建,但是当我将 fs 导入为:

import * as fs from 'fs';

当我尝试执行此操作时,出现错误 fs module not found module 错误

fs.createWriteStream(file);

此外,当我尝试从 'pdfmake' 导入 PdfPrinter 时,我收到错误,如未找到节点模块错误模块。 任何人都可以请建议一种方法来做到这一点。我已经支持一个星期了。

我的客户端功能

import pdfMake from "pdfmake/build/pdfmake";  
import pdfFonts from "pdfmake/build/vfs_fonts";  
pdfMake.vfs = pdfFonts.pdfMake.vfs; 

generatePdf()(){
    let docDeFinition = {  
      header: 'Test Mail',content: 'Trying to send mail with attachments'  
    }
    var doc=pdfMake.createPdf(docDeFinition);
    var buffers = [];
    const file="save.pdf";
    let p = new Promise((resolve,reject) => {
      doc.on("end",function() {
        resolve(buffers);
      });
      doc.on("error",function () {
        reject();
      });
    });
    
    doc.pipe(doc.getStream());
    doc.on('data',buffers.push.bind(buffers));
    doc=pdfMake.createPdf(docDeFinition);
    var data=docDeFinition;
    doc.end();
    return p.then(function(buffers) {
      return this.sendMail(buffers);
   });
    

  }
  sendMail(buffers){
    const pdfData = Buffer.concat(buffers);
    this.db1.collection('mail').add({
      to:"mailid@gmail.com",message:{
        subject:'Testing',text:"Testing the email triggering",html:"email triggering",attachments: [
          {
            filename:"view.pdf",content:pdfData,},]
      },}).then(()=>console.log("Message Sent")); 
  }

现在的错误是:doc.pipe() 和 doc.on() 不是函数

我的服务器端代码

import * as fs from 'fs';
import * as PdfPrinter from 'pdfmake';

onEmail(){
    let docDeFinition = {  
      header: 'Test Mail',content: 'Trying to send mail with attachments'  
    }
    var doc=pdfMake.createPdfKitdocument(docDeFinition);
    var buffers = [];
    const file="save.pdf";
    let p = new Promise((resolve,function () {
        reject();
      });
    });
    
    doc.pipe(fs.createWriteStream(file));
    doc.on('data',buffers.push.bind(buffers));
    doc=pdfMake.createPdfKitdocument(docDeFinition);
    var data=docDeFinition;
    doc.end();
    return p.then(function(buffers) {
      return this.sendMail(buffers);
   });
    

  }
  sendMail(buffers){
    const pdfData = Buffer.concat(buffers);
    this.db1.collection('mail').add({
      to:"mymail@gmail.com",}).then(()=>console.log("Message Sent")); 
  }

即使将 pdfmake 安装为 npm i --save pdfmake,现在 fs 和 pdfmake 的节点模块错误

任何人都可以建议任何方法,即使它与任何其他 pdf 生成包的代码完全不同。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)