用Python合并多个PDF文件,并且用原来每个PDF的文件名作为书签,且书签显示页码范围(全网首发)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | 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书签,如下:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)