欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

基于tkinter的PDF合并小工具

程序员文章站 2022-06-23 12:07:28
前言发现听网课的时候多个pdf看起来并不是很方便,加上日常生活需要使用多个pdf合并成一个pdf方便传送和阅读,于是用python制作一款个人小工具!打包后测试使用效果:pdf合并之前:[pdf合成后链接](https://gitee.com/wzc20001115/lures2020-demos/raw/master/2020_11_28_PDF%E6%96%87%E4%BB%B6%E5%90%88%E5%B9%B6%E5%B0%8F%E5%B7%A5%E5%85%B7/images/%E5...

前言

发现听网课的时候多个pdf看起来并不是很方便,加上日常生活需要使用多个pdf合并成一个pdf方便传送和阅读,于是用python制作一款个人小工具!

打包后

基于tkinter的PDF合并小工具

测试使用效果:

pdf合并之前:
基于tkinter的PDF合并小工具
pdf合成后:
基于tkinter的PDF合并小工具

源代码:

"""
    功能:1)可以通过鼠标形式勾选想要处理的文件夹
         2)可以选择性合并多个pdf文件
         3)可以通过鼠标形式导出到相应的目录
"""
from tkinter import *
from tkinter.filedialog import askopenfilenames,asksaveasfilename
from tkinter import messagebox
import threading
from PyPDF2 import PdfFileReader, PdfFileWriter

# 1、添加选择目标文件集,以元组形式返回所有的文件名
def selectPath():
    my_list = []
    path_ = askopenfilenames()
    path.set(path_)
    my_list.append(path_)
    return my_list

# 2、添加多线程,避免界面卡顿
def thread_it(func):
    '''将函数打包进线程'''
    # 创建
    t = threading.Thread(target=func)
    # 守护 !!!
    t.setDaemon(True)
    # 启动
    t.start()

# 3、添加窗口说明菜单
def about():
    messagebox.showinfo('提示', '本应用写于2020年11月28日,制作人lures!')

# 4、添加保存pdf到目标目录
def savePdf():
    my_list = []
    path_ = asksaveasfilename()
    save.set(path_)
    my_list.append(path_)
    return my_list

# 5、添加pdf合并功能
def merge():
    # 手动选择输出文件的路径
    output = PdfFileWriter()
    outputPages = 0
    pdf_fileName = savePdf()[0]
    my_list = selectPath()
    # [('D:/lures2020-demos/2020_12_神经网络与深度学习Tensorflow2.0实战/课件/0 课程概述.pdf', 'D:/lures2020-demos/2020_12_神经网络与深度学习Tensorflow2.0实战/课件/1.1 人工智能的诞生.pdf')]
    # 以元组的形式呈现,my_list[0][0]/my_list[0][1]这样获取每一个pdf文件
    for i in range(len(my_list[0])):
        # 读取源pdf文件
        input_file = PdfFileReader(open(my_list[0][i],"rb"))
        # 获得源pdf文件中页面总数
        pageCount = input_file.getNumPages()
        outputPages += pageCount
        # 分别将page添加到输出output中
        for ipage in range(pageCount):
            output.addPage(input_file.getPage(ipage))
    outputStream = open(pdf_fileName,"wb")
    output.write(outputStream)
    outputStream.close()
    messagebox.showinfo("提示!","完成合并!祝您生活愉快~")

# 6、添加使用说明文件
def use_function():
    messagebox.showinfo('提示', '使用说明如下:\n首先,需要选择合并PDF后保存的路径及名称(记为:text)\n其次,会弹出一个框让你选择一个要合并的多个PDF文件\n最后,完成合并后会在目标目录生成text\n完成合并后,会弹出一个框显示已经完成合并')

# 开始构造整体框架
if __name__ == '__main__':
    root = Tk()
    path = StringVar()
    save = StringVar()              # 保存路径
    root.title("PDF合并小工具")
    root.geometry('370x120+800+400')
    root.resizable(0, 0)
    # 显示内容部分
    label1 = Label(root, text='目标路径:', font=("仿宋", 12)).grid(row=0, column=0, sticky='e')
    entry1 = Entry(root, textvariable=path, width='30').grid(row=0, column=1)
    label2 = Label(root, text='保存路径:', font=("仿宋", 12)).grid(row=1, column=0, sticky='e')
    entry2 = Entry(root, textvariable=save,width='30').grid(row=1, column=1)
    Label(root, text="").grid(row=2, column=1)
    button1 = Button(root, text="合并PDF", font=("仿宋", 12), command=lambda :thread_it(merge)).grid(row=3, column=0,sticky='e')
    button2 = Button(root, text="退出Exit", font=("仿宋", 12), command=root.quit).grid(row=3, column=2, sticky='w')
    label3 = Label(root, text="lures友情出品,欢迎致电2142781703~~~", font=("仿宋", 10)).grid(row=4, columnspan=3, sticky='e')
    # 添加窗口栏菜单
    menu1 = Menu(root)
    menu1.add_command(label="About", command=about)
    menu1.add_command(label="使用说明", command=use_function)
    root.config(menu=menu1)
    root.mainloop()

从10点多到12点到花了不久时间制作的!具体文档见:点我跳转
原创文章,转载标注来处,谢谢!
微信公众号:空谷小莜蓝
大三学生,准备考研,无心聊天!)

本文地址:https://blog.csdn.net/weixin_43862765/article/details/110267466