练手代码之使用Python实现合并PDF文件

news2025/1/18 2:10:11

如果你有合并PDF的需要,你会怎么办

我们无所不能的程序员会选择写一个Python代码来实现(谁会这么无聊?是我),如果真的有PDF操作需要,我推荐你使用PDF Expert这个软件哈~

话不多说直接上代码:

import os
import PyPDF2
from tkinter import Tk
from tkinter.filedialog import askopenfilenames

def combine_pdfs(input_files, output_file):
    pdf_merger = PyPDF2.PdfMerger()
    
    try:
        for file_path in input_files:
            if not os.path.exists(file_path):
                raise FileNotFoundError(f"The file {file_path} does not exist.")
            with open(file_path, 'rb') as f:
                pdf_merger.append(f)
        
        output_dir = os.path.dirname(output_file)
        if output_dir and not os.path.exists(output_dir):
            os.makedirs(output_dir)
        
        with open(output_file, 'wb') as f:
            pdf_merger.write(f)
        print("合并成功")
    except Exception as e:
        print("合并PDF时出现错误:", str(e))
        raise

def get_file_paths():
    Tk().withdraw() # 不显示Tkinter的根窗口
    file_paths = askopenfilenames(filetypes=[("PDF files", "*.pdf")])
    return file_paths

input_files = get_file_paths()

if len(input_files) < 2:
    print("请选择至少两个PDF文件进行合并。")
else:
    # 组合文件命名
    output_file = "combined_pdfs.pdf"
    try:
        combine_pdfs(input_files, output_file)
    except FileNotFoundError as e:
        print(e)

运行之后弹窗选择两个PDF文件即可,会自动输出在根目录 

 

结束

By the way,我的博客:https://wcowin.work/ 

欢迎来撩~

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FuTalk设计周刊-Vol.030

&#x1f525;AI漫谈 热点捕手 1、ChatGPT王炸升级&#xff01;更强版GPT-4上线&#xff0c;API定价打骨折&#xff0c;发布现场掌声没停过 ChatGPT&#xff0c;今天裂变成无数个GPT。OpenAI在首届开发者日上&#xff0c;正式公布自定义GPT。还将上线“GPT商店”&#xff0c;…

html做一个画热图的软件

完整示例 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><title>热图生成器</title><script src"https://cdn.plot.ly/plotly-latest.min.js"></script><style>body …

基于Java的学生成绩管理系统

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;Java技术&#xff0c;B/S结构 工具&#xff1a;MyEclipse&#xff0c;MySQL 系统展示 首页 个人中…

TDA4VH高速路线指南和接口设计概要

TDA4VH 高速链路设计指南阅读及考虑 0、说明 本人目前做相关域控制器相关内容&#xff0c;目前正在研究TDA4的开发&#xff0c;目前正在对高速电路的的相关设计进行考虑&#xff0c;下面对TI官方提供的高速电路的设计的开发文档进行学习和分享: 1、高速系统架构介绍及PCB阻抗…

【C语言】顺序表(下卷)

本文继续讲顺序表上卷未讲完的相关内容。&#xff08;简短的补充&#xff09; 在指定位置之前插入数据 test.c SeqList.c SeqList.h //在指定位置之前插入数据 void SLInsert(SL* ps, int pos, SLDataType x);在指定位置删除数据 test.c SeqList.c SeqList.h //在指定位…

跨平台免费流程图(思维导图)制作工具 draw.io v24.6.3(可离线)

在当今快节奏的工作环境中&#xff0c;有效地传达复杂信息和工作流程至关重要。流程图和思维导图是两种强大的视觉工具&#xff0c;它们帮助我们清晰地表达想法&#xff0c;理解复杂的系统&#xff0c;并协作完成项目。可以帮助我们清晰地展示信息和逻辑关系。然而&#xff0c;…

无需破解,打开就是旗舰版!

在当今快节奏的工作环境里&#xff0c;有效的视觉沟通变得至关重要。流程图、思维导图、组织结构图等图表能够帮助我们以清晰、直观的方式传达复杂信息。而Wondershare Edraw Max正是这样一款强大的绘图工具&#xff0c;它能够帮助用户轻松创建各种专业图表。 软件链接&#x…

Spring Boot 快速入门2 ——SpringBoot运行原理分析

一、SpringBoot运行原理 父依赖 我们再查看 Spring Boot 项目中 pom.xml 可以看出&#xff0c;所有的 Spring Boot 项目 直接或间接的 依赖于一个 父项目 spring-boot-starter-parent &#xff0c;主要是管理项目的资源及其插件。 <parent><groupId>org.sprin…

Linux 时区设置函数 tzset()【man 3 tzset】

