Python 如何操作 PDF 文件?

ops/2025/1/17 6:15:41/

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

🔍 博客内容包括:

  • 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/ops/150729.html

相关文章

【华为路由/交换机的ssh远程设置】

华为路由/交换机的ssh远程设置 R1(client):10.1.1.1 R2(server):10.1.1.2 R2服务端配置: 生成本机密钥 查看生成的密钥 设置AAA授权验证方式,并设置支持SSH协议 创建本地用户&…

基于PHP的校园兼职系统设计和开发

基于PHP的校园兼职系统的设计与开发 摘要:从古代至今,教育都是国家培养人才的手段,在古代教育往往都是课堂式教育,在课堂内老师教导学生学习,而随着时间的推移,越来越多的在校大学生已经不满足于只在课堂上…

STM32+W5500+以太网应用开发+003_TCP服务器添加OLED(u8g2)显示状态

STM32W5500以太网应用开发003_TCP服务器添加OLED(u8g2)显示状态 实验效果3-TCP服务器OLED1 拷贝显示驱动代码1.1 拷贝源代码1.2 将源代码添加到工程1.3 修改代码优化等级1.4 添加头文件路径1.5 修改STM32CubeMX工程 2 修改源代码2.1 添加头文件2.2 main函…

【C#深度学习之路】如何使用C#实现Yolo8/11 Segment 全尺寸模型的训练和推理

【C#深度学习之路】如何使用C#实现Yolo8/11 Segment 全尺寸模型的训练和推理 项目背景项目实现推理过程训练过程 项目展望写在最后项目下载链接 本文为原创文章,若需要转载,请注明出处。 原文地址:https://blog.csdn.net/qq_30270773/article…

【漏洞复现】孚盟云 MailAjax.ashx SQL注入漏洞复现

免责声明 请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。工具来自网络,安全性自测,如有侵权请联系删除。本次测试仅供学习使用,如若非法他用,与平台和本文作…

后端代码方式导出excle模板

目录 1.接口层2.业务层3.前端请求4.或者直接用tomcat方式导出 1.接口层 PostMapping("/exprotExcelTemplate")public void exprotExcelTemplate(HttpServletResponse response) throws Exception {exportExcelService.exprotExcelTemplate(response);}2.业务层 Overr…

STM32 FreeRTOS 信号量

信号量的简介 reeRTOS中的信号量是一种用于任务间同步和资源管理的机制。信号量可以是二进制的(只能取0或1)也可以是计数型的(可以是任意正整数)。信号量的基本操作包括“获取”和“释放”。 比如动车上的卫生间,一个…

LSTM火灾温度预测(Pytorch版本)

本文为为🔗365天深度学习训练营内部文章 原作者:K同学啊 一 导入数据 import torch.nn.functional as F import numpy as np import pandas as pd import torch from torch import nn import matplotlib.pyplot as plt from sklearn.preprocessing impor…