我有一个加密的 PDF 文件,我需要获取字段名称和值。我尝试了不同的库,但没有成功。首先,因为我知道密码,所以我使用 pikepdf 解密并保存了文件:
import pikepdf
with pikepdf.open(fname, password=password) as pdf:
num_pages = len(pdf.pages)
print("Total pages:", num_pages)
pdf.save(fname.replace('.pdf','_decrypted.pdf'))
现在我可以在 Adobe PDF 查看器中打开并查看解密后的文件了。
尝试使用不同的方式读取字段:
# from https://towardsdatascience.com/how-to-extract-data-from-pdf-forms-using-python-10b5e5f26f70
import PyPDF2 as pypdf
def findInDict(needle, haystack):
for key in haystack.keys():
try:
value=haystack[key]
except:
continue
if key==needle:
return value
if isinstance(value,dict):
x=findInDict(needle,value)
if x is not None:
return x
pdfobject=open('pdf_decrypted.pdf','rb')
pdf=pypdf.PdfFileReader(pdfobject)
xfa=findInDict('/XFA',pdf.resolvedObjects)
xml=xfa[7].getObject().getData()
在本例中,我获取 XML 数据,但它不包含任何表单字段数据。
# from https://towardsdatascience.com/how-to-extract-data-from-pdf-forms-using-python-10b5e5f26f70
import PyPDF2 as pypdf
pdfobject=open('pdf_decrypted.pdf','rb')
pdf=pypdf.PdfFileReader(pdfobject)
x=pdf.getFormTextFields()
这里 x = {}
我还尝试了此链接中的替代方法:How to extract PDF fields from a filled out form in Python?
from fillpdf import fillpdfs
x=fillpdfs.get_form_fields("pdf_decrypted.pdf")
这里 x = {} 也是。
我该怎么做?
示例文件可用 here。