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

云函数中将Docxtemplater生成的Docx转PDF并通过Nodemailer发送

解决方案:将Docx Buffer转换为PDF用于邮件附件

针对你用docxtemplater生成docx buffer后转PDF的需求,以下几个工具和方案可解决问题,避免出现空白PDF的情况:

1. 使用libreoffice-convert直接转换(推荐)

这个工具基于LibreOffice,能直接将docx buffer转换为PDF,兼容性好,支持复杂格式的docx文档。

步骤:

  • 安装依赖:
npm install libreoffice-convert
  • 在现有代码基础上添加转换逻辑:
const libre = require('libreoffice-convert');
const util = require('util');
const convertAsync = util.promisify(libre.convert);

// 接你已有的代码,拿到contentBuffer之后:
try {
  const pdfBuffer = await convertAsync(contentBuffer, '.pdf', undefined);
  // pdfBuffer即为可用于邮件附件的PDF数据
} catch (err) {
  console.error('转换PDF失败:', err);
  errorHandler(err);
}

注意事项:

云函数环境需要预装LibreOffice。比如Firebase云函数可通过自定义层或使用包含LibreOffice的基础镜像部署,否则会出现找不到LibreOffice的错误。

2. 先提取Docx内容再用PDFmake渲染(解决之前空白问题)

你之前用PDFmake生成空白PDF,大概率是因为直接传入了docx buffer而非可识别的内容。可以先用mammoth提取docx的HTML或文本,再用PDFmake渲染:

  • 安装依赖:
npm install mammoth pdfmake
  • 代码示例:
const mammoth = require('mammoth');
const pdfMake = require('pdfmake');

// 提取docx内容为HTML
const result = await mammoth.convertToHtml({ buffer: contentBuffer });
const htmlContent = result.value;

// 配置PDFmake字体(按需调整)
const fonts = {
  Roboto: {
    normal: 'Roboto-Regular.ttf',
    bold: 'Roboto-Bold.ttf',
    italics: 'Roboto-Italic.ttf',
    bolditalics: 'Roboto-BoldItalic.ttf'
  }
};
const printer = new pdfMake(fonts);

// 生成PDF定义(复杂格式需额外调整)
const docDefinition = {
  content: [
    { html: htmlContent }
  ]
};

const pdfBuffer = await printer.createPdfKitDocument(docDefinition).toBuffer();

这个方案适合不需要保留复杂格式的场景,若你的docx模板格式复杂,仍推荐第一种方案。

3. 使用docx-pdf(简化版)

这个包封装了LibreOffice的转换逻辑,用法更简洁,但同样需要环境支持LibreOffice:

  • 安装依赖:
npm install docx-pdf
  • 代码示例:
const docxConverter = require('docx-pdf');
const util = require('util');
const convertDocxToPdf = util.promisify(docxConverter);

const pdfBuffer = await convertDocxToPdf(contentBuffer);

内容的提问来源于stack exchange,提问作者Deji James

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 04:51:12