from PyPDF2 import PdfReader, PdfWriter
import os
# ========== 【升级版:支持任意页码】 ==========
PDF_FILE = "武汉纺织大学学报2026年2期.pdf" # 改成你的PDF文件名
OUTPUT_FOLDER = "已拆分论文"
# 🔥 新格式:页码可以写 "1-5,8" (连续+单独页 混合!)
# 例子:
# "1-10" = 1到10页
# "1-5,8" = 1-5页 + 第8页
# "1,3,5" = 第1、3、5页
PAPERS = [
("3-8,46", "20260201"),
("9-14", "20260202"),
("15-21", "20260203"),
("22-29", "20260204"),
("30-39", "20260205"),
("40-46", "20260206"),
("47-53,69", "20260207"),
("54-60", "202602008"),
("61-69", "20260209"),
("70-76", "20260210"),
("77-82", "20260211"),
("83-88", "20260212"),
("89-97", "20260213"),
("98-104,97", "20260214"),
("105-115", "20260215"),
("115-120", "20260216"),
("121-128", "20260217"),
]
# ======================================================================
def parse_pages(page_str):
"""解析页码字符串:支持 "1-5", "1,3", "1-5,8" 格式"""
pages = []
parts = page_str.replace(",", ",").replace("-", ",").split(",")
temp = []
for p in parts:
p = p.strip()
if p.isdigit():
temp.append(int(p))
if len(temp) == 2:
s, e = temp
pages.extend(range(s, e + 1))
temp = []
if len(temp) == 1:
pages.append(temp[0])
return sorted(list(set(pages)))
def split_pdf():
print("=" * 50)
print("📄 PDF 期刊拆分工具(支持任意页码:连续+单独页)")
print("=" * 50)
if not os.path.exists(PDF_FILE):
print(f"❌ 错误:找不到文件 {PDF_FILE}")
return
reader = PdfReader(PDF_FILE)
os.makedirs(OUTPUT_FOLDER, exist_ok=True)
for i, (page_str, title) in enumerate(PAPERS, 1):
print(f"\n🔹 正在拆分 第{i}篇:{title}")
print(f" 页码:{page_str}")
page_list = parse_pages(page_str)
if not page_list:
print("⚠️ 页码无效,跳过")
continue
writer = PdfWriter()
for num in page_list:
idx = num - 1
if 0 <= idx < len(reader.pages):
writer.add_page(reader.pages[idx])
save_path = os.path.join(OUTPUT_FOLDER, f"第{i}篇_{title}.pdf")
with open(save_path, "wb") as f:
writer.write(f)
print(f"✅ 保存成功:{save_path}")
print("\n" + "=" * 50)
print("🎉 全部拆分完成!")
print("=" * 50)
if __name__ == "__main__":
split_pdf()