使用pdfminerPython从特定的轮廓或目标不是页码中提取文本

问题描述

我正在使用pdfminer.six从PDF文件中提取文本。我曾尝试过其他PDF提取器,但只有pdfminer可以按他们需要的方式处理文本。

我想从符合搜索条件的特定轮廓(书签)中提取文本。

PDFDocument类具有用于提取轮廓的方法get_outlines。它返回一个元组生成器,其中包含大纲的 level,标题,目的地和其他信息。 “目标”值是由PDFObjRef类实例和其他信息组成的列表。

这是从get_outlines返回的数据的样子:

(...)

(1,“帐户信息客户端20”,[PDFObjRef:3918,/“ FitH”,36],无,无)

(1,“帐户信息客户端21”,[PDFObjRef:3931,/'FitH',36],无,无)

(...)

pdfminer文档页面上说,“某些PDF文档使用页码作为目标,而其他PDF文档则使用页码和页面的实际位置”。 上面示例中的PDFObjRef的编号不是页码:我在此示例中使用的PDF只有933页。

正如我在一开始所说的,我只需要从PDF文件的许多轮廓之一中提取文本。 使用以下代码段,我可以创建一个生成器并提取序列中的每个页面:

from io import StringIO

from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfinterp import PDFResourceManager,PDFPageInterpreter
from pdfminer.pdfpage import PDFPage
from pdfminer.pdfparser import PDFParser

output_string = StringIO()
with open('samples/simple1.pdf','rb') as in_file:
    parser = PDFParser(in_file)
    doc = PDFDocument(parser)
    rsrcmgr = PDFResourceManager()
    device = TextConverter(rsrcmgr,output_string,laparams=LAParams())
    interpreter = PDFPageInterpreter(rsrcmgr,device)
    for page in PDFPage.create_pages(doc):
        interpreter.process_page(page)

result = output_string.getvalue()

但是我不怎么指向一个特定的页面目标(或页面范围,包括两个目标之间)并仅从该片段中提取文本。

有人可以帮忙吗? 如何将PDFObjRef:3918和PDFObjRef:3931转换为页码,或者如何像这样间隔提取数据?

我正在使用Python 3.8.5和pdfminer.six。

谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...