首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pdfminer错误消息:不允许提取pdfminer.pdfdocument.PDFTextExtractionNotAllowed:文本

pdfminer错误消息:不允许提取pdfminer.pdfdocument.PDFTextExtractionNotAllowed:文本
EN

Stack Overflow用户
提问于 2021-02-23 21:27:17
回答 1查看 49关注 0票数 0

我需要处理一些PDF文件,并在数据库中添加它们的表单域内容。

此文档未设置安全方法,正如我在PDF Viewer文档属性中看到的那样。

我尝试了我找到的here的建议。

当我使用pdfminer (或pdfminer.six)进行测试时,我没有收到错误消息,但它没有检索任何字段。

使用PyPDF2时,我得到错误消息:“文件尚未解密”。

这是pdfminer代码:

代码语言:javascript
复制
import sys
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdftypes import resolve1

fname=r'D:\Atrium\Projects\CTFC\psgf\database\19022021\formulari-dinamic-redaccio-plans-simples-gestio-forestal_Filled.pdf'
fp = open(fname, 'rb')
parser = PDFParser(fp)
doc = PDFDocument(parser)
fields = resolve1(doc.catalog['AcroForm'])['Fields']
for i in fields:
    field = resolve1(i)
    name, value = field.get('T'), field.get('V')
    print('{0}: {1}'.format(name, value))
print('Done!')

示例文件可以从here下载。

如何获取字段名称和内容?

EN

回答 1

Stack Overflow用户

发布于 2021-02-25 00:52:42

正如mkl解释的那样,我的PDF文件以XFA form格式存储表单数据,XFA form是一种不推荐的格式。XFA是一个XML文档数组,我必须在每个文档中获取字段名。

我使用PyPDF2库来做到这一点:

代码语言:javascript
复制
import PyPDF2 as pypdf
import xml.etree.ElementTree as ET

fname=r'form.pdf'

def findInDict(needle, haystack):
    xlas = []
    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(fname,'rb')
pdf=pypdf.PdfFileReader(pdfobject)
xfaparts=findInDict('/XFA',pdf.resolvedObjects)

for xfa in xfaparts:
    if isinstance(xfa,pypdf.generic.IndirectObject):
        xml = str(xfa.getObject().getData())
        ## Then process XML to find form tags
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66334060

复制
相关文章

相似问题

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