这篇文章教会我用 Python 读取 PDF 文件【收藏即会】

⛳️ 实战场景

Python 工程师在日常的工作中,经常会碰到解析和处理PDF文件的情况,实战中需求主要分为如下情况:

  1. 提取 PDF 中的文字
  2. 将 PDF 中每页转换为图片
  3. word 转换为PDF
  4. PDF生成,编辑,导入导出
  5. PDF在线渲染

除了最后一项需要前端配合以外,其余内容都可以直接在 python 端进行实现。

本次实战选择 pdfplumber 库进行学习,可以提前安装该库,不过有一点需要注意,该库主要用于读取 PDF 进行操作,写入和编辑无法实现,即本文学习一款专注于 PDF 内容提取的库。

> pip install pdfplumber -i https://pypi.tuna.tsinghua.edu.cn/simple

pdfplumber 库具备如下特点:

  • 可以访问PDF对象中的任意元素详细信息;
  • 可以提取文本和表格,而且用法简单;
  • 集成了可视化调试。

⛳️ Python PDF 实战编码

下面可以编写 PDF 操作的基础代码。

import pdfplumber

with pdfplumber.open('./dddd.pdf') as pdf:
    for page in pdf.pages:
        print(page.extract_text())

        # 每页打印一分页分隔
        print('---------- 分页分隔 ----------')

导入 pdfplumber 模块之后,使用 pdfplumber.open('./dddd.pdf') 打开本地 pdf 文件,然后通过 pdf.pages 遍历所有页,在通过页对象.extract_text() 方法,提取文本信息。

pdfplumber.open() 方法的签名如下所示:

pdfplumber.open("文件名", password = "密码", laparams = { "line_overlap": 0.7 })

其中各参数描述如下:

  • file_name:文件名,必选参数;
  • password:PDF的密码;
  • laparams:布局参数。

除此之外,如果希望读取 PDF,还可以使用 load() 方法,该方法也会返回 pdfplumber.PDF 类的实例。

pdfplumber.PDF 对象实例,主要有两个重要属性:

  • .metadata:从PDF的Info中获取元数据键 /值对字典。 通常包括“ CreationDate”,“ ModDate”,“ Producer”等;
  • .pages:包含 pdfplumber.Page 实例的列表,每一个实例代表PDF每一页的信息。

上文提及的 pdfplumber.Page 实例是 pdfplumber 的核心,后续对 PDF 的操作大量围绕该类的属性和方法实施,其重要属性如下所示:

  • page_number:页码顺序,第一页的序号是 1;
  • witdh:宽度;
  • height:高度;
  • .objects/.chars/.lines/.rects/.curves/.figures/.images:获取PDF页中的重要数据。

核心方法如下所示:

  • extract_text():提取页中的文本;
  • extract_words():提取所有单词及其相关信息;
  • extract_tables(): 提取页面的表格。

extract_text() 呈现结果

在这里插入图片描述

extract_words() 呈现结果

在这里插入图片描述

extract_tables() 呈现效果,由于 PDF 中无表格,所有每页得到的都是空!

在这里插入图片描述

📢📢📢📢📢📢
💗 你正在阅读 【梦想橡皮擦】 的博客
👍 阅读完毕,可以点点小手赞一下
🌻 发现错误,直接评论区中指正吧
📆 橡皮擦的第 716 篇原创博客

从订购之日起,案例5年内保证更新

### 使用Python读取PDF文件 为了实现这一目标,可以采用多个专门处理PDF文档的库。以下是几种常用方法: #### 方法一:使用PyMuPDF (fitz) `PyMuPDF` 是一个功能强大的工具包,支持多种操作,包括提取文本、图像和其他对象。 ```python import fitz # PyMuPDF def extract_text_from_pdf(file_path): document = fitz.open(file_path) text = "" for page_num in range(len(document)): page = document.load_page(page_num) text += page.get_text() return text ``` 此代码片段展示了如何打开并遍历每一页来获取整个文档的文字内容[^3]。 #### 方法二:利用pdfminer.six 对于更复杂的解析需求,比如保留原始布局或处理加密文件,则可以选择 `pdfminer.six`. 这是一个纯Python编写的PDF解析器,能够提供详细的页面结构信息。 ```python from pdfminer.high_level import extract_text text = extract_text('example.pdf') print(text[:500]) # 打印前500字符作为示例 ``` 这段简单的例子说明了怎样通过调用函数快速抽取指定路径下PDF中的文字[^1]. #### 方法三:借助pypdf2 如果仅需简单地访问页码范围内的特定部分而不关心格式细节的话,那么 `PyPDF2` 可能是最简便的选择之一。 ```python import PyPDF2 with open("sample.pdf", "rb") as file: reader = PyPDF2.PdfReader(file) num_pages = len(reader.pages) first_page = reader.pages[0].extract_text() print(f"The document has {num_pages} pages.") print(first_page) ``` 上述脚本实现了计算总页数以及抓取首页的内容展示[^2].
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦想橡皮擦

如有帮助,来瓶可乐

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值