【问题标题】:pdfminer error message: pdfminer.pdfdocument.PDFTextExtractionNotAllowed: Text extraction is not allowedpdfminer 错误消息:pdfminer.pdfdocument.PDFTextExtractionNotAllowed:不允许文本提取
【发布时间】:2021-02-23 13:27:17
【问题描述】:

我需要处理一些 PDF 文件并将它们的表单字段内容添加到数据库中。

此文档没有设置安全方法,我可以在 PDF 查看器文档属性中看到。

我尝试了我找到的建议here

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

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

这是pdfminer代码:

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下载。

如何获取字段名和内容?

【问题讨论】:

  • 您的示例文件包含一个 XFA 表单,即不是您要查找的普通 AcroForm 表单定义。带有 XFA 表单的 PDF 是一种已弃用的技术。
  • 谢谢!但是,PDF 表单已经填写完毕,我该如何继续访问数据字段,或者您知道是否有任何工具可以在 Acroform 中转换 XFA?
  • 嗯,本质上,xfa 表单定义是一个整体嵌入或部分分离的 xml 文件。您可以提取它并从 xml 中读取数据。它位于 AcroForm 字典中,作为键 XFA 的值。

标签: python pdf pdfminer


【解决方案1】:

正如 mkl 所解释的,我的 PDF 文件以 XFA 格式存储表单数据,这是一种已弃用的格式。 XFA 是一组 XML 文档,我必须在每个文档中获取字段名称。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-21
    • 2019-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-18
    相关资源
    最近更新 更多