创建tkinter窗口
可生成exe
选择多个pdf文件,或者某个文件夹
# 作为模块使用
# main(tk.Frame),给一个tk框架
import random
import tkinter as tk
import tkinter.messagebox
import tkinter.filedialog
from PyPDF2 import PdfFileMerger, PdfFileReader
import os
merge_file_list = []
Page_Num = []
Pages_Num = []
pages = 0
file_types = [('PDF文件', '.pdf')]
def select_file():
file_selected = tk.filedialog.askopenfilenames(filetypes=file_types)
if file_selected != '':
write2list(file_selected)
def select_folder():
folder_selected = tk.filedialog.askdirectory()
folder_file = []
if folder_selected != '':
files_selected = [file for file in os.listdir(folder_selected) if file.endswith('.pdf')]
if not files_selected:
tkinter.messagebox.showinfo('操作提示', '所选文件夹不含PDF文件')
else:
for file in files_selected:
file = os.path.join(folder_selected, file)
folder_file.append(file)
write2list(folder_file)
def write2list(files):
global file_list
file_list.delete('1.0', 'end')
for file in files:
file = file.replace('/', '\\')
merge_file_list.append(file)
for i in merge_file_list:
file_list.insert('end', i + '\n')
clear2()
def select_save_path():
save_path_selected = tk.filedialog.asksaveasfilename(initialdir=os.getcwd(), defaultextension='*.pdf',
filetypes=file_types)
save_path_selected = save_path_selected.replace('/', '\\')
save_path.set(save_path_selected)
def clear():
global save_entry
# global file_list,save_path
file_list.delete('1.0', 'end')
file_list.insert('end', '请选择要合并的PDF文件' + '\n')
merge_file_list.clear()
merge_btn['state'] = 'disable'
save_btn['state'] = 'disable'
save_entry['state'] = 'disable'
def clear2():
global save_entry
random_save = os.getcwd() + '\\' + '合并文件' + str(random.randint(0, 9999)) + '.pdf'
save_path.set(random_save)
merge_btn['state'] = 'normal'
save_btn['state'] = 'normal'
save_entry['state'] = 'normal'
def merge_pdf():
global pages
hb = PdfFileMerger()
read_pdf = PdfFileReader
for pdf in merge_file_list:
print(pdf)
hb.append(pdf, import_bookmarks=False)
pdf_page = len(read_pdf(pdf).pages)
pages_n = pages + pdf_page
Pages_Num.append(pdf + '\t\t' + '页码索引' + str(pages + 1) + '~' + str(pages_n))
pages += pdf_page
Page_Num.append(pdf_page)
print(Pages_Num)
hb.write(save_path.get())
tkinter.messagebox.showinfo('操作提示', '合并成功')
index_save = save_path.get().replace('.pdf', '---页码索引.txt')
with open(index_save, 'w', encoding='utf-8') as f:
for i in Pages_Num:
f.write(i + '\n')
global file_list, save_path, merge_btn, save_btn, save_entry
# if __name__ == '__main__':
def main(win):
global file_list, save_path, merge_btn, save_btn, save_entry, pages
win.place(x=10, y=10)
add_file_btn = tk.Button(win, text='添加文件', command=select_file)
# add_file_btn = tk.Button(win, text='添加文件', command=select_file)
add_folder_btn = tk.Button(win, text='添加文件夹', command=select_folder)
clear_btn = tk.Button(win, text='清除所选文件', command=clear)
# text_list = tk.StringVar
file_list = tk.Text(win)
save_label = tk.Label(win, text='保存位置:')
save_path = tk.StringVar()
save_entry = tk.Entry(win, textvariable=save_path, width=45)
save_btn = tk.Button(win, text='选择保存位置', command=select_save_path)
merge_btn = tk.Button(win, text='合并', command=merge_pdf)
# tk.Label(win, text='PDF合并软件').place(x=10, y=2)
add_file_btn.place(x=10, y=10)
add_folder_btn.place(x=100, y=10)
clear_btn.place(x=200, y=10)
file_list.place(x=10, y=50)
save_label.place(x=10, y=400)
save_entry.place(x=70, y=400)
save_btn.place(x=420, y=395)
merge_btn.place(x=520, y=395)
clear()
win.mainloop()
win3 = tk.Tk()
win3.title('PDF文件合并软件')
win2 = tk.Frame(win3, width=600, height=600)
a = win3.winfo_screenwidth()
b = win3.winfo_screenheight()
c = (a - 605) / 2
d = (b - 500) / 2
# 使窗口在屏幕中间位置
win3.geometry('605x500+%d+%d' % (c, d))
win3.resizable(height=False, width=False)
main(win2)