前言
我们在学习和工作中经常会遇到对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函数
上面的代码替换文件路径后可以直接复制粘贴使用