前言

        我们在学习和工作中经常会遇到对PDF文件的一些编辑需求,例如在整理pdf文件时需要把多个pdf文件进行合并,或者提取某个pdf文件中某些页面。这时如果你想到用python来解决这些个问题,那么下面就给出大家一些我的处理方法,以供参考。

# 导入相关库
import os, PyPDF2, re
from PyPDF2 import PdfFileMerger

#合并pdf函数
def connect_pdf():

    # 将需要合并的pdf文件放到一个文件夹中,最好按顺序1.pdf,2.pdf,3.pdf....类似命名
    target_path = r'D:\待合并文件'

    # 使用os.listdir方法获取制定目录下的所有pdf文件名称(获取文件名以.pdf结尾的文件)
    pdf_lst = [f for f in os.listdir(target_path) if f.endswith('.pdf')]

    # 把字符串按数字顺序再排序(这个就是把需要合并文件按数字顺序命名的原因)
    # 下面的正则表达式是获取文件名中的数字,再以数字从小到大排序需要合并的文件
    pdf_lst.sort(key = lambda i:int(re.match(r'(\d+)', i).group()))

    # 使用os.path.join方法拼接成绝对路径
    pdf_lst = [os.path.join(target_path, filename) for filename in pdf_lst]

    # 创建PdfFileMerger对象,这是专门用来合并pdf文件的对象
    file_merger = PdfFileMerger()
    for pdf in pdf_lst:
        file_merger.append(pdf)     # 合并pdf文件
        print(pdf, "合并成功!!")

    # 使用write方法将所有pdf文件写入到一个文件
    file_merger.write(r"C:\Users\Desktop\合并后文件.pdf")


# 读取pdf指定页面
def get_Specify_pdfs():

    # 需要获取页面的目标pdf文件
    path = r"C:\Users\Desktop\target.pdf"

    # 使用with open()的方式打开文件可以不用手动关闭文件对象
    with open(path, "rb") as  fp1:  # 以读二进制模式打开pdf文件

        # 调用PyPDF2.PdfFileReader()方法,获取该PDF的PdfFileReader对象
        pdfreader = PyPDF2.PdfFileReader(fp1)    

        # 该pdf文档的总页数保存在 PdfFileReader 对象的 numPages 属性中,打印页数
        print("该pdf文件总页数是:%s 页!" % pdfreader.numPages)
        
        # 新建一个PdfFileWriter对象,它表示一个空白的PDF文档对象,用来写入目标pdf
        pdfWriter = PyPDF2.PdfFileWriter()  # PdfFileWriter对象

        # 通过getPage()方法获取想要的pdf页,生成Page对象
        page_one = pdfreader.getPage(0) # 获取pdf的第一页
        pdfWriter.addPage(page_one)     # 把Page对象添加到PdfFileWriter对象中

        # 假如要获取pdf文件的3,6,9页
        # page_list = [2, 5, 8]
        # for num in page_list:
        #     page_one = pdfreader.getPage(num)
        #     pdfWriter.addPage(page_one)     # 把Page对象添加到PdfFileWriter对象中

        # 打开一个pdf的输出路径
        with open(r"C:\Users\Desktop\提取后文件.pdf", 'wb') as fp2:
            pdfWriter.write(fp2)  # 把PdfFileWriter对象的内容保存到文件中
            print("pdf文件生成成功!")
if __name__ == "__main__":

    # 调用相应函数
    connect_pdf()    # 调用合并pdf函数
    get_Specify_pdfs()    # 调用提取pdf函数

        上面的代码替换文件路径后可以直接复制粘贴使用