1.导入需要的模块。
#导入模块
import os
from PyPDF2 import PdfFileReader,PdfFileMerger
2.编写函数,我这里命名为Merge_PDF,函数里有两个参数src是文件所在的目录,dest是文件合并后保存的文件名。通过遍历目录得到目录下所有符合条件的文件名后,拼接成完整的文件路径保存到pdf_files列表。
def Merge_PDF(src,dest):
#遍历目录下符合条件的所有文件
pdf_files = []
for root,dirs,files in os.walk(src):
for name in files:
if name.endswith('.pdf'):
file = os.path.join(root,name)
pdf_files.append(file)
for name in dirs:
if name.endswith('.pdf'):
file = os.path.join(root,name)
pdf_files.append(file)
3.创建PdfFileMerger实例化对象,然后遍历pdf_files列表,读取列表内的文件后合并成一个文件,读取时加了一个判断,忽略加密的文件和读取错误的文件。最后,保存合并后的文件。
#创建PdfFileMerger实例化对象
pdf_merge = PdfFileMerger()
#遍历读取文件后合并成一个文件,忽略加密的文件和读取错误的文件
for file in pdf_files:
try:
with open(file,'rb') as fp:
pdf = PdfFileReader(fp)
if pdf.isEncrypted:
print(f'忽略加密文件:{file}')
continue
pdf_merge.append(pdf,import_bookmarks=True)
except Exception as e:
print(f'错误:{e}')
pass
#保存文件
pdf_merge.write(f'{src}{dest}.pdf')
pdf_merge.close()
4.调用函数
if __name__ == "__main__":
#指定参数
src = input("待合并的文件所在目录:").strip()
dest = input("合并后保存的文件名:").strip()
#调用函数
Merge_PDF(src,dest)
5.以下是效果:
运行代码后,会将源目录下所有的pdf文件合并后存到目标目录。