用python合并pdf文件,基于tkinter+PyPDF。

 1 from tkinter import *
 2 from pathlib import Path
 3 from tkinter.messagebox import *
 4 from PyPDF2 import PdfFileMerger, PdfFileReader, PdfFileWriter
 5 
 6 
 7 # 对文件夹名为:src_floder 文件合并
 8 def mergePdf(src_folder: str, des_file: str) -> str:
 9     """
10     :param src_folder: 需要合并pdf的文件见      str
11     :param des_file: 合并后的文件地址文件名.pdf  str
12     :return:
13     """
14     file_list = list(Path(src_folder).glob('*.pdf'))
15     merger = PdfFileMerger()
16     # print(file_list)
17     outputPages = 0
18     for pdf in file_list:
19         inputfile = PdfFileReader(str(pdf))
20         merger.append(inputfile)
21         pagecounts = inputfile.getNumPages()
22         print(f'{pdf.name}页数:{pagecounts}')
23         outputPages += pagecounts
24     merger.write(des_file)
25     merger.close()
26     print(f'合并后页数为{outputPages}')
27     return des_file
28 
29 
30 # 合并事件
31 def merge():
32     content = entry1.get()
33     print(content)
34     path = Path(content)
35     if not path.is_dir():
36         showerror('错误提醒', '输入文件路径错误,请重新输入')
37     else:
38         files = path.glob('*.pdf')
39         files_path = [i.name for i in files if not i.name.startswith("~$")]
40         back = askokcancel('确认信息',
41                            f'合并文件夹目录为:{path} \n 文件包括:\n{files_path}')
42         if back:
43             if len(files_path) < 2:
44                 showinfo('提醒', '文件数目少于两个无需合并')
45             else:
46                 file_path = mergePdf(str(path), str(path / 'merge.pdf'))
47                 showinfo('finish', f'完成\n文件目录:{file_path}')
48 
49     ...
50 
51 
52 win = Tk()
53 win.title('合并pdf文件')
54 win.geometry('300x185+500+300')
55 Label(win, text='请输入需要合并pdf文件目录:', font=10).pack(pady=10, padx=10, anchor='nw')
56 entry1 = Entry(win)
57 entry1.pack(pady=10, padx=10, fill='x')
58 # 输入合并后pdf文件名
59 # Label(win, text='合并后文件名:', font=10).pack(pady=10, padx=10, anchor='nw')
60 # entry2 = Entry(win)
61 # entry2.pack(pady=10, padx=10, fill='x')
62 Button(win, text='确定', command=merge, font=10).pack(pady=10, anchor='s')
63 
64 win.mainloop()

可以打包直接使用

posted @ 2021-08-10 10:00  ZaneEli  阅读(155)  评论(0编辑  收藏  举报