利用 Python PyPDF2库轻松提取PDF文本(及其他高级操作)

2023-09-16 15:08:26

当需要从PDF文件中提取文本时,Python中的PyPDF2库是一个非常有用的工具。无论您是需要分析PDF文档中的内容还是需要在文档中搜索特定的信息,PyPDF2都可以帮助您轻松实现这些任务。

在本文中,我们将探讨如何使用PyPDF2库提取PDF文件中的文本,并提供一些示例代码来帮助您入门。

安装PyPDF2库

首先,您需要安装PyPDF2库。您可以使用pip来安装它:

pip install PyPDF2

技术交流

技术要学会分享、交流,不建议闭门造车。一个人可以走的很快、一堆人可以走的更远。

本文文章由粉丝的分享、推荐,资料干货、资料分享、数据、技术交流提升,均可加交流群获取,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友。

方式①、添加微信号:pythoner666,备注:来自CSDN + 加群
方式②、微信搜索公众号:Python学习与数据挖掘,后台回复:加群

打开PDF文件,并读取内容

让我们从一个简单的示例开始。假设我们有一个名为"sample.pdf"的PDF文件,并且我们想要提取其中的文本内容。

import PyPDF2

# 打开PDF文件
pdf_file = open('YOLOv1.pdf', 'rb')

# 创建一个PDF对象
pdf_reader = PyPDF2.PdfReader(pdf_file)

# 获取PDF文件中的页面数量
num_pages = len(pdf_reader.pages)

# 创建一个空字符串,用于存储提取的文本
text = ""

# 循环遍历每一页并提取文本
for page_num in range(num_pages):
    page = pdf_reader.pages[page_num]
    text += page.extract_text()

# 关闭PDF文件
pdf_file.close()

# 打印提取的文本
print(text)

以上代码将打开名为"YOLOv1.pdf"的PDF文件,遍历每一页并将文本内容提取到一个字符串中。最后,它会打印提取的文本。

图片

提取结果

高级用法

除了基本的文本提取,PyPDF2还提供了其他功能,例如合并多个PDF文件、旋转页面、添加书签等。让我们详细讨论一些高级用法,并提供相应的代码示例。

合并多个PDF文件

有时,您可能需要将多个PDF文件合并成一个文件。PyPDF2允许您执行此操作。

from PyPDF2 import PdfWriter

merger = PdfWriter()

for pdf in ["M:\YOLOv1.pdf", "M:\YOLOv2.pdf"]:
    merger.append(pdf)

merger.write("M:\merged.pdf")
merger.close()

以上代码将打开名为’YOLOv1.pdf’和’YOLOv1.pdf’的两个PDF文件,将它们的内容合并到一个新的PDF文件’merged.pdf’中。

旋转页面

有时,PDF文件中的页面可能需要旋转。使用PyPDF2,您可以旋转页面以适应您的需求。

import PyPDF2

# 打开PDF文件
pdf_file = open('M:\YOLOv1.pdf', 'rb')

# 创建PDF对象
pdf_reader = PyPDF2.PdfReader(pdf_file)

# 创建一个新的PDF对象
pdf_writer = PyPDF2.PdfWriter()

# 旋转第一页90度
page = pdf_reader.pages[0]
page.rotate(90)
pdf_writer.add_page(page)

# 将未旋转的页面添加到新文件中
for page_num in range(1, len(pdf_reader.pages)):
    page = pdf_reader.pages[page_num]
    pdf_writer.add_page(page)

# 创建一个新的PDF文件并保存旋转后的内容
output_pdf = open('M:\YOLOv1-rd.pdf', 'wb')
pdf_writer.write(output_pdf)

# 关闭所有打开的文件
pdf_file.close()
output_pdf.close()

以上代码将打开名为’YOLOv1.pdf’的PDF文件,旋转第一页90度,并将旋转后的页面保存到新的PDF文件’YOLOv1-rd.pdf’中。

添加书签

您还可以使用PyPDF2在PDF文件中添加书签,以便更轻松地导航和查找内容。

以上代码将打开名为’YOLOv1.pdf’的PDF文件,将其内容复制到新的PDF文件’YOLOv1-copy.pdf’中,并在第一页和第六页添加了两个书签。

import PyPDF2

# 打开PDF文件
pdf_file = open('M:\YOLOv1.pdf', 'rb')

# 创建PDF对象
pdf_reader = PyPDF2.PdfReader(pdf_file)

# 创建一个新的PDF对象
pdf_writer = PyPDF2.PdfWriter()

# 循环遍历每一页并将页面添加到新文件中
for page_num in range(len(pdf_reader.pages)):
    page = pdf_reader.pages[page_num]
    pdf_writer.add_page(page)

# 添加书签
pdf_writer.add_bookmark('Chapter 1', 0)  # 在第一页添加一个名为"Chapter 1"的书签
pdf_writer.add_bookmark('Chapter 2', 5)  # 在第六页添加一个名为"Chapter 2"的书签

# 创建一个新的PDF文件并保存带有书签的内容
output_pdf = open('M:\YOLOv1-copy.pdf', 'wb')
pdf_writer.write(output_pdf)

# 关闭所有打开的文件
pdf_file.close()
output_pdf.close()

结论

使用PyPDF2库,您可以轻松地从PDF文件中提取文本,这对于数据分析、信息检索和自动化任务非常有用。希望这篇文章和示例代码有助于您开始使用PyPDF2进行PDF文本提取。如若需要其他高级用法,例如比例调整、放缩等操作,可以访问PyPDF2的官方网站查看其他示例。

更多推荐

macOS - 使用VLC

文章目录关于VLC安装查看帮助流媒体MRL语法:URL语法:主程序(core)音频视频截图:窗口属性:子画面屏幕显示(OSD):字幕:覆盖:轨道设置:播放控制:默认设备:高级:输入播放列表性能选项:热键跳跃大小:关于VLCVLCmediaplayerVLC是一款自由、开源的跨平台多媒体播放器及框架,可播放大多数多媒体文

SpringMVC概述,SpringMVC是什么,有什么优势?

目录一、MVC模式二、SpringMVC是什么?三、SpringMVC的优势四、SpringMVC的应用场景一、MVC模式MVC模式是一种软件架构模式,它将软件的用户界面(即前台页面)和业务逻辑分离,使代码具有更高的可扩展性、可复用性、可维护性和灵活性。MVC模式包含三个组件:Model(模型)、View(视图)和Co

Spring MVC请求处理流程和九大组件

文章目录SpringMVC请求处理流程SpringMVC九⼤组件需求:前端浏览器请求url:http://localhost:8080/demo/handle01,前端⻚⾯显示后台服务器的时间开发过程配置DispatcherServlet前端控制器开发处理具体业务逻辑的Handler(@Controller、@Requ

阿里云大数据实战记录10:Hive 兼容模式的坑

文章目录1、前言2、什么是Hive兼容模式?3、为什么要开启Hive模式?4、有什么副作用?5、如何开启Hive兼容模式?6、该场景下,能不能不开启Hive兼容模式?7、为什么不是`DATE_FORMAT(datetime,string)`?8、小结1、前言今天在开发一个表单的时候,MaxCompute抛给我一个错误:

pdf转换成word,这里有几个不错的方法

  pdf转换成word怎么转?大家都知道,在电脑进行各种文件格式转换中,PDF转换为Word文档的需求量应该是最大的。在我们的日常工作中,经常需要将PDF转换为Word格式。为什么要将pdf文件转换成word,相信大家也都应该知道的,因为pdf文件不易编辑的特点,导致大家相对pdf文件内容进行修改

计算机竞赛 深度学习 python opencv 实现人脸年龄性别识别

文章目录0前言1项目课题介绍2关键技术2.1卷积神经网络2.2卷积层2.3池化层2.4激活函数:2.5全连接层3使用tensorflow中keras模块实现卷积神经网络4Keras介绍4.1Keras深度学习模型4.2Keras中重要的预定义对象4.3Keras的网络层构造5数据集处理训练5.1分为年龄、性别5.2性别

【React】React入门

目录一、何为React二、React与传统MVC的关系三、React的特性1、声明式编程①、实现标记地图2、高效灵活3、组件式开发(Component)①、函数式组件②、类组件(有状态组件)③、一个组件该有的特点4、单向式响应的数据流四、虚拟DOM1、传统DOM更新①、举例讲解2、虚拟DOM①、举例讲解五、创建Reac

2022年统计用区划代码表SQL 第二部分02

行政区划代码为国家公布的六位县级以上行政区划代码行政区编码的用途:APP里做城市级联选择根据身份证前六位获取用户所在城市区县370786昌邑市370800济宁市370811任城区370812兖州区百度高德等接口通常都会返回adcode字段(行政区编码)根据行政区编码可以查询天气数据例如请求天气API接口,传参adcod

java面试题

java面试题java基础面试题1.hashcode和equals如何使用2.==和equals的区别3.重写和重载的区别4.代理的几种实现方式5.String、StringBuffer、StringBuilder区别及使用场景6.怎样声明一个类不会被继承,什么场景下会用7.自定义异常在生产中如何应用8.java面向对

GaussDB(DWS)云原生数仓技术解析:湖仓一体,体验与大数据互联互通

文章目录前言一、关于数据仓库需求场景分类二、数据仓库线下部署场景2.1、线下部署场景介绍及优劣势说明2.2、线下部署场景对应的客户需求三、数据仓库公有云部署场景3.1、公有云部署场景介绍及优劣势说明3.2、公有云部署场景对应的客户需求四、为何重视数据共享(含湖仓一体)?4.1、传统数据共享业务场景4.2、数据共享(含湖

Flutter插件的制作和发布

Flutter制作插件有两种方式(以下以android和ios为例):目录1.直接在主工程下的android和ios项目内写插件代码:2.创建独立FlutterPlugin项目,制作各端插件后,再引入项目:1.创建FlutterPlugin:2.FlutterPlugin创建完成:3.使用androidstudio打开

热文推荐