「Python-PDF 专栏 」PyPDF2拆分PDF文件、合并单页面PDF、多页面PDF文件

文章目录

  • 一、本章前言
  • 二、PyPDF2 拆分PDF / 分割PDF
    • 1、完整代码
    • 2、处理结果
    • 3、代码解释
  • 三、PyPDF2 合并PDF文件(单页面的PDF文件)
    • 1、完整代码
    • 2、处理结果
    • 3、代码解释
  • 四、PyPDF2 合并多页面PDF文件
    • 1、完整代码
    • 2、处理结果
    • 3、代码解释

一、本章前言

笔者会力争将Python中所有关于PDF的操作讲的一清二楚,涵盖各种第三方库、标准库的使用说明,如果觉得还不错的话,麻烦给一个订阅哈~

在本章的讲解中,将对如何使用PyPDF2拆分/分割PDF、合并PDF,以及删除PDF中的指定页面进行讲解,希望能帮得到你。

在工作当中,有的时候确实会遇见上面的三种需求,而我们能找得到的大部分软件或工具,都会设置一个付费可用或开通VIP才可以使用,如果我们自己就能实现的话,为什么还要花这个冤枉钱呢?废话不多说,直接开始说干的。

二、PyPDF2 拆分PDF / 分割PDF

在这一节当中,我们的需求是将一个PDF分割成为若干个PDF,便于其余的操作,在某款强大的软件当中,这个功能是必需开通会员的,但是,我们用一段代码,就可以轻松实现了。
「Python-PDF 专栏 」PyPDF2拆分PDF文件、合并单页面PDF、多页面PDF文件_第1张图片

1、完整代码

我改一下以往的习惯,我先把代码全都贴出来,然后再解释一下可能需要解释的东西。

from PyPDF2 import PdfReader, PdfWriter  # 导入需要的模块
import os  # 导入操作系统模块

def split_pdf(input_pdf, start_page, end_page, output_folder):  # 定义一个函数,接受输入PDF文件、起始页、结束页和输出文件夹作为参数
    pdf_reader = PdfReader(input_pdf)  # 使用PdfReader打开输入的PDF文件

    for page_num in range(start_page - 1, end_page):  # 遍历指定的页码范围
        pdf_writer = PdfWriter()  # 创建一个PdfWriter对象
        pdf_writer.add_page(pdf_reader.pages[page_num])  # 将指定页添加到PdfWriter对象中

        output_pdf = os.path.join(output_folder, f'page_{page_num+1}.pdf')  # 构建输出文件的路径
        with open(output_pdf, 'wb') as output_file:  # 使用二进制写入模式打开输出文件
            pdf_writer.write(output_file)  # 将PdfWriter对象中的内容写入输出文件

input_pdf = r'E:\UserData\Desktop\123.pdf'  # 输入PDF文件的路径
output_folder = r'E:\UserData\Desktop\result'  # 输出文件夹的路径
start_page = 1  # 起始页码
end_page = 5  # 结束页码

split_pdf(input_pdf, start_page, end_page, output_folder)  # 调用split_pdf函数,按照指定的页码范围分割PDF并保存在输出文件夹中

利用上面的代码,就可以把一份完整的 PDF 按照页码进行分割,分割成为单独的页面,并保存到指定的文件夹当中了。

2、处理结果

我所处理的PDF文件一共包含有五个页面,我要做的是通过上面的代码,将这个PDF按照页数分成五份。第一张图为完整PDF的缩略图,第二张图为分割以后得文件列表。
「Python-PDF 专栏 」PyPDF2拆分PDF文件、合并单页面PDF、多页面PDF文件_第2张图片
「Python-PDF 专栏 」PyPDF2拆分PDF文件、合并单页面PDF、多页面PDF文件_第3张图片

3、代码解释

其实大部分的函数/命令在代码当中都有对应的注释进行讲解,我写教程追求事无巨细的把所有东西讲给阅读文章的每个人,所以如果你觉得这一部分你想了解的话,可以看一下,如果单纯只是想copy以下代码实现你要的功能,那这第三部分可以跳过去了哈。

  • PdfReader
    • 这个函数是PyPDF2库中的一个类,用于打开和读取PDF文件。我们只要给他传一个PDF的路径,他就会返回一个PdfReader对象,对象包含了PDF文件的内容和结构。
    • 在上面的代码中,使用 PdfReader(input_pdf) 来打开输入的PDF文件,并将返回的PdfReader对象赋值给了变量 pdf_reader。
  • PdfWriter
    • 这个函数也是PyPDF2库中的一个类,用于创建和写入PDF文件。可以使用它来创建新的PDF文件,并将页面添加到新的文件中。
    • 在我们的示例中,我们使用 PdfWriter() 来创建一个新的PdfWriter对象,并将其赋值给变量 pdf_writer。

说到这里你是不是就明白了?分割/拆分PDF,只是把我们的目标文件当中的每个页面读入内存,然后创建新的文件,把每页写入新文件,就完成了分割PDF的目的了。

三、PyPDF2 合并PDF文件(单页面的PDF文件)

在这一小节当中,我们的需求是将多个PDF文件合并成为一个文件,这个需求我刚好最近有碰到过,比如我们领导要求的是,让我去打印100个PDF,如果我每个PDF都打开,然后点击打印,我需要重复100遍这个操作,我完全可以全部合并为一个PDF,这样我打印一遍就可以了,同样,在某款功能强大的软件里面,它是需要开通VIP权限的,不然页数也有限制,钱省下来去吃烧烤不香吗?
「Python-PDF 专栏 」PyPDF2拆分PDF文件、合并单页面PDF、多页面PDF文件_第4张图片

1、完整代码

import os
import PyPDF2

# 创建一个PDF写入对象
pdf_writer = PyPDF2.PdfWriter()

# 指定目录
directory = 'E:\\UserData\\Desktop\\result'

# 遍历目录中的所有文件
for filename in os.listdir(directory):
    if filename.endswith('.pdf'):
        # 打开PDF文件并将页面添加到PDF写入对象中
        pdf_file = open(os.path.join(directory, filename), 'rb')  # 打开PDF文件
        pdf_reader = PyPDF2.PdfReader(pdf_file)  # 创建PDF读取对象
        for page_num in range(len(pdf_reader.pages)):  # 遍历PDF页面
            page = pdf_reader.pages[page_num]  # 获取页面
            pdf_writer.add_page(page)  # 将页面添加到写入对象中
        pdf_file.close()  # 关闭PDF文件

# 将合并后的PDF文件保存到目录中
output_file = open(os.path.join(directory, 'merged_file.pdf'), 'wb')  # 创建合并后的PDF文件
pdf_writer.write(output_file)  # 写入合并后的PDF文件
output_file.close()  # 关闭文件

在上面的代码当中,首先我们给一个目录,就是所有需要合并的PDF文件所在的位置,然后其余的都不用改动了。

2、处理结果

在下图中,红色框选文件是待合并的文件,蓝色框选文件是合并后的文件。
「Python-PDF 专栏 」PyPDF2拆分PDF文件、合并单页面PDF、多页面PDF文件_第5张图片

3、代码解释

  • os.listdir(directory): Python标准库内置的函数,用于返回指定目录中的文件和子目录的列表。在上面的代码中,我们用它返回指定目录里面PDF文件的列表,然后用于合并。

  • os.path.join(directory, filename): os模块中的一个函数,用于将多个路径组合成一个完整的文件路径。在上面的代码中,我们用它来创建PDF文件的完整目录。

  • open(file, mode): Python内置的函数,用于打开文件。在上面的代码中,我们用它打开PDF文件,以便后面的处理。

  • PyPDF2.PdfReader(pdf_file): PyPDF2库中的函数,用于创建一个PDF读取对象,读取PDF文件的内容,在分割PDF的那一部分当中我们也用到了。

  • pdf_writer.add_page(page): PyPDF2库中的函数,用于将页面添加到PDF写入对象中,以便合并多个PDF文件的内容。

  • pdf_writer.write(output_file): PyPDF2库中的函数,用于将合并后的PDF文件内容写入到指定的输出文件中。

四、PyPDF2 合并多页面PDF文件

在上一节当中,我们合并的是每个文件只有一个页面的PDF,本节我们来说一下每个文件有多个页面的PDF合并。

1、完整代码

import os  # 导入os模块,用于文件操作
import PyPDF2  # 导入PyPDF2库,用于处理PDF文件

# 创建一个PDF写入对象
pdf_writer = PyPDF2.PdfWriter()

# 指定目录
directory = 'E:\\UserData\\Desktop\\result'  # 设置要处理的目录

# 遍历目录中的所有PDF文件
for filename in os.listdir(directory):  # 遍历指定目录中的文件
    if filename.endswith('.pdf'):  # 如果文件是以.pdf结尾的PDF文件
        # 打开PDF文件并将页面添加到PDF写入对象中
        pdf_file = open(os.path.join(directory, filename), 'rb')  # 以只读二进制模式打开PDF文件
        pdf_reader = PyPDF2.PdfReader(pdf_file)  # 创建PDF读取对象
        for page_num in range(len(pdf_reader.pages)):  # 遍历PDF页面
            page = pdf_reader.pages[page_num]  # 获取页面
            pdf_writer.add_page(page)  # 将页面添加到写入对象中
        pdf_file.close()  # 关闭PDF文件

# 将合并后的PDF文件保存到目录中
output_file = open(os.path.join(directory, 'merged_file.pdf'), 'wb')  # 以只写二进制模式打开合并后的PDF文件
pdf_writer.write(output_file)  # 将合并后的PDF写入到文件中
output_file.close()  # 关闭文件

2、处理结果

下图中蓝色框选的文件为其余几个文件按顺序合并后的文件,其余几个文件都是包含3-5个页面的PDF。
「Python-PDF 专栏 」PyPDF2拆分PDF文件、合并单页面PDF、多页面PDF文件_第6张图片

3、代码解释

基本上用到的函数,都在之前已经说明过了,所以这里就不在赘述相同的内容了。

你可能感兴趣的:(Python-PDF,python,pdf)