【发布时间】:2014-09-10 23:16:23
【问题描述】:
我有一个包含一个表单域的 pdf 模板文件。我想填写并展平此表格,然后将其另存为新文件。
我正在寻找能够执行此操作的 Python 库,但我也会接受使用 Linux cli 程序的解决方案。
【问题讨论】:
我有一个包含一个表单域的 pdf 模板文件。我想填写并展平此表格,然后将其另存为新文件。
我正在寻找能够执行此操作的 Python 库,但我也会接受使用 Linux cli 程序的解决方案。
【问题讨论】:
根据 Adobe Docs 有一个更好的方法来执行此操作,将可编辑表单字段的位位置更改为 1 以使其只读。我在这里提供了一个完整的解决方案:
https://stackoverflow.com/a/55301804/8382028
但总体而言,您可以使用 PyPDF2 填充字段,然后遍历注释并执行以下操作:
for j in range(0, len(page['/Annots'])):
writer_annot = page['/Annots'][j].getObject()
for field in data_dict:
if writer_annot.get('/T') == field:
writer_annot.update({
NameObject("/Ff"): NumberObject(1) # make ReadOnly
})
【讨论】:
回答我自己的问题,我发现的最佳解决方案是结合使用 Python 库和程序 pdftk。
the github page for the library 描述了该过程。
我不想将.fdf 文件保存到磁盘中,所以这是我的方法
from fdfgen import forge_fdf
from subprocess import Popen, PIPE
fields = [("field1", "foo"),
("field2", "bar")]
fdf = forge_fdf("", fields, [], [], [])
pdftk = ["pdftk", "template.pdf", "fill_form", "-",
"output", "out.pdf", "flatten"]
proc = Popen(pdftk, stdin=PIPE)
output = proc.communicate(input=fdf)
if output[1]:
raise IOError(output[1])
【讨论】: