切割PDF使用python,库PyPDF2

使用 Python 将大型 PDF 文件分割成多个小文件

理解任务

将一个 170M 的 PDF 文件分割成多个 10M 左右的小文件。这在处理大型 PDF 文件时非常有用,例如:

  • 减少单个文件的大小,方便传输或存储
  • 分别处理不同的文件部分
  • 提高 PDF 处理的效率

选择合适的 Python 库

Python 提供了多个用于处理 PDF 文件的库,其中 PyPDF2 是一个常用的选择。它可以读取、合并、分割 PDF 文件,并提供了一些其他的功能。

代码实现

python 复制代码
import PyPDF2

def split_pdf(input_pdf, output_prefix, max_size=10*1024*1024):
  """
  将一个 PDF 文件分割成多个小文件

  Args:
    input_pdf: 输入 PDF 文件路径
    output_prefix: 输出文件的前缀
    max_size: 每个输出文件的最大字节数
  """

  with open(input_pdf, 'rb') as input_file:
    reader = PyPDF2.PdfReader(input_file)
    num_pages = len(reader.pages)

    output_pdf = None
    output_writer = None
    current_size = 0
    part_num = 1

    for page_num in range(num_pages):
      page = reader.pages[page_num]

      if output_pdf is None:
        output_pdf = PyPDF2.PdfWriter()
        output_filename = f"{output_prefix}_{part_num}.pdf"

      output_pdf.add_page(page)

      # 获取当前输出 PDF 文件的字节大小
      output_pdf.add_page(page)  # 添加页面后,再次获取大小,以确保准确
      with io.BytesIO() as buffer:
        output_pdf.write(buffer)
        current_size = len(buffer.getvalue())

      if current_size >= max_size:
        with open(output_filename, 'wb') as output_file:
          output_pdf.write(output_file)

        # 创建新的输出 PDF 和写入器
        output_pdf = PyPDF2.PdfWriter()
        output_filename = f"{output_prefix}_{part_num + 1}.pdf"
        part_num += 1
        current_size = 0

    # 处理最后一个部分
    if output_pdf:
      with open(output_filename, 'wb') as output_file:
        output_pdf.write(output_file)

# 示例用法
input_file = "large_pdf.pdf"
output_prefix = "split_part"
split_pdf(input_file, output_prefix)

代码解释

  1. 导入 PyPDF2 库: 用于处理 PDF 文件。
  2. 定义函数: split_pdf 函数接受输入 PDF 文件路径、输出文件前缀和每个输出文件的最大字节数作为参数。
  3. 读取 PDF 文件: 使用 PyPDF2.PdfReader 读取输入 PDF 文件,获取总页数。
  4. 创建输出 PDF 和写入器: 初始化输出 PDF 和写入器,用于写入分割后的 PDF 文件。
  5. 逐页处理: 遍历每一页,将页面添加到当前输出 PDF 中。
  6. 检查文件大小: 每次添加页面后,检查当前输出 PDF 的大小是否超过最大字节数。如果超过,则将当前输出 PDF 保存到磁盘,并创建一个新的输出 PDF。
  7. 处理最后一个部分: 处理完所有页面后,将最后一个输出 PDF 保存到磁盘。

注意

  • 文件大小估计: 由于 PDF 文件的压缩方式不同,实际每个页面的字节大小可能会有波动,因此分割后的文件大小可能与设定的 max_size 略有差异。
  • 性能优化: 对于非常大的 PDF 文件,可以考虑使用多线程或多进程来提高分割速度。
  • 其他库: 除了 PyPDF2,还有其他一些 Python 库可以用于处理 PDF 文件,例如 pdfminer.six

进一步优化

  • 自定义分割规则: 可以根据需要自定义分割规则,例如按页数分割、按书签分割等。
  • 错误处理: 添加异常处理,以应对文件损坏或其他异常情况。
  • 进度条: 显示分割进度,方便用户了解处理过程。
相关推荐
有一个好名字1 分钟前
Claude Code 50+命令全解析
python
liliangcsdn12 分钟前
LLM如何与mcp server交互示例
linux·开发语言·python
小夏子_riotous13 分钟前
openstack的使用——7. 共享文件系统manila服务
linux·运维·服务器·系统架构·centos·openstack·运维开发
Lupino13 分钟前
拯救迷失的荧光溶解氧传感器:从“三无”到“复活”的全记录
python
南境十里·墨染春水20 分钟前
linux学习进展 进程的内存管理
linux·服务器·学习
xcjbqd028 分钟前
SQL中视图能否嵌套存储过程_实现复杂自动化报表逻辑
jvm·数据库·python
ZC跨境爬虫29 分钟前
海南大学交友平台开发实战day7(实现核心匹配算法+解决JSON请求报错问题)
前端·python·算法·html·json
哇蛙蛙30 分钟前
H3CNE--23.ACL
服务器·网络·经验分享·网络协议·tcp/ip·h3cne
迷藏49432 分钟前
**发散创新:基于角色与属性的混合权限模型在微服务架构中的实战落地**在现代分布式系统中,
java·python·微服务·云原生·架构
与虾牵手42 分钟前
OpenClaw 和 AiPy 怎么选?2026 功能实测对比 + 踩坑全记录
python·ai编程