用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书签,如下:

 

posted @   uuxyz  阅读(323)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
联系我
点击右上角即可分享
微信分享提示