合并PDF文件

前面介绍了PDF文件的分割,把一个文件分割成多个文件。这节课介绍文件的合并,反过来进行操作,把多个文件再合并成一个文件。

下面的代码将pdfs目录下的所有PDF文件进行合并。

code.python
>>> import os,pathlib
>>> from PyPDF2 import PdfReader,PdfWriter
>>> pdf_writer=PdfWriter()
>>> for root,dirs,files in os.walk('D:\\pdfs'):
    for file in files:
        if pathlib.Path(os.path.join(root,file)).suffix=='.pdf':
            #合并PDF
            pdf_reader=PdfReader(os.path.join(root,file))
            for p in range(len(pdf_reader.pages)):
                 pdf_writer.add_page(pdf_reader._get_page(p))
>>> with open('D:\\pdfs\\all.pdf','wb') as pdf:
    pdf_writer.write(pdf)

首先用PdfWriter的构造函数进行初始化,生成一个PdfWriter对象。然后是一个嵌套的for循环,就是处理的核心内容。

用os模块的walk函数得到指定目录,就是上一节分割时保存文件的的D盘下的PDFS目录,一共返回三部分,包括它下面的目录、所有子目录、所有文件。待会儿要用到目录和文件部分。然后对所有文件里面的每一个文件做一个遍历,对每一个文件做下面的处理。

首先判断它的后缀是不是.pdf,是不是一个PDF文件。这里用到了pathlib包的Path函数,得到一个完整的路径,返回一个Path对象,判断Path对象的suffix属性值是不是.pdf这个字符串,如果是,那么它是一个PDF文件。

如果是PDF文件,就把它添加到PdfWriter对象里面。首先要读取这个文件,用PdfReader构造函数把它读取出来,然后对于这里面的每一页,逐页的添加到这个PdfWriter对象里面。最后就是所有文件的所有页面全部挨个添加,添加到这个PdfWriter里面,然后把它写入到一个同一个目录下面的2.pdf这个PDF文件里面,进行保存。

现在D盘下的PDFS这个目录下面有一个2.pdf。这个PDF文件一共有五页,这五页就是把前面的0.pdf、1.pdf一直到4.pdf合并得到的,合并成一个完整的PDF文件。