安装
pypdf2是一个非标准库,因此需要自行安装,安装过程并不困难,Windows/Mac用户均可以在命令行(CMD)/终端(Terminal)中使用pip安装
pip install pypdy2
PDF基本操作
PyPDF2 导入模块的代码常常是:
from PyPDF2 import PdfFileReader, PdfFileWriter
PdfFileReader 可以理解为读取器
PdfFileWriter可以理解为写入器
PDF合并
以下内容是基于pypdf2 v3.0.0版本
from PyPDF2 import PdfWriter, PdfReader
import os
dir_path = str(input ('请输入需要合并的PDF所在的文件夹绝对地址,该文件夹中仅有需要合并的PDF:') ) #将需要合并的pdf全部放在一个空的任意文件夹中,并将这个地址录入到这里
#使用os模块遍历目标文件夹中的所有文件,并存到file_list中
def GetFileName(dir_path):
file_list = [os.path.join(dirpath, filesname)
for dirpath, dirs, files in os.walk(dir_path)
for filesname in files]
return file_list
def merge_pdfs(file_list, output_path):
#创建一个pdfwriter对象来保存合并后的pdf文件
output = PdfWriter()
#遍历要合并的pdf文件列表,并逐个读取并添加到输出对象中
for pdf_file in file_list: #遍历文件列表
input = PdfReader(open(pdf_file, "rb")) #以二进制打开pdf文件
for page in input.pages: #遍历每一页
output.add_page(page) #将每一页输出到合并文件中
#将输出对象保存为一个新的pdf文件
with open(output_path, "wb") as f:
output.write(f)
# 要合并的PDF文件列表
file_list = GetFileName(dir_path)
# 合并后的PDF文件路径
output_path = "%s\进阶合并后.pdf" % dir_path
merge_pdfs(file_list, output_path)
执行后输入地址
打开文件夹查看合并的文件
PDF拆分
以下内容是基于pypdf2 v3.0.0版本
from PyPDF2 import PdfReader, PdfWriter
path = str(input('请输入需要拆分的文件所在的绝对路径(不含文件名)'))
pdf_reader = PdfReader(path + '\\' + str(input('请输入需要拆分的文件名(需带.pdf)')))
for page in range(len(pdf_reader.pages)):
# 遍历到每一页挨个生成写入器
pdf_writer = PdfWriter()
pdf_writer.add_page(pdf_reader.pages[page])
# 写入器被添加一页后立即输出产生pdf
with open(path + '\拆分_{}.pdf'.format(page + 1), 'wb') as out:
pdf_writer.write(out)
执行后输入地址和文件名
打开文件夹查看
PDF添加水印
from PyPDF2 import PdfReader, PdfWriter
from copy import copy
path = str(input('请输入需要插入水印的文件所在的绝对路径(不含文件名):\n'))
pdf_reader = PdfReader(path + '\\' + str(input('请输入需要插入水印的文件名(需带.pdf):\n')))
watermark_reader = PdfReader(path + '\\' + str(input('请输入同文件夹下水印的文件名(需带.pdf):\n')))
watermark_page = watermark_reader.pages[0] #将水印文件的第一页作为水印
pdf_writer = PdfWriter() #打开pdfwriter
for page in range (len(pdf_reader.pages)): #遍历需要插入水印的文件
origin_page = pdf_reader.pages[page] #从源文件中提取遍历当期页
new_page = copy(watermark_page) #新建页面且复制水印页
new_page.merge_page(origin_page) #将提取出来的当前页和水印页融合
pdf_writer.add_page(new_page) #pdfwriter添加当前融合后的页面
with open(path + r'\\水印后.pdf','wb') as out:
pdf_writer.write(out)