用AI生成的一个python 的 pdf合并程序

用AI生成的一个python 的 pdf合并程序,自用。
因为工作需要,有数百pdf文档需要合并每个文档的第一页。找了几个现成的应用,要么收费要么就是需要每个文档都手动设置原文档的页码范围,感觉太麻烦,所以就试着用AI写了个。大概可能是一次性应用吧。哈。放这里收藏一下备用。

import os
import platform
from PyPDF2 import PdfReader, PdfWriter
from tkinter import Tk, filedialog, simpledialog, messagebox
import subprocess

def merge_pages(input_folder, output_file, start_page, end_page):
    pdf_writer = PdfWriter()
    
    for item in os.listdir(input_folder):
        if item.endswith('.pdf'):
            pdf_path = os.path.join(input_folder, item)
            print(f"Processing {pdf_path}...")
            
            pdf_reader = PdfReader(pdf_path)
            pages_to_merge = range(start_page - 1, end_page if end_page != 0 else len(pdf_reader.pages))
            
            for page_num in pages_to_merge:
                if page_num < len(pdf_reader.pages):
                    pdf_writer.add_page(pdf_reader.pages[page_num])

    with open(output_file, 'wb') as output_pdf:
        pdf_writer.write(output_pdf)

    print(f"合并后的文档已保存到 {output_file}")

def select_folder():
    root = Tk()
    root.withdraw()  # 隐藏Tk主窗口
    folder_selected = filedialog.askdirectory()
    root.destroy()
    return folder_selected

def save_file():
    root = Tk()
    root.withdraw()  # 隐藏Tk主窗口
    file_selected = filedialog.asksaveasfilename(defaultextension=".pdf", filetypes=[("PDF files", "*.pdf")])
    root.destroy()
    return file_selected

def get_page_range():
    root = Tk()
    root.withdraw()  # 隐藏Tk主窗口
    
    start_page = simpledialog.askinteger("页码范围", "请输入起始页码 (默认为 1):", initialvalue=1)
    end_page = simpledialog.askinteger("页码范围", "请输入结束页码 (输入 0 表示合并到最后一页):", initialvalue=1)
    
    root.destroy()
    return start_page, end_page

def open_output_folder(output_file):
    output_folder = os.path.dirname(output_file)
    if platform.system() == "Windows":
        os.startfile(output_folder)
    elif platform.system() == "Darwin":  # macOS
        subprocess.Popen(["open", output_folder])
    else:  # Linux and other
        subprocess.Popen(["xdg-open", output_folder])

# 获取输入文件夹和输出文件路径
input_folder = select_folder()
if not input_folder:
    messagebox.showerror("错误", "没有选择文件夹")
    exit()

output_file = save_file()
if not output_file:
    messagebox.showerror("错误", "没有选择输出文件")
    exit()

try:
    start_page, end_page = get_page_range()
    if start_page is None or end_page is None:
        messagebox.showerror("错误", "页码未输入正确")
        exit()
        
    if start_page < 1 or end_page < 0:
        raise ValueError("页码范围必须为起始页码≥1而且结束页码≥0")
    
    if start_page > end_page and end_page != 0:
        raise ValueError("起始页码不能大于结束页码")
    
    print(f"Selected input folder: {input_folder}")
    print(f"Selected output file: {output_file}")
    print(f"Selected page range: {start_page}{end_page if end_page != 0 else '最后一页'}")

    merge_pages(input_folder, output_file, start_page, end_page)
    open_output_folder(output_file)
except ValueError as e:
    messagebox.showerror("错误", f"页码输入错误: {e}")
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值