首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >读取由Adobe LiveCycle Designer创建的PDF中的表单域

读取由Adobe LiveCycle Designer创建的PDF中的表单域
EN

Stack Overflow用户
提问于 2019-02-21 09:49:15
回答 2查看 894关注 0票数 1

如何从this PDF file中获取字段?它是由Adobe LiveCycle Designer创建的动态PDF。如果您在web浏览器中打开该链接,您可能会看到一个以“请稍候...”开头的页面。如果您下载该文件并通过Adobe Reader (5.0或更高版本)打开它,您应该会看到全部8个页面。

所以,当通过PyPDF2阅读时,你会得到一个空的字典,因为它会将文件呈现为一个页面,就像你通过web浏览器看到的那样。

代码语言:javascript
复制
def print_fields(path):
    from PyPDF2 import PdfFileReader
    reader = PdfFileReader(str(path))
    fields = reader.getFields()
    print(fields)

您可以使用Java依赖库tika来读取所有8个页面的内容。然而,结果是混乱的,我正在避免Java依赖。

代码语言:javascript
复制
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获取漂亮的表单字段及其值。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-22 06:14:43

多亏了this awesome answer,我成功地使用pdfminer.six检索了字段。

导航到Catalog > AcroForm > XFA,然后在列表中b'datasets'元素之后对对象执行pdfminer.pdftypes.resolve1操作。

票数 2
EN

Stack Overflow用户

发布于 2020-05-10 02:03:11

在我的例子中,以下代码可以工作(来源:ankur garg)

代码语言:javascript
复制
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()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54797991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档