使用NodeJS在现有PDF表单中填充数据

M.T*_*Tae 4 pdf node.js

问题:我有一个需要填写的现有PDF表单(*.pdf).如何使用Node JS动态填充它?

Sof*_*ued 15

我知道这是一个迟到的回复,但我找到了一个很好的库,名为 PDF-LIB

PDF库

它的功能非常丰富;

这是使用它的代码示例

const { PDFDocument } = require('pdf-lib')
const fs = require('fs')
const util = require('util')

const data = {
  "name": "Alice Alley",
  "dateOfBirth": "01/01/1990",
  "favoriteFood": "Glue"
}

async function createPdf(input, output) {
  const readFile = util.promisify(fs.readFile)
  function getStuff() {
    return readFile(input)
  }
  const file = await getStuff()
  const pdfDoc = await PDFDocument.load(file)
  const form = pdfDoc.getForm()
  Object.keys(data).forEach((element) => {
    const field = form.getTextField(element)
    field.setText(data[element])
  })
  const pdfBytes = await pdfDoc.save()
  fs.writeFile(output, pdfBytes, () => {
    console.log('PDF created!')
  })
}
createPdf("input.pdf", "output.pdf")

// PDF library https://pdf-lib.js.org/
// PDF form creation https://www.pdfescape.com/
Run Code Online (Sandbox Code Playgroud)

实际上,您需要在 PDF 文件中创建一个表单,然后为每个字段指定一个名称,以便使用代码引用它。

PDF转义

PDF Escape 是一个网站,您可以上传 PDF,然后使用“表单字段”按钮在其上创建一个表单...在每个字段上右键单击并选择“对象属性...”,然后为该字段指定一个名称稍后您将通过代码引用,然后保存文件,下载并将其放在项目目录中。

注意:如果您希望字段不可编辑并且仅由脚本填充,则还需要在“对象属性...”中将字段设置为“只读”。

之后,将输入文件名以及输出名称提供给 createPdf 函数。

数据对象包括将键作为 PDF 文档中的字段名称以及将值作为您稍后要放入文档中的值。


rsp*_*rsp 12

在npm上查看以下模块:

node-pdffiller是PDF工具包PDFtk的包装器:

在PDFKit的网站上有很多很好的文档:

这些模块具有不同的功能和API.你应该找到适合你需求的东西.

还有一篇很好的文章:

  • 到 2021 年,这些都不起作用,有些需要下载并安装 10GB 的额外内容才能编译 10 行文件,这也不起作用。 (3认同)
  • 如果你想填写 PDF 表格,提到的每个库都有一些缺陷。Libs `pdffiller`、`fill-pdf`、`node-pdffiller (deprecated)` 使用 PDFtk (我无法在 Ubuntu 18.04 上编译它,并且在 docker 中从 NodeJS 运行很麻烦,我认为它有问题填写复选框)。`pdf-fill-form` 是用 C++ 编写的,它是原生 NodeJS 库(太棒了!),但不支持填充复选框:( 并且 pdfkit 只是生成库(不支持表单) (2认同)

Mar*_*ens 12

对于仍在寻找解决方案的任何人,请查看 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