PDF文件中的相邻页面合并成一页,例如将第1页和第2页合并,第3页和第4页合并

PDF页面合并工具

这个工具可以将PDF文件中的相邻页面合并成一页,例如将第1页和第2页合并,第3页和第4页合并,以此类推。

功能

  • 自动检测PDF文件中的页面数量
  • 将相邻的页面合并成一页
  • 处理奇数页数的PDF文件(最后一页单独保留)
  • 生成新的PDF文件,不修改原始文件

使用方法

  1. 确保已安装Python环境
  2. 安装PyMuPDF库:pip install PyMuPDF
  3. 将要处理的PDF文件重命名为1.pdf,并放在与脚本相同的目录下
  4. 运行脚本:python pdf_hb.py
  5. 合并后的PDF文件将保存为merged_output.pdf

注意事项

  • 程序会自动处理奇数页数的PDF文件,最后一页将保持原样
  • 合并后的页面宽度为原相邻两页的宽度之和,高度为两页中较高的那一页
  • 如果遇到程序运行问题,请使用Python的完整路径来运行,例如:
    C:\Users\AI\AppData\Local\Programs\Python\Python312\python.exe pdf_hb.py

文件说明

  • pdf_hb.py: 主程序文件
  • 1.pdf: 输入的PDF文件(需要用户提供的原始文件)
  • merged_output.pdf: 输出的合并后PDF文件(程序生成)
import os
import traceback
import sys
import fitz  # PyMuPDFdef merge_pdf_pages(input_path, output_path):"""将PDF文件的相邻页面合并:第1页和第2页,第3页和第4页,以此类推参数:input_path: 输入PDF文件的路径output_path: 输出PDF文件的路径"""try:# 打开输入PDF文件doc = fitz.open(input_path)# 创建新的PDF文档new_doc = fitz.open()# 获取总页数total_pages = len(doc)print(f"PDF总页数: {total_pages}")# 遍历每一对页面for i in range(0, total_pages, 2):if i + 1 < total_pages:# 获取当前页和下一页page1 = doc.load_page(i)page2 = doc.load_page(i + 1)# 获取页面尺寸rect1 = page1.rectrect2 = page2.rect# 创建一个新的页面,宽度为两页之和,高度为两页中较高的new_width = rect1.width + rect2.widthnew_height = max(rect1.height, rect2.height)# 创建新页面new_page = new_doc.new_page(width=new_width, height=new_height)# 将第一页内容插入到新页面的左侧new_page.show_pdf_page(rect1, doc, i)# 将第二页内容插入到新页面的右侧rect2_right = fitz.Rect(rect1.width, 0, rect1.width + rect2.width, rect2.height)new_page.show_pdf_page(rect2_right, doc, i + 1)else:# 如果总页数为奇数,最后一页单独处理page = doc.load_page(i)new_doc.insert_pdf(doc, from_page=i, to_page=i)# 保存输出PDF文件# 如果输出文件已存在,先尝试删除if os.path.exists(output_path):try:os.remove(output_path)except Exception as e:print(f"警告:无法删除已存在的输出文件 {output_path}: {str(e)}")# 使用临时文件名output_path = output_path.replace(".pdf", "_new.pdf")print(f"将使用临时文件名: {output_path}")new_doc.save(output_path)new_doc.close()doc.close()print(f"成功合并PDF页面,输出文件: {output_path}")except Exception as e:print(f"合并PDF时发生错误: {str(e)}")print("详细错误信息:")traceback.print_exc()return Falsereturn Truedef main():# 输入和输出文件路径input_pdf = "3.pdf"  # 您的PDF文件名output_pdf = "3_new.pdf"  # 输出文件名# 检查输入文件是否存在if not os.path.exists(input_pdf):print(f"错误:输入文件 '{input_pdf}' 不存在")returnprint(f"开始处理PDF文件: {input_pdf}")# 执行合并操作success = merge_pdf_pages(input_pdf, output_pdf)if success:print(f"PDF页面合并完成!输出文件: {output_pdf}")else:print("PDF页面合并失败!")if __name__ == "__main__":try:main()except Exception as e:print(f"程序执行时发生未捕获的错误: {str(e)}")traceback.print_exc()

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

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

