python实现pdf文档合并

目录:

使用PyPDF2库

获取要合并的pdf文件的文件列表

使用PyPDF2合并pdf文档

一番今日

之前一番在免费知识星球给大家开发过一个在windows下使用的简单的pdf合并工具。其实用python去实现真的很简单,用了tkinter + PyPDF2 + pyinstaller。 今天一番来解读下这个小工具怎么用python实现pdf文档合并的,而且合并完后还自带目录。

使用PyPDF2库

python里最大的好处就是封装了各种强大的轮子。同样,操作pdf也有强大的库,就是PyPDF2库。这里我们就是用的PyPDF2来实现读取pdf,然后合并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文件的列表了。

使用PyPDF2合并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")
  • 这里先建一个存放合并后文档的目录。
  • 用PyPDF2库里的PdfFileWriter函数创建一个文件写入流。
  • 用PyPDF2库里的PdfFileReader函数逐一读取pdf文件,并添加到上一步创建的文件写入流,并添加书签。
  • 将文件写入流写入pdf文件。

就是这么简单。

原文发布于微信公众号 - 一番码客(efonfighting)

原文发表时间:2019-10-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券