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\
pdf文件按照指定页数分割,pdf文件拆开
于 2024-05-11 17:38:28 首次发布