PDF页面合并工具
这个工具可以将PDF文件中的相邻页面合并成一页,例如将第1页和第2页合并,第3页和第4页合并,以此类推。
功能
- 自动检测PDF文件中的页面数量
- 将相邻的页面合并成一页
- 处理奇数页数的PDF文件(最后一页单独保留)
- 生成新的PDF文件,不修改原始文件
使用方法
- 确保已安装Python环境
- 安装PyMuPDF库:
pip install PyMuPDF
- 将要处理的PDF文件重命名为
1.pdf
,并放在与脚本相同的目录下 - 运行脚本:
python pdf_hb.py
- 合并后的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.rect rect2 = page2.rect # 创建一个新的页面,宽度为两页之和,高度为两页中较高的 new_width = rect1.width + rect2.width new_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 False return True
def main():
# 输入和输出文件路径
input_pdf = "3.pdf" # 您的PDF文件名
output_pdf = "3_new.pdf" # 输出文件名# 检查输入文件是否存在 if not os.path.exists(input_pdf): print(f"错误:输入文件 '{input_pdf}' 不存在") return print(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()