相关文章

git hub初使用问题记录

问题一、Connection closed by UNKNOWN port 65535设置config文件为Host github.com Hostname ssh.github.com Port 443 User git问题二、ERROR: Repository not found.fatal: Could not read from remote repository.Please make sure you have the correct access rightsand …

解读 AUTOSAR AP R24-11 Manifest 规范 —— 从部署到安全的全流程支撑

今天我们来拆解 AUTOSAR AP R24-11 版本的《Requirements on Manifest Specification》Manifest 规范要求—— 这份文档是 Adaptive 平台软件 “落地运行” 的核心指南,它解决了一个关键问题:如何让 AP 软件在车载 ECU 上安全、可靠地部署和通信? 自适应平台(AP)是啥? 是…

Linux系统 -- 多线程的控制(互斥与同步)

在多线程编程中&#xff0c;多个线程可能同时访问临界资源&#xff08;如共享变量、文件、硬件设备等&#xff09;&#xff0c;若缺乏控制会导致数据混乱。互斥和同步是解决该问题的核心机制&#xff0c;其中互斥锁保证临界资源的排他访问&#xff0c;信号量实现线程间的有序协…

一键搭建开发环境:制作bash shell脚本

完整脚本&#xff1a; 1.0 #!/bin/bash set -eecho " 开始安装 AI 开发环境&#xff08;无人交互版&#xff09; "# 检测是否以 sudo 运行 if [ "$EUID" -eq 0 ]; thenecho "⚠️ 警告&#xff1a;请不要使用 sudo 运行此脚本&#xff01;"echo …

mac m4执行nvm install 14.19.1报错,安装低版本node报错解决

原因 由于node14使用的变异工具链太旧&#xff0c;无法适配最新的macOS SDK头文件导致_studio.h报错 解决办法 方法1 更新nvm到最新版本 brew update nvmnvm install 14.19.1 --binary 方法2 启用Rosetta安装&#xff08;Intel仿真&#xff09; 1.arch -x86_64 zsh 2.nvm insta…

Codeforces Round 1043 (Div. 3) F. Rada and the Chamomile Valley

F.拉达和甘菊谷 每次测试的时间限制&#xff1a;3 秒 每次测试的内存限制512 兆字节 输入&#xff1a;标准输入 输出&#xff1a;标准输出 昨天&#xff0c;拉达发现了一个传送门&#xff0c;可以把她传送到洋甘菊谷&#xff0c;然后再传送回来。拉达的快乐无以言表&#xff0c…

STM32 入门实录:从 0 到 3 色 LED 呼吸式闪烁

一、需求 & 最终效果 硬件&#xff1a;Blue-Pill&#xff08;STM32F103C8T6&#xff09; 3 只 LED&#xff08;红 PA0、黄 PA1、绿 PA2&#xff09;现象&#xff1a;上电后红→黄→绿→黄→全灭&#xff0c;每步 100 ms&#xff0c;循环往复。 二、硬件连接LED 端连接说明阴…

Playwright与PyTest结合指南

Playwright与PyTest的结合&#xff0c;为Web自动化测试带来了强大的动力。它让你既能利用Playwright现代、跨浏览器的自动化能力&#xff0c;又能借助PyTest成熟测试框架的结构化、可扩展性来高效管理和组织测试用例。我会带你了解如何将这两者结合使用。 为了让你快速上手&am…

plantsimulation知识点 一条轨道上多台RGV如何引用

最近做项目有如下需求&#xff1a;轨道1上初始化生成三台RGV&#xff0c;然后通过另一条轨道2上的传感器代码控制轨道1上的三台RGV&#xff0c;之前如果另一条轨道只有一台RGV&#xff0c;我是通过轨道2.cont来引用这台RGV的。但是现在轨道上有了多台RGV&#xff0c;此代码就不…

