You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NodeJS将Base64转PDF生成损坏文件,求排查解决方法

问题:Base64转PDF后文件损坏无法打开

尝试将Base64字符串解码为PDF,但生成的文件损坏,无法用Adobe Reader打开。目标是成功转换后用nodemailer将其作为附件发送。

客户端代码

let pdf;

const createPDF = () => {
  const report = new JsPDF('portrait','pt','a4');
  report.html(document.querySelector(['.input_container'],[imageURL])).then(() => {
      pdf = report.output('datauristring');
  });
}

const data =  {
    pdf,
}

服务端代码

let data = req.body;

const base64String = data.pdf;

const pdfBuffer = Buffer.from(base64String, 'base64');

fs.writeFile('output.pdf', pdfBuffer,{encoding:"binary"}, err => {
  if(err){
      console.log(err)
  }else{
      console.log("PDF CREATED")
  }
})

错误原因及解决方案

1. 客户端:data URI前缀未去除

report.output('datauristring')返回的是完整的data URI格式字符串(data:application/pdf;base64,xxxxxx),其中前缀data:application/pdf;base64,不属于Base64编码内容,直接传给后端解码会导致文件损坏。

修改客户端代码,截取Base64部分:

let pdf;

const createPDF = () => {
  const report = new JsPDF('portrait','pt','a4');
  report.html(document.querySelector('.input_container'), { imageURL }).then(() => {
      // 去掉data URI前缀,仅保留Base64编码内容
      pdf = report.output('datauristring').split(',')[1];
  });
}

const data = {
    pdf,
}

2. 服务端:错误指定编码参数

fs.writeFile写入Buffer时,无需指定{encoding:"binary"}——Buffer本身是二进制数据,指定该参数会强制按二进制编码解析,反而破坏原有字节结构。

修改服务端代码:

let data = req.body;
const base64String = data.pdf;

const pdfBuffer = Buffer.from(base64String, 'base64');

fs.writeFile('output.pdf', pdfBuffer, err => {
  if(err){
      console.log(err)
  }else{
      console.log("PDF CREATED")
  }
})

Nodemailer发送附件示例

修复后可直接用生成的Buffer作为附件内容:

// 假设已配置好nodemailer transporter
const mailOptions = {
  from: 'sender@example.com',
  to: 'recipient@example.com',
  subject: 'PDF附件测试',
  text: '请查看附件PDF',
  attachments: [
    {
      filename: 'report.pdf',
      content: pdfBuffer,
      contentType: 'application/pdf'
    }
  ]
};

transporter.sendMail(mailOptions, (error, info) => {
  if (error) {
    return console.log(error);
  }
  console.log('邮件发送成功: ' + info.response);
});

内容的提问来源于stack exchange,提问作者stevan kostic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 18:01:18