python gui 实现多个pdf文件合并成一个文件

这是gui截图,汉字都能看懂吧

上代码之前需要安装两个库

pip install PyPDF2
pip install PySimpleGUI

 然后直接运行代码

import os
from PyPDF2 import PdfReader, PdfWriter
import PySimpleGUI as sg
import tkinter as tk
from tkinter import filedialogdef GetFileName():root = tk.Tk()root.withdraw()file_list = filedialog.askopenfilenames(filetypes=[("PDF files", "*.pdf")])file_list = list(file_list)file_list.sort()return file_listdef MergePDF(file_list, output_dir, file_name):output = PdfWriter()outputPages = 0print(file_list)for pdf_file in file_list:print("文件:%s" % pdf_file.split('/')[-1], end=' ')# 读取PDF文件input = PdfReader(open(pdf_file, "rb"))# 获得源PDF文件中页面总数pageCount = len(input.pages)outputPages += pageCountprint("页数:%d" % pageCount)# 分别将page添加到输出output中for iPage in range(pageCount):output.add_page(input.pages[iPage])print("\n合并后的总页数:%d" % outputPages)# 写入到目标PDF文件print("PDF文件正在合并,请稍等......")with open(os.path.join(output_dir, file_name + ".pdf"), "wb") as outputfile:output.write(outputfile)print("PDF文件合并完成")# 创建GUI界面
layout = [[sg.Text('请选择要合并的多个PDF文件:')],[sg.Input(key='file_list'), sg.Button('浏览')],[sg.Text('请选择合并后的目标文件保存路径:')],[sg.Input(key='output_dir'), sg.FolderBrowse('浏览')],[sg.Text('请输入合并后的目标文件名前缀:')],[sg.Input(key='file_name'), sg.Text('.pdf', font=('Arial', 12))],[sg.Button('合并'), sg.Button('退出')]
]window = sg.Window('PDF合并器', layout)# 处理用户事件和输入
while True:event, values = window.read()if event == sg.WINDOW_CLOSED or event == '退出':breakelif event == '浏览':file_list = GetFileName()window['file_list'].update(';'.join(file_list))elif event == '合并':file_list = values['file_list'].split(';')output_dir = values['output_dir']file_name = values['file_name']if file_list and output_dir and file_name:try:MergePDF(file_list, output_dir, file_name)sg.popup('合并成功!')except Exception as e:sg.popup('合并失败!', str(e))else:sg.popup('请输入有效的路径和文件名!')window.close()

注意:

一次运行的时候,会有像安装软件的界面,第一个界面 下面 打勾,确定。然后再弹出的界面 点击‘free’ 免费使用的选项。然后就弹出合并pdf的界面了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/598999.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

八数码问题(bfs)

方式一:string存储状态 题目传送门:845. 八数码 - AcWing题库 BFS适用于边权为1的最短路问题 ,而这题要求最少的交换次数,将每一次的九宫格状态当作一个“状态结点”,由当前这个结点可以扩展出其它状态【即 x 可以与其…

基于R语言BIOMOD2模型的物种分布模拟

随着生物多样性全球大会的举办,不论是管理机构及科研单位、高校都在积极准备,根据国家林草局最新工作指示,我国将积极整合、优化自然保护地,加快推进国家公园体制试点,构建以国家公园为主体的自然保护地体系。针对我国…

layui在上传多图时,allDone方法只是在第一次全部成功时调用了

问题点:在使用layui框架做多张图片上传时,遇见只有第一次操作上传图片时,触发了allDone全部上传成功的方法,后面再添加图片时,就不会调用这个方法 原因:是因为我删除了 choose 方法,并且也没有将…

flutter升级3.10.6Xcode构建报错

flutter sdk 升级Xcode报错收集,错误信息如下: Error (Xcode): Cycle inside Runner; building could produce unreliable results.没问题版本信息: Xcode:15.3 flutter sdk :3.7.12 dart sdk:2.19.6 …

真实的招生办对话邮件及美国高校官网更新的反 AI 政策

这两年 ChatGPT 的热度水涨船高,其编写功能强大,且具备强大的信息整合效果,所以呈现的内容在一定程度上具备可读性。 那么,美国留学文书可以用 ChatGPT 写吗?使用是否有风险?外网博主 Kushi Uppu 在这个申…

自动化高并发抓取淘宝平台商品数据(内附接入key密钥API响应示例)

通过API接口(接入key,密钥),可以获取商品的标题、价格、图片、描述等详细信息。 item_get 获得淘宝商品详情item_get_pro 获得淘宝商品详情高级版item_review 获得淘宝商品评论item_fee 获得淘宝商品快递费用item_password 获得…

设计模式浅析(十) ·设计模式之迭代器组合模式

设计模式浅析(十) 设计模式之迭代器&组合模式 日常叨逼叨 java设计模式浅析,如果觉得对你有帮助,记得一键三连,谢谢各位观众老爷😁😁 案例 有两家门店,门店A呢只提供早餐,门店B呢只提供午…

mysqldump: Got error: 1049: Unknown database ‘root‘ when selecting the datab

1.问题描述 MySQL版本号:MySQL Server 8.3MySQL持久化到处数据库结构及数据 mysqldump: Got error: 1049: Unknown database root when selecting the datab2.问题解决 cmd 切换本地路径 cd /d D:\Program Files\MySQL\MySQL Server 8.3\bin执行数据库备份命令 …

大话设计模式——9.单例模式(Singleton Pattern)

简介 确保一个类只有一个实例,并提供全局访问点来获取该实例,是最简单的设计模式。 UML图: 单例模式共有两种创建方式: 饿汉式(线程安全) 提前创建实例,好处在于该实例全局唯一,不…

R语言lavaan结构方程模型在生态学研究中的应用介绍及要点回顾

除了一般的线性回归外,SEM可以用于探究:测量不变性(Measurement invariance)、多组模型(Multiple group modelling)、潜在增长模型(Latent growth modeling)、非线性混合模型(Nonlin…

大语言模型上下文窗口初探(下)

由于篇幅原因,本文分为上下两篇,上篇主要讲解上下文窗口的概念、在LLM中的重要性,下篇主要讲解长文本能否成为LLM的护城河、国外大厂对长文本的态度。 3、长文本是护城河吗? 毫无疑问,Kimi从一开始就用“长文本”占领…

C++中的vector与C语言中的数组的区别

C中的vector和C语言中的数组在很多方面都有所不同,以下是它们之间的一些主要区别: 大小可变性: vector是C标准模板库(STL)提供的动态数组容器,它的大小可以动态增长或减少。这意味着你可以在运行时添加或删…