1. NAME&#xff08;名&#xff09; tzset, tzname, timezone, daylight - 初始化时间转换信息 2. SYNOPSIS&#xff08;概要&#xff09; #include <time.h>void tzset(void);extern char *tzname[2]; extern long timezone; extern int daylight;glibc的功能测试宏要…

Uniapp在屏幕尺寸低于960出现样式错乱(开箱即用)

我司项目突然要做平板兼容,我在调试的时候发现当屏幕尺寸低于960px发现样式但凡是以rpx单位的全部失效&#xff0c;如果是以px为单位那么影响就比较小&#xff0c;当时解决方案是写了不少媒体查询和把单位rpx改成px&#xff0c;后面查阅文档发现大错特错宽屏适配只需一行代码即…

2024.06.22 刷题日记

199. 二叉树的右视图 这道题目的思路就是层次遍历&#xff0c;然后每次处理每一层所有的元素&#xff0c;如果是第一个就收集到答案中&#xff1a; class Solution { public:vector<int> rightSideView(TreeNode* root) {if (!root)return {};queue<TreeNode*> q…

Kubernetes Ingress 简介

前言 Ingress 是 Kubernetes 中的一种资源对象&#xff0c;用于管理从集群外部到内部服务的 HTTP 和 HTTPS 路由。它提供了灵活的路由功能、SSL/TLS 终止、负载均衡和虚拟主机支持。Ingress 需要一个 Ingress 控制器来实际处理路由&#xff0c;并且可以通过配置不同的控制器来…

这4个手机应用,让你的生活工作更加方便

MillimeterPro MillimeterPro是一款适用于iPhone或iPad的测量工具应用&#xff0c;用户可以通过触摸屏快速进行长度测量、分割物体、测量物体比例&#xff08;W/H&#xff09;和面积等操作。 这款应用程序是一个多功能的测量工具&#xff0c;它可以帮助您在手机或平板电脑的屏…

(经验)高考填报志愿,有哪些坑你需要避开?

高考年年考&#xff0c;填报志愿的却年年都是新手.....哪些关于高考填报志愿的坑&#xff0c;依旧还继续坑....是时候做些改变了。过来人写的几点避坑&#xff0c;希望给这届新人做参考。 1、不要什么热门就报什么&#xff0c;因为有些东西别人学得很快&#xff0c;而我慢的像蜗…

示例:WPF中使用IsAsync的方式绑定数据来优化用户体验

一、目的&#xff1a;开发过程中&#xff0c;有时需要绑定大量数据&#xff0c;比如弹出一个窗口&#xff0c;窗口中包含一个ListBox绑定了大量数据&#xff0c;这时会出现点击按钮后出现假死卡顿影响用户体验&#xff0c;这理通过用IsAsync的方式将窗口优先弹出来再加载数据 二…

mysql高级语句2存储过程

CREATE VIEW 视图&#xff0c;可以被当作是虚拟表或存储查询。 视图跟表格的不同是&#xff0c;表格中有实际储存数据记录&#xff0c;而视图是建立在表格之上的一个架构&#xff0c;它本身并不实际储存数据记录。 临时表在用户退出或同数据库的连接断开后就自动消失了&…

计算机网络 静态路由及动态路由RIP

一、理论知识 1.静态路由 静态路由是由网络管理员手动配置在路由器上的固定路由路径。其优点是简单和对网络拓扑变化不敏感&#xff0c;缺点是维护复杂、易出错&#xff0c;且无法自动适应网络变化。 2.动态路由协议RIP RIP是一种基于距离向量的动态路由协议。它使用跳数作…

Unity Meta Quest 开发:关闭 MR 应用的安全边界

社区链接&#xff1a; SpatialXR社区&#xff1a;完整课程、项目下载、项目孵化宣发、答疑、投融资、专属圈子 &#x1f4d5;教程说明 这期教程我将介绍如何在应用中关闭 Quest 系统的安全边界。 视频讲解&#xff1a; https://www.bilibili.com/video/BV1Gm42157Zi 在 Unity…

示例:推荐一个应用Adorner做的表单对话框

一、目的&#xff1a;开发过程中经常会修改和查看一个Model的数据&#xff0c;一般情况下会自定义一个控件或Window去显示Model数据&#xff0c;但这种数据如果比较多会增加很多开发工作&#xff0c;本文介绍一种通用的方式&#xff0c;应用表达Form控件去简化处理&#xff0c;…

如何在Qt Designer中管理QSplitter

问题描述 当按下按钮时&#xff0c;我希望弹出一个对话框&#xff0c;用户可以在其中选择内容并最终按下 ‘Ok’ 按钮。我想在这个对话框中放置一个 QSplitter&#xff0c;左侧面板将显示树状结构&#xff0c;右侧将显示其他内容。如何正确实现这一点&#xff1f; 从 Qt 的示…