目录:
使用PyPDF2库
获取要合并的pdf文件的文件列表
使用PyPDF2合并pdf文档
一番今日
之前一番在免费知识星球给大家开发过一个在windows下使用的简单的pdf合并工具。其实用python去实现真的很简单,用了tkinter + PyPDF2 + pyinstaller
。
今天一番来解读下这个小工具怎么用python实现pdf文档合并的,而且合并完后还自带目录。
使用PyPDF2库
python里最大的好处就是封装了各种强大的轮子。同样,操作pdf也有强大的库,就是PyPDF2库。这里我们就是用的PyPDF2来实现读取pdf,然后合并pdf的。
def getFileName(filepath):
file_list = sorted(glob.glob("{}*.pdf".format(filepath) ),key=os.path.getmtime, reverse=False)
return file_list
sorted
函数:获取一个文件夹里的所有pdf文件的列表,并且以pdf文件的修改时间为排序,通过reverse
可以选择排序是否逆序。这样便获取到了所有要合并的pdf文件的列表了。
def MergePDF(filepath, fileNameList, outfile):
mergedDir = filepath + '/merged/'
if not (os.path.isdir(mergedDir)):
os.system('mkdir -p {}'.format(mergedDir))
output = PdfFileWriter()
outputPages = 0
for each_file in fileNameList:
print("adding %s" % each_file)
# 读取源pdf文件
input = PdfFileReader(open(each_file, "rb"))
# 如果pdf文件已经加密,必须首先解密才能使用pyPdf
if input.isEncrypted == True:
input.decrypt("map")
# 获得源pdf文件中页面总数
pageCount = input.getNumPages()
outputPages += pageCount
# 分别将page添加到输出output中
for iPage in range(pageCount):
output.addPage(input.getPage(iPage))
# 添加书签
output.addBookmark(
title=each_file[:-3].replace(filepath,''), pagenum=outputPages - pageCount)
print("All Pages Number: " + str(outputPages))
# 最后写pdf文件
outputStream = open(mergedDir + outfile, "wb")
output.write(outputStream)
outputStream.close()
print("finished")
PdfFileWriter
函数创建一个文件写入流。PdfFileReader
函数逐一读取pdf文件,并添加到上一步创建的文件写入流,并添加书签。就是这么简单。