如何使用 PyPDF2 更新字段

How to update a field with PyPDF2

我正在尝试制作一个 pdf 生成器,我快完成了,但无法弄清楚更新表单字段的最后一步。

我在 Windows 环境中使用 PyPDF2 Python 3.6

第一步是下载 pdf(其中有很多,尽管它们都非常相似并且都有相同的表单域)。下面的代码将打开 pdf 并编写一个新的。我的信念是,如果我更新表单字段的字典并将该字典写入新文件,那么它将进行我想要的更改。问题是我不知道如何使更新后的字典生效。

pdf = open(file, 'rb')
flObj = PdfFileReader(pdf)
flObj.decrypt(password)
dict = flObj.getFormTextFields()
writer = PdfFileWriter()
outputstream = open(my_file, 'wb')
dict['DB_Code'] = '2809785' #as an example
for i in range(flObj.getNumPages()):
    writer.addPage(flObj.getPage(i))
writer.write(outputstream)
outputstream.close()

我可以在 PyPDF2 的 documentation 中看到有 updatePageFormFieldValues(page, fields) 但是 getFormTextFields 函数返回的字典没有给出它适用的页面(字段被分散pdf 中总是跨越 4 页),所以我不太确定如何应用它。

我已经查看了许多其他问题和解决方案,例如 this,但是我觉得它们不符合我的需要。

提前致谢。

所以答案似乎是我只需要浏览文件并逐页手动查找字段。值得庆幸的是,这些字段不会在文档之间更改位置。

似乎确实存在一个错误(通常是 pdf 文件?也许)pdf 文件没有被重新绘制。如果单击该字段,可以看到 PyPDF2 输入的新文本,但是必须手动复制和粘贴才能永久看到该更改。