问题:我有一个需要填写的现有PDF表单(* .pdf)。如何使用Node JS动态填充它?
答案 0 :(得分:10)
在npm上查看以下模块:
node-pdffiller
是PDF工具包PDFtk的包装器:
PDFKit的网站上有很多很好的文档:
这些模块具有不同的功能和API。你应该找到适合你需要的东西。
还有一篇很好的文章:
答案 1 :(得分:1)
我也遇到过同样的问题,但是得到的最佳解决方案是 pdf-fill-form
只需尝试一下即可感受到魔力:
var pdfFillForm = require('pdf-fill-form');
var fs = require('fs');
pdfFillForm.write('test.pdf', { "myField": "myField fill value" }, { "save": "pdf", 'cores': 4, 'scale': 0.2, 'antialias': true } )
.then(function(result) {
fs.writeFile("test123.pdf", result, function(err) {
if(err) {
return console.log(err);
}
console.log("The file was saved!");
});
}, function(err) {
console.log(err);
});
答案 2 :(得分:0)
对于仍在寻找解决方案的任何人,请看一下pdf-lib(https://pdf-lib.js.org / https://www.npmjs.com/package/pdf-lib)。
关于如何使用pdf-lib Node.js软件包填写PDF表单文本字段有一个不错的话题:https://github.com/Hopding/pdf-lib/issues/48
答案 3 :(得分:0)
node-pdftk为我工作顺利。
let DOCUMENTDIRECTORY = //directory holding your empty pdfs;
async function producePDFs(documents, outputDirectory) {
promises = [];
for (let document of documents) {
var fields = document["fieldsWithValue"];
var fieldsWithValue = {};
for (var i = 0; i < fields.length; i++) {
fieldsWithValue[fields[i]["name"]] = fields[i]["value"];
}
console.log(fieldsWithValue);
promises.push(
new Promise(function (resolve, reject) {
pdftk
.input(DOCUMENTDIRECTORY + document["file"]["fileName"])
.fillForm(fieldsWithValue)
.flatten()
.output(outputDirectory + document["file"]["fileName"])
.then((buffer) => {
getFile(outputDirectory + document["file"]["fileName"], 1000).then(
//1 second
(val) => {
if (val) resolve(1);
}
);
})
.catch((err) => {
console.log(err);
// handle errors
});
})
);
}
return Promise.all(promises).then(function () {
return 1;
});
}
async function getFile(path, time) {
return new Promise((resolve, reject) => {
const timeout = setInterval(function () {
const file = path;
const fileExists = fs.existsSync(file);
console.log("Checking for: ", file);
console.log("Exists: ", fileExists);
if (fileExists) {
clearInterval(timeout);
resolve(1);
}
}, time);
});
}