【Canvas与盾牌】“靡不有初,鲜克有终”黄竖条盾牌

【成图】【代码】<!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>黄竖条盾牌 Draft1</title><style type"text/css"&…

使用linux+javascript+html+mysql+nodejs+npm+express等构建信息资料采集系统

一、适用场景 1、人才信息库、档案管理&#xff0c;构建企业或单位内部人才库。 2、公务员/事业单位招聘&#xff0c;网上报名填写资料、上传证书等。 3、科研项目申报&#xff0c;课题负责人信息、成果附件、审查材料上传。 4、志愿者招募&#xff1a;在线填写报名信息&#…

低空经济产业白皮书:音视频链路在智能飞行体系中的核心地位

引言 低空经济正在成为继数字经济、新能源产业之后的又一战略制高点。它不仅意味着无人机物流、空中通勤、应急救援、文旅体验等新业态的兴起&#xff0c;更代表着 城市治理、智能制造、公共服务全面进入空域数字化时代。从政策引导到产业投资&#xff0c;从技术突破到应用创新…

【LeetCode 热题 100】32. 最长有效括号——(解法二)动态规划

Problem: 32. 最长有效括号 文章目录整体思路完整代码时空复杂度时间复杂度&#xff1a;O(N)空间复杂度&#xff1a;O(N)整体思路 这段代码同样旨在解决 “最长有效括号” 问题&#xff0c;但它采用的是一种 动态规划 (Dynamic Programming) 的方法。这种方法通过构建一个DP表…

使用Docker部署ZLMediaKit流媒体服务器实现gb/t28181协议的设备

最近在研究一个摄像头&#xff0c;通信协议是 gb/t28181。对于这个协议也是第一次接触&#xff0c;通过查阅多方资料&#xff0c;找到了两个开源的源码&#xff0c;来实现 视频播放、摄像头直播。以前也没有深入的了解过关于视频播放的这方面的技术&#xff0c;偶尔网站播放视频…

硬件三人行--运算基础篇

第3讲 负反馈放大电路

【LINUX网络】TCP原理

目录 本文介绍 1. 什么是TCP&#xff1f; 2. TCP结构 为什么需要协议栈&#xff1a;两台主机通信的复杂性解决方案 3. 确认应答机制 进一步理解什么是确认和请求以及序号 进一步理解什么是序号和确认序号 并发发送带来的问题以及解决方案&#xff08;序号&#xff09; …

Java -- 文件基础知识--Java IO流原理--FileReader

目录 1. 常用文件操作 2. Java IO流原理 2.1 流的分类 3. FileReader和FileWriter介绍 FileReader相关方法&#xff1a; FileWriter常用方法&#xff1a; 文件是保存数据的地方&#xff0c;比如大家经常使用的word文档&#xff0c;txt文件&#xff0c;excel文件...都是文…

向量方法证明正余弦定理的数学理论体系

向量方法证明正余弦定理的数学理论体系 摘要&#xff1a; 向量理论为几何定理的证明提供了强有力的代数化工具。本文基于向量空间的基本概念与运算性质&#xff0c;严格推导平面几何中的正弦定理与余弦定理。通过建立系统的向量表示框架&#xff0c;将几何关系转化为向量运算&a…

【笔记ing】大模型算法架构

前言 随着人工智能技术的飞速发展,大模型算法及其架构已成为推动科技前沿的重要力量。它们不仅能够处理海量的数据,还具备强大的表征学习能力,能够应对日益复杂的场景需求。本章节将介绍大模型算法及其架构,带您了解其背后的原理、技术创新以及在实际应用中的广阔前景。 …

ConcurrentHashMap的原理

1.底层数据结构JDK1.7底层采用分段的数组链表实现JDK1.8 采用的数据结构跟HashMap1.8的结构一样,数组链表/红黑二叉树2.加锁的方式JDK1.7采用Segment分段锁,底层使用的是ReentrantLockJDK1.8采用CAS添加新节点,采用synchronized锁定链表或红黑二叉树的首节点,相对Segment分段锁…