nodejs根据pdf模板填入中文数据并生成新的pdf文件

导入pdf-lib库和fontkit

javascript 复制代码
npm install pdf-lib fs
npm install @pdf-lib/fontkit

具体代码

javascript 复制代码
const { PDFDocument, StandardFonts } = require('pdf-lib');
const fs = require('fs');
const fontkit = require('@pdf-lib/fontkit')
let pdfDoc
let font
async function fillPdfForm(templatePath, outputPath, data) {
  const templateBytes = await fs.promises.readFile(templatePath);
  const fontBytes = await fs.promises.readFile('xxx.ttf');
  pdfDoc = await PDFDocument.load(templateBytes);
  pdfDoc.registerFontkit(fontkit);
  font = await pdfDoc.embedFont(fontBytes);
  const form = pdfDoc.getForm();

  for (const fieldKey in data) {
    const field = form.getTextField(fieldKey);
    if (field) {
      field.setText(data[fieldKey]);
      field.updateAppearances(font)
    }
  }

  const modifiedPdfBytes = await pdfDoc.save();

  await fs.promises.writeFile(outputPath, modifiedPdfBytes);
}

// 使用示例
const templatePath = 'template.pdf';
const outputPath = 'output.pdf';
const data = {
  'key': 'value支持中文参数',
};

fillPdfForm(templatePath, outputPath, data)
  .then(() => {
    console.log('PDF生成成功');
  })
  .catch((error) => {
    console.log('PDF生成失败:', error);
  });

代码详解

首先

const templateBytes = await fs.promises.readFile(templatePath);

const pdfDoc = await PDFDocument.load(templateBytes);

const form = pdfDoc.getForm();

这三行表示读文件,并且读取pdf表单,然后注册fontkit,将你要的字体嵌入pdf中,之后在pdf的表单中寻找字段,填入字段,并把字体样式更新为你嵌入pdf的字体

这里的Object.entries是将对象变成数组方便循环,也可以用for...in进行对象遍历

最后将数据存入新文件中

注意

这里的字体文件只支持ttf和otf不支持电脑C盘里的那些的ttc

其他

pdf模板可以使用福昕pdf进行制作,百度一下都能查到

相关推荐
晨非辰1 小时前
#C语言——学习攻略:深挖指针路线(三)--数组与指针的结合、冒泡排序
c语言·开发语言·数据结构·学习·算法·排序算法·visual studio
一只小风华~4 小时前
JavaScript 函数
开发语言·前端·javascript·ecmascript·web
苕皮蓝牙土豆4 小时前
Qt 分裂布局:QSplitter 使用指南
开发语言·qt
仰望星空的凡人5 小时前
【JS逆向基础】数据库之MongoDB
javascript·数据库·python·mongodb
樱花开了几轉6 小时前
React中为甚么强调props的不可变性
前端·javascript·react.js
Brookty7 小时前
Java线程安全与中断机制详解
java·开发语言·后端·学习·java-ee
Mr...Gan7 小时前
VUE3(四)、组件通信
前端·javascript·vue.js
從南走到北8 小时前
JAVA东郊到家按摩服务同款同城家政服务按摩私教茶艺师服务系统小程序+公众号+APP+H5
android·java·开发语言·微信小程序·小程序
遇见尚硅谷9 小时前
C语言:20250728学习(指针)
c语言·开发语言·数据结构·c++·笔记·学习·算法
☆璇9 小时前
【C++】C/C++内存管理
c语言·开发语言·c++