用Python合并多个PDF文件,并且用原来每个PDF的文件名作为书签,且书签显示页码范围(全网首发)
import os
import os.path
from PyPDF2 import PdfFileReader, PdfFileWriter
import time
##########################找到 filepath 下的所有pdf,将地址返回########################
def getFileName(filepath):
    list1=[]
    for root, dirs, files in os.walk(filepath, topdown=False):
        for name in files:
            if name.endswith(".pdf"):
                list1.append(os.path.join(root, name))
    return list1
##########################合并同一个文件夹下所有PDF文件########################
def MergePDF(filepath, outfile):
    output = PdfFileWriter()
    outputPages = 0
    pdf_fileName = getFileName(filepath)
    for each_file in pdf_fileName:
        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
        print("%s has %d pages" % (each_file, pageCount))
        # 分别将page添加到输出output中
        for iPage in range(pageCount):
            output.addPage(input.getPage(iPage))
        # 添加书签,以pdf名字命名书签,并且有书签名中带页码范围
        x=outputPages-pageCount
        output.addBookmark(
            title=each_file.split("\\")[-1]+str(x+1)+'-'+str(x+pageCount),pagenum=x)
    print("All Pages Number: " + str(outputPages))
    # 最后写pdf文件
    outputStream = open(os.path.join(filepath, outfile), "wb")
    output.write(outputStream)
    outputStream.close()
    print("finished")
if __name__ == '__main__':
    time1 = time.time()
    # 这里保存pdf文件的目录    
    file_dir =r'C:\Yodao\pdfs' 
    # 这里保存生成文件的名字
    out = u"合并结果.pdf"  #会输出到同个文件夹下
    #这个函数会遍历要求目录下的所有文件,将以  .pdf 结尾的所有pdf合并成一个新的pdf,并保存在 file_dir 目录下
    MergePDF(file_dir, out)
    time2 = time.time()
    print(u'总共耗时: %.4f s' % (time2 - time1))
合并后的PDF书签,如下:

 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号