如何从this PDF file中获取字段?它是由Adobe LiveCycle Designer创建的动态PDF。如果您在web浏览器中打开该链接,您可能会看到一个以“请稍候...”开头的页面。如果您下载该文件并通过Adobe Reader (5.0或更高版本)打开它,您应该会看到全部8个页面。
所以,当通过PyPDF2
阅读时,你会得到一个空的字典,因为它会将文件呈现为一个页面,就像你通过web浏览器看到的那样。
def print_fields(path):
from PyPDF2 import PdfFileReader
reader = PdfFileReader(str(path))
fields = reader.getFields()
print(fields)
您可以使用Java依赖库tika
来读取所有8个页面的内容。然而,结果是混乱的,我正在避免Java依赖。
def read_via_tika(path):
from tika import parser
raw = parser.from_file(str(path))
content = raw['content']
print(content)
所以,基本上,我可以在Adobe Actobat中手动Edit -> Form Options -> Export Data…
来获得一个很好的XML。类似地,我需要通过Python获取漂亮的表单字段及其值。
发布于 2019-02-22 06:14:43
多亏了this awesome answer,我成功地使用pdfminer.six
检索了字段。
导航到Catalog > AcroForm > XFA,然后在列表中b'datasets'
元素之后对对象执行pdfminer.pdftypes.resolve1
操作。
发布于 2020-05-10 02:03:11
在我的例子中,以下代码可以工作(来源:ankur garg)
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('CTRX_filled.pdf','rb')
pdf=pypdf.PdfFileReader(pdfobject)
xfa=findInDict('/XFA',pdf.resolvedObjects)
xml=xfa[7].getObject().getData()
https://stackoverflow.com/questions/54797991
复制相似问题