python使用pdfplumber读取PDF文本及其位置

pdfplumber入门

可以参照官方的教程学习https://github.com/jsvine/pdfplumber

这里也推荐一个使用入门介绍的很清楚的博客https://blog.csdn.net/weixin_48629601/article/details/107224376,把官网的教程翻译解释的很清晰。

文本及其位置的读取代码

pdf读取示例

image-20210810155449737

比如我想获得图中**能量**在pdf中的位置,推荐使用jupyter notebook去写,可以可视化调节。

import pdfplumber
# 读取pdf并选择对应的页数
pdf = pdfplumber.open('t.pdf')
page = pdf.pages[4]
# 提取文本并可视化
words = page.extract_words()
im = page.to_image()
im.draw_rects(words)

通过可视化能看出提取效果

下载

page.extract_words()提取的信息是字典列表,会包含文本,位置等信息

print(words[0])

使用print输出可以得到所有的信息,x0,x1, top, bottom就是所需的位置信息

{‘text’: ‘信息载体’, ‘x0’: Decimal(‘221.741’), ‘x1’: Decimal(‘398.141’), ‘top’: Decimal(‘44.336’), ‘bottom’: Decimal(‘88.376’), ‘upright’: True, ‘direction’: 1}

所以如果需要提取某个文本的位置可以使用下面的代码:

# 先查看所有的文本
print(page.extract_text())
再查找需要的文本
for word in words:
    if '能量' in word['text']:
        print(word)

运行结果如下:

信息载体 电磁辐射
E=hf=hc/λ
波长
能量
c 为光速
h为普朗克常数
{‘text’: ‘能量\uf06c’, ‘x0’: Decimal(‘85.914’), ‘x1’: Decimal(‘147.480’), ‘top’: Decimal(‘460.084’), ‘bottom’: Decimal(‘484.414’), ‘upright’: True, ‘direction’: 1}

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