导入pdf-lib库和fontkit
npm install pdf-lib fs
npm install @pdf-lib/fontkit
具体代码
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进行制作,百度一下都能查到