pdf文件切割


import os
from PyPDF2 import PdfFileReader, PdfFileWriter
import time

def split_pdf_by_page_range(input_pdf, output_dir, start_page=None, end_page=None):
    # 获取输入 PDF 文件的文件名(不含扩展名)
    input_pdf_name = os.path.splitext(os.path.basename(input_pdf))[0]

    # 创建一个 PdfFileReader 对象
    pdf_reader = PdfFileReader(input_pdf)

    # 获取 PDF 文件的总页数
    total_pages = pdf_reader.numPages

    # 如果未指定起始页和结束页,则默认切割每一页
    if start_page is None and end_page is None:
        start_page = 0
        end_page = total_pages

    # 如果结束页码是 "$",就修改为 PDF 文件的总页数
    if end_page == "$":
        end_page = total_pages
    else:
        end_page = min(int(end_page), total_pages)  # 如果不是 "$",则转换为整数,并取 PDF 文件总页数和输入值中的较小值

    # 如果输出目录为空,则与输入 PDF 文件同级
    if not output_dir:
        output_dir = os.path.dirname(input_pdf)

    # 创建输出目录
    os.makedirs(output_dir, exist_ok=True)

    # 判断是每页都单独切割还是指定页数范围切割
    if start_page == 0 and end_page == total_pages:
        # 每页都单独切割
        for page_num in range(total_pages):
            # 创建一个新的 PdfFileWriter 对象
            pdf_writer = PdfFileWriter()

            # 获取当前页
            page = pdf_reader.getPage(page_num)

            # 将当前页添加到 PdfFileWriter 对象中
            pdf_writer.addPage(page)

            # 构建输出文件路径
            output_file = os.path.join(output_dir, f"{input_pdf_name}_page_{page_num + 1}.pdf")

            # 写入到新的 PDF 文件中
            with open(output_file, 'wb') as output_pdf:
                pdf_writer.write(output_pdf)

            print(f"第 {page_num + 1} 页切割完成!")
    else:
        # 指定页数范围切割
        # 创建一个新的 PdfFileWriter 对象
        pdf_writer = PdfFileWriter()

        # 遍历指定范围内的页面,并将页面添加到 PdfFileWriter 对象中
        for page_num in range(start_page, end_page):
            page = pdf_reader.getPage(page_num)
            pdf_writer.addPage(page)

        # 构建输出文件路径
        output_file = os.path.join(output_dir, f"{input_pdf_name}_page_{start_page + 1}_to_{end_page}.pdf")

        # 写入到新的 PDF 文件中
        with open(output_file, 'wb') as output_pdf:
            pdf_writer.write(output_pdf)

        print(f"PDF 文件从第 {start_page + 1} 页到第 {end_page} 页切割完成!")


if __name__ == "__main__":
    # 从命令行逐个获取参数,去除空格
    input_pdf = input("请输入要切割的 PDF 文件路径:").strip()
    output_dir = input("请输入输出目录(留空则与输入 PDF 文件同级):").strip()
    print(1111)
    # 提问用户是需要每页都切割开还是指定页数范围切割
    split_option = input("您希望每页都单独切割还是指定页数范围切割?\n 1)每页单独切割;2)指定页数范围切割;\n 请输入选择:").strip()

    if split_option == "1":
        # 调用函数切割 PDF 文件(每页都单独切割)
        split_pdf_by_page_range(input_pdf, output_dir)
    elif split_option == "2":
        start_page = int(input("请输入起始页码:").strip())
        end_page = input("请输入结束页码:").strip()

        # 调用函数切割 PDF 文件(指定页数范围切割)
        print(2222)

        split_pdf_by_page_range(input_pdf, output_dir, start_page, end_page)


    else:
        print("输入无效选项!请重新运行程序。")






#     split_option = input("您希望每页都单独切割还是指定页数范围切割?\n 1)每页单独切割;2)指定页数范围切割;\n 请输入选择:")

#      D:\DPU\greenland\Chip level RTL编译和仿真加速技术.pdf

#     D:\DPU\greenland\out\
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白蒋博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值