Python 如何操作 PDF 文件?

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

🔍 博客内容包括:

  • 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. 安装所需库](#1. 安装所需库)

[2. 使用 PyPDF2 操作 PDF 文件](#2. 使用 PyPDF2 操作 PDF 文件)

[2.1 合并多个 PDF 文件](#2.1 合并多个 PDF 文件)

[2.2 拆分 PDF 文件](#2.2 拆分 PDF 文件)

[2.3 提取 PDF 文件的文本](#2.3 提取 PDF 文件的文本)

[3. 使用 pdfminer 提取 PDF 文本](#3. 使用 pdfminer 提取 PDF 文本)

[3.1 提取 PDF 文件中的文本](#3.1 提取 PDF 文件中的文本)

[4. 使用 reportlab 创建 PDF 文件](#4. 使用 reportlab 创建 PDF 文件)

[4.1 创建一个简单的 PDF 文件](#4.1 创建一个简单的 PDF 文件)

[4.2 在 PDF 中添加图像](#4.2 在 PDF 中添加图像)

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

[5.1 提取 PDF 文件的文本](#5.1 提取 PDF 文件的文本)

[6. 对 PDF 文件进行加密和解密](#6. 对 PDF 文件进行加密和解密)

[6.1 使用 PyPDF2 对 PDF 进行加密](#6.1 使用 PyPDF2 对 PDF 进行加密)

[6.2 使用 PyPDF2 对 PDF 进行解密](#6.2 使用 PyPDF2 对 PDF 进行解密)

总结


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

1. 安装所需库

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

bash 复制代码
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)

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 canvas

def 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 文件。
相关推荐
宿州派大星13 小时前
Python实战:PyQt5 + OpenCV + Dlib 打造AI桌面应用
人工智能·python·qt
承渊政道14 小时前
【从零开始大模型开发与微调:基于PyTorch与ChatGLM】(开源大模型ChatGLM高级定制化应用实战)
人工智能·pytorch·python·llm·模型微调·glm
Joy T16 小时前
Agent 确定性上下文设计:从 Prompt 参数注入到能力分层
java·开发语言·微服务·架构·prompt·agent context
专注仿真19 小时前
引擎扩展性与集成设计深度剖析:从 14 个扩展点到 DIS→HLA 演进之路
开发语言·算法·仿真引擎·推演引擎
Best-Wishes19 小时前
科来网络分析系统(技术交流版)使用说明书
开发语言·junit·php
收放扳机19 小时前
PCB收放板设备机械手架构选型参考——三轴/四轴/六轴/蜘蛛手对比
人工智能·科技·架构·自动化·制造·pcb工艺
代码不停20 小时前
自动化测试(java)
java·开发语言·selenium·自动化
Smoothcloud润云20 小时前
PyTorch大模型权重加载与启动耗时优化实战:定位磁盘、内存与显存瓶颈
人工智能·pytorch·python·深度学习·gpu算力
databook21 小时前
从循环到向量化:NumPy提速的7个关键思维
python·数据分析·numpy
棉猴21 小时前
玩游戏学Python1-Python和pgzero库的安装
python·pygame·玩游戏·pgzero·pgzrun