当前位置: 首页 > news >正文

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.dtcms.com/a/351138.html

相关文章:

  • Mac测试端口连接的几种方式
  • 如何将视频从安卓设备传输到Mac?
  • Mac安装mitmproxy及操作对监控的请求
  • 少儿舞蹈小程序详细设计文档
  • Mac中修改Word的Normal.dotm文件
  • 使用Uniapp开发小程序,如何引入插件组件!
  • 三电平buckboost电路出现上下母线不平衡是什么原因
  • Linux驱动开发笔记(八)——按键输入实验
  • 滚珠导轨如何定义半导体制造精度?
  • 【LeetCode 热题 100】75. 颜色分类——双指针
  • 算法题打卡力扣第209题:长度最小的子数组(mid)
  • 计算神经科学数学建模编程深度前沿方向研究(中)
  • AbMole小课堂丨Lenvatinib(E7080):如何通过靶向多靶点抑制VEGFR/FGFR/PDGFRα抑制肿瘤?
  • 【vue eslint】报错:Component name “xxxx“ should always be multi-word
  • LeetCode 100 -- Day6
  • 论文阅读:CIKM 2024 Empowering Private Tutoring by Chaining Large Language Models
  • 低空经济产业白皮书:音视频链路在智能飞行体系中的核心地位
  • 验证码请求与缓存问题解决方案
  • 用无标签语音自我提升音频大模型:SI-SDA 方法详解
  • 【JavaEE】(19) MyBatis-plus
  • 基于SpringBoot的考研资讯平台
  • 没有cpolar:会议记录手忙脚乱;有了cpolar:CapsWriter语音转文字轻松搞定
  • 如何在GitHub找到10k+个stars的仓库
  • USB摄像头驱动完整分析 (从插入到出画)
  • 飞算JavaAI:Java开发新时代的破晓之光
  • 基于印染数据的可视化系统设计与实现
  • 【笔记】大模型业务场景流程综述
  • (论文速读)MBQ:大型视觉语言模型的模态平衡量化
  • 深度学习在金融订单簿分析与短期市场预测中的应用
  • 力扣hot100:搜索旋转排序数组和寻找旋转排序数组中的最小值(33,153)