导入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进行制作,百度一下都能查到