Python 如何操作 PDF 文件?

server/2025/1/18 5:04:55/

💖 欢迎来到我的博客! 非常高兴能在这里与您相遇。在这里,您不仅能获得有趣的技术分享,还能感受到轻松愉快的氛围。无论您是编程新手,还是资深开发者,都能在这里找到属于您的知识宝藏,学习和成长。

🔍 博客内容包括:

  • Java核心技术与微服务:涵盖Java基础、JVM、并发编程、Redis、Kafka、Spring等,帮助您全面掌握企业级开发技术。
  • 大数据技术:涵盖Hadoop(HDFS)、Hive、Spark、Flink、Kafka、Redis、ECharts、Zookeeper等相关技术。
  • 开发工具:分享常用开发工具(IDEA、Git、Mac、Alfred、Typora等)的使用技巧,提升开发效率。
  • 数据库与优化:总结MySQL及其他常用数据库技术,解决实际工作中的数据库问题。
  • Python与大数据:专注于Python编程语言的深度学习,数据分析工具(如Pandas、NumPy)和大数据处理技术,帮助您掌握数据分析、数据挖掘、机器学习等技术。
  • 数据结构与算法:总结数据结构与算法的核心知识,提升编程思维,帮助您应对大厂面试挑战。

🌟 我的目标:持续学习与总结,分享技术心得与解决方案,和您一起探索技术的无限可能!在这里,我希望能与您共同进步,互相激励,成为更好的自己。

📣 欢迎订阅本专栏,与我一起在这个知识的海洋中不断学习、分享和成长!💻🚀


📍版权声明:本博客所有内容均为原创,遵循CC 4.0 BY-SA协议,转载请注明出处。

 

目录

1. 安装所需库

2. 使用 PyPDF2 操作 PDF 文件

2.1 合并多个 PDF 文件

2.2 拆分 PDF 文件

2.3 提取 PDF 文件的文本

pdfminer%20%E6%8F%90%E5%8F%96%20PDF%20%E6%96%87%E6%9C%AC-toc" style="margin-left:80px;">3. 使用 pdfminer 提取 PDF 文本

3.1 提取 PDF 文件中的文本

4. 使用 reportlab 创建 PDF 文件

4.1 创建一个简单的 PDF 文件

4.2 在 PDF 中添加图像

5. 使用 PyMuPDF (fitz) 提取文本

5.1 提取 PDF 文件的文本

6. 对 PDF 文件进行加密和解密

6.1 使用 PyPDF2 对 PDF 进行加密

6.2 使用 PyPDF2 对 PDF 进行解密

总结


在 Python 中操作 PDF 文件的常用方法是使用专门的第三方库。这些库可以帮助你完成常见的操作,如读取 PDF 内容、提取文本、合并和拆分 PDF 文件、修改文件等。常用的库包括 PyPDF2pdfminerreportlab 等。下面是一些常见任务的示例。

1. 安装所需库

首先,需要安装必要的库。你可以使用以下命令来安装这些库:

pip install PyPDF2
pip install pdfminer.six
pip install reportlab

2. 使用 PyPDF2 操作 PDF 文件

PyPDF2 是一个非常流行的库,支持对 PDF 文件进行合并、拆分、加密、解密、旋转等操作。

2.1 合并多个 PDF 文件
python">import PyPDF2# 创建一个 PDF 合并器对象
pdf_merger = PyPDF2.PdfMerger()# 需要合并的 PDF 文件列表
pdf_files = ['file1.pdf', 'file2.pdf', 'file3.pdf']# 合并 PDF 文件
for pdf in pdf_files:pdf_merger.append(pdf)# 输出合并后的 PDF 文件
pdf_merger.write('merged_output.pdf')
pdf_merger.close()print("PDF 文件合并完成!")
2.2 拆分 PDF 文件
python">import PyPDF2# 打开 PDF 文件
with open('sample.pdf', 'rb') as file:reader = PyPDF2.PdfReader(file)# 获取 PDF 文件的页数total_pages = len(reader.pages)# 创建一个 PDF 写入器对象writer = PyPDF2.PdfWriter()# 拆分为每一页一个 PDF 文件for page_num in range(total_pages):writer.add_page(reader.pages[page_num])# 写入到新的 PDF 文件with open(f'page_{page_num + 1}.pdf', 'wb') as output_file:writer.write(output_file)print("PDF 文件拆分完成!")
2.3 提取 PDF 文件的文本
python">import PyPDF2# 打开 PDF 文件
with open('sample.pdf', 'rb') as file:reader = PyPDF2.PdfReader(file)text = ""# 提取所有页的文本for page_num in range(len(reader.pages)):page = reader.pages[page_num]text += page.extract_text()print("PDF 文件内容:")
print(text)

pdfminer%20%E6%8F%90%E5%8F%96%20PDF%20%E6%96%87%E6%9C%AC">3. 使用 pdfminer 提取 PDF 文本

pdfminer.six 是一个专注于从 PDF 中提取文本的库,比 PyPDF2 更适合复杂的文本提取操作。它支持从 PDF 中提取文本和元数据。

3.1 提取 PDF 文件中的文本
python">from pdfminer.high_level import extract_text# 提取 PDF 文件中的文本
text = extract_text('sample.pdf')print("提取的文本内容:")
print(text)

4. 使用 reportlab 创建 PDF 文件

reportlab 是一个非常强大的库,主要用于生成 PDF 文件。它提供了丰富的 API 来设计和生成 PDF。

4.1 创建一个简单的 PDF 文件
python">from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas# 创建一个 PDF 文件并绘制文本
def create_pdf(output_filename):c = canvas.Canvas(output_filename, pagesize=letter)c.drawString(100, 750, "Hello, this is a simple PDF created with ReportLab!")c.save()# 调用函数生成 PDF 文件
create_pdf("output.pdf")
print("PDF 文件创建完成!")
4.2 在 PDF 中添加图像
python">from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvasdef create_pdf_with_image(output_filename):c = canvas.Canvas(output_filename, pagesize=letter)c.drawString(100, 750, "Here is an image below:")# 添加图像c.drawImage("image.jpg", 100, 500, width=200, height=150)  # 图像位置和大小c.save()create_pdf_with_image("pdf_with_image.pdf")
print("PDF 文件(带图像)创建完成!")

5. 使用 PyMuPDF (fitz) 提取文本

PyMuPDF 是一个处理 PDF、XPS、EPUB 等文件格式的库,功能非常强大且效率较高。你可以使用它来提取文本、图像和其他内容。

5.1 提取 PDF 文件的文本
python">import fitz  # PyMuPDF# 打开 PDF 文件
doc = fitz.open('sample.pdf')# 提取所有页面的文本
text = ""
for page_num in range(len(doc)):page = doc.load_page(page_num)text += page.get_text()print("PDF 文件的内容:")
print(text)

6. 对 PDF 文件进行加密和解密

6.1 使用 PyPDF2 对 PDF 进行加密
python">import PyPDF2# 打开 PDF 文件
with open('sample.pdf', 'rb') as file:reader = PyPDF2.PdfReader(file)writer = PyPDF2.PdfWriter()# 将 PDF 中的所有页面添加到 writer 对象中for page in reader.pages:writer.add_page(page)# 设置密码password = "your_password"writer.encrypt(password)# 写入加密后的文件with open('encrypted_sample.pdf', 'wb') as encrypted_file:writer.write(encrypted_file)print("PDF 文件加密完成!")
6.2 使用 PyPDF2 对 PDF 进行解密
python">import PyPDF2# 打开加密的 PDF 文件
with open('encrypted_sample.pdf', 'rb') as file:reader = PyPDF2.PdfReader(file)# 解密 PDF 文件password = "your_password"if reader.is_encrypted:reader.decrypt(password)# 创建一个 PDF 写入器对象writer = PyPDF2.PdfWriter()# 将解密后的页面添加到写入器中for page in reader.pages:writer.add_page(page)# 输出解密后的 PDF 文件with open('decrypted_sample.pdf', 'wb') as decrypted_file:writer.write(decrypted_file)print("PDF 文件解密完成!")

总结

使用 Python 处理 PDF 文件是非常常见的任务,通过不同的库,你可以实现 PDF 的各种操作:

  • PyPDF2:用于合并、拆分、加密、解密和提取文本。
  • pdfminer.six:专注于从 PDF 中提取文本,适合需要复杂文本解析的场景。
  • reportlab:用于生成 PDF 文件,支持绘图、添加文本、图片等。
  • PyMuPDF (fitz):支持高效地提取文本、图像等,并处理 PDF 文件。

http://www.ppmy.cn/server/159266.html

相关文章

动手学大数据-2常见的查询优化器

目录 什么是查询优化器 查询优化器分类 Top-downOptimizer Bottom-upOptimizer RBO-关系代数 RBO-优化原则 RBO-列裁剪 RBO-谓词下推 RBO-传递闭包 RBO-RuntimeFilter 小结 CBO(Cost-basedOptimizer) 概念 CBO-统计信息 CBO-统计信息…

Scala 提取器(Extractor)

Scala 提取器(Extractor)是一个重要的概念,它主要用于从对象中提取出构造该对象时所用的参数。在 Scala 中,提取器通常是一个带有 unapply 方法的单例对象。这个 unapply 方法是 apply 方法的反向操作:apply 方法接受参…

算法——归并排序(基本思想、java实现、实现图解)

我是一个计算机专业研0的学生卡蒙Camel🐫🐫🐫(刚保研) 记录每天学习过程(主要学习Java、python、人工智能),总结知识点(内容来自:自我总结网上借鉴&#xff0…

DNS介绍与部署-Day 01

1. 什么是DNS DNS(Domain Name System)域名系统,是一种采用客户端/服务器机制,负责实现计算机名称与IP地址转换的系统。DNS作为一种重要的网络服务,既是Internet工作的基础,同时在企业内部网络中也得到了广…

前后端分离开发心得

前后端分离开发是一种软件开发模式,将前端和后端的开发分离开来,使得前端和后端可以独立开发、测试和部署。具体来说: • 前端:负责展示数据和用户交互,使用 HTML、CSS、JavaScript 等技术实现用户界面和交互逻辑&…

向量数据库如何助力Text2SQL处理高基数类别数据

01. 导语 Agent工作流和 LLMs (大语言模型)的出现,让我们能够以自然语言交互的模式执行复杂的SQL查询,并彻底改变Text2SQL系统的运行方式。其典型代表是如何处理High-Cardinality Categorical Data (高基数类别数据&am…

SVM支持向量机

目录 算法原理 数学基础 向量内积(向量点乘) 范数 对偶问题 拉格朗日乘子法 ​线性可分与线性不可分 线性可分 线性不可分 超平面 超平面的定义 超平面的作用 如何寻找最优的超平面 损失函数求解 软间隔 鲁棒性 核函数 算法优缺点 优点…

运输层安全协议SSL

安全套接字层 SSL (Secure Socket Layer) SSL 作用在端系统应用层的 HTTP 和运输层之间,在 TCP 之上建立起一个安全通道,为通过 TCP 传输的应用层数据提供安全保障。 应用层使用 SSL 最多的就是 HTTP,但 SSL 并非仅用于 HTTP,而是…