CodeGym /课程 /Python SELF ZH /拆分PDF文档页面以保存单独的部分

拆分PDF文档页面以保存单独的部分

Python SELF ZH
第 43 级 , 课程 4
可用

1. 拆分PDF文档为页面

使用PyPDF2拆分PDF文档的基础

PyPDF2 提供了一个 PdfReader 类,用于打开PDF文件和读取页面,还有一个 PdfWriter 类 用于将页面写入新的PDF文档。要将文档拆分为单独的页面,可以使用 add_page() 方法 在 PdfWriter 中保存所需页面到单独的文件中。

将每页PDF保存为单独的文档

下面的代码将文档拆分为单独的PDF文件,每页保存为一个新的文件。

Python

import PyPDF2

# 打开PDF文件
with open("sample.pdf", "rb") as pdf_file:
    pdf_reader = PyPDF2.PdfReader(pdf_file)
    
    # 遍历每页
    for page_num in range(len(pdf_reader.pages)):
        pdf_writer = PyPDF2.PdfWriter()
        
        # 提取页面并添加到新的PDF
        page = pdf_reader.pages[page_num]
        pdf_writer.add_page(page)
        
        # 保存当前页面为单独的PDF文件
        output_filename = f"page_{page_num + 1}.pdf"
        with open(output_filename, "wb") as output_file:
            pdf_writer.write(output_file)

print("每一页已保存为单独的文件。")

在这个示例中,原始文档的每一页被分别保存为 page_1.pdf, page_2.pdf 等文件。

2. 提取页面范围

有时候你可能只需要保存某些页面范围,比如第1到5页。为此,可以在循环中指定具体的页面。

Python

import PyPDF2

with open("sample.pdf", "rb") as pdf_file:
    pdf_reader = PyPDF2.PdfReader(pdf_file)
    pdf_writer = PyPDF2.PdfWriter()
    
    # 定义页面范围,例如第1到5页
    start_page = 1
    end_page = 5
    
    for page_num in range(start_page - 1, end_page):  # 页码从0开始
        page = pdf_reader.pages[page_num]
        pdf_writer.add_page(page)

    # 保存页面范围为新的PDF
    with open("pages_1_to_5.pdf", "wb") as output_file:
        pdf_writer.write(output_file)

print("页面范围已成功保存。")

此代码提取第1到5页并保存为文件 pages_1_to_5.pdf

3. 保存多个页面范围

如果需要提取多个页面范围并将其保存为单独的文件,可以使用接受开始和结束范围的函数。

Python

import PyPDF2

def save_page_range(input_pdf, output_pdf, start_page, end_page):
    with open(input_pdf, "rb") as pdf_file:
        pdf_reader = PyPDF2.PdfReader(pdf_file)
        pdf_writer = PyPDF2.PdfWriter()
        
        for page_num in range(start_page - 1, end_page):
            page = pdf_reader.pages[page_num]
            pdf_writer.add_page(page)

        with open(output_pdf, "wb") as output_file:
            pdf_writer.write(output_file)
    
    print(f"第{start_page}–{end_page}页已保存为 {output_pdf}")

# 使用该函数提取不同的页面范围
save_page_range("sample.pdf", "section_1.pdf", 1, 3)
save_page_range("sample.pdf", "section_2.pdf", 4, 6)

此代码创建了两份保存第1到3页和第4到6页的文件,它们被分别保存为 section_1.pdfsection_2.pdf

4. 批量处理PDF文档

自动拆分文件夹中所有PDF文件的页面

如果需要拆分一个文件夹中所有PDF文档的每一页,可以编写一个脚本来自动处理每个文件。

Python

import PyPDF2
import os

# PDF文件夹路径
folder_path = "pdf_folder"

# 自动拆分文件夹中的所有PDF文件
for filename in os.listdir(folder_path):
    if filename.endswith(".pdf"):
        file_path = os.path.join(folder_path, filename)
        with open(file_path, "rb") as pdf_file:
            pdf_reader = PyPDF2.PdfReader(pdf_file)
            
            # 将文件拆分为单独的页面
            for page_num in range(len(pdf_reader.pages)):
                pdf_writer = PyPDF2.PdfWriter()
                page = pdf_reader.pages[page_num]
                pdf_writer.add_page(page)
                
                # 创建输出文件名
                output_filename = f"{filename[:-4]}_page_{page_num + 1}.pdf"
                output_path = os.path.join(folder_path, output_filename)
                
                # 保存页面
                with open(output_path, "wb") as output_file:
                    pdf_writer.write(output_file)

print("所有PDF文件的页面均已成功保存。")

此脚本会自动处理文件夹 pdf_folder 中的每个PDF文件,并将每页保存成单独的PDF文件, 格式为 <文件名>_page_<页码>.pdf

5. 为什么需要拆分PDF文件?

如某位伟大的开发者所言(经过几小时的编码后我们都深有同感),常常会问自己“为什么?”。拆分PDF文档 在许多场景下是有用的:

  • 提取关键页面: 只分享需要的页面,不用把整本《战争与和平》都发给同事。
  • 创建合集: 将不同文档中的重要章节保存成一个文件,方便学习或工作。
  • 归档: 按页面存档重要数据,这样就不会让不必要的页面浪费存储空间。

这时候,PyPDF2就像是英雄一样登场,让你的生活更简单!

6. 常见问题及应对方法

处理PDF文档时,你可能会遇到一些问题。例如,PyPDF2中的页面编号从零开始,因此在指定页面时不要忘记这一点。 毕竟,没有什么比提取错误的页面更让人头疼的了!

同时,在处理文件的打开和关闭时,确保所有 close() 都正确调用。 一个未关闭的文件可能会带来麻烦,尤其当它是一本《Oracle指南》的时候。

实际应用场景

这种方法的应用不仅限于个人文档处理。例如,如果你在律师事务所工作,需要快速准备庞大案件文件中的某些部分用于法庭, 拆分PDF文件可以显著节省时间和精力。

类似的技术也可以用于准备教学材料,从技术报告中提取重要部分等等。这些方法的真正魔力在于,它们可以轻松自动化日常任务!

1
调查/小测验
使用 PyPDF2 读取 PDF 文件第 43 级,课程 4
不可用
使用 PyPDF2 读取 PDF 文件
使用 PyPDF2 读取 PDF 文件
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION