拆分PDF
方案一:
from PyPDF3 import PdfFileReader, PdfFileWriter
import os
# 使用os.path处理路径更安全
input_path = os.path.join(r"d:\PDF", "PDF文件.pdf")
output_dir = r"d:\PDF\output_path"
def split_pdf(input_path, output_dir):
try:
# 检查输入文件是否存在
if not os.path.exists(input_path):
raise FileNotFoundError(f"输入文件不存在: {input_path}")
# 创建输出目录(如果不存在)
os.makedirs(output_dir, exist_ok=True)
# 使用上下文管理器读取PDF
with open(input_path, 'rb') as file:
input_pdf = PdfFileReader(file)
# 获取页数
num_pages = input_pdf.getNumPages()
for page_num in range(num_pages):
output = PdfFileWriter()
output.addPage(input_pdf.getPage(page_num))
# 构造输出路径
output_path = os.path.join(output_dir, f"page_{page_num + 1}.pdf")
# 写入文件
with open(output_path, 'wb') as output_pdf:
output.write(output_pdf)
print(f"已保存: {output_path}")
print(f"\n✅ 拆分完成!共拆分 {num_pages} 页")
return True
except Exception as e:
print(f"❌ 发生错误: {str(e)}")
return False
# 执行拆分
if __name__ == "__main__":
split_pdf(input_path, output_dir)
方案二:
from PyPDF3 import PdfFileWriter, PdfFileReader
path = r"d:\PDF"
input_pdf = PdfFileReader(r"d:\PDF\PDF文件.pdf") # PdfFileReader读取原始文件
output = PdfFileWriter()
# 获取PDF页数
num_pages = input_pdf.getNumPages()
for page_num in range(num_pages):
output = PdfFileWriter()
# PdfFileWriter().addPage()将PDF页面添加到新的PDF中并保存
output.addPage(input_pdf.getPage(page_num))
with open("{}page_{}.pdf".format(path, page_num + 1), 'wb') as output_pdf:
output.write(output_pdf) # 先创建output_pdf文件
合并PDF
按数字顺序合并PDF文件的Python代码:
from PyPDF2 import PdfMerger
import os
import re
def merge_pdfs_by_number(input_dir, output_file):
"""
按数字顺序合并目录中的PDF文件
参数:
input_dir: 包含PDF文件的目录路径
output_file: 合并后的输出文件路径
"""
try:
# 获取目录中的所有PDF文件
all_files = [f for f in os.listdir(input_dir)
if f.lower().endswith('.pdf')]
if not all_files:
print("目录中没有找到PDF文件")
return False
# 提取文件名中的数字并排序
def extract_number(filename):
# 从文件名中提取所有数字序列
numbers = re.findall(r'\d+', filename)
# 如果找到数字,转换为整数;否则返回0
return int(numbers[0]) if numbers else 0
# 按数字排序文件
sorted_files = sorted(all_files, key=extract_number)
print("检测到以下PDF文件(按数字顺序排序):")
for i, f in enumerate(sorted_files):
print(f"{i+1}. {f}")
# 创建PDF合并器
merger = PdfMerger()
# 按顺序添加每个PDF文件
for filename in sorted_files:
filepath = os.path.join(input_dir, filename)
merger.append(filepath)
print(f"已添加: {filename}")
# 保存合并后的PDF
merger.write(output_file)
merger.close()
print(f"\n✅ 合并完成! 共合并 {len(sorted_files)} 个文件")
print(f"📄 输出文件: {os.path.abspath(output_file)}")
return True
except Exception as e:
print(f"❌ 合并过程中出错: {str(e)}")
return False
if __name__ == "__main__":
# 配置参数
SOURCE_DIR = "pdf_files" # 包含PDF文件的目录
OUTPUT_FILE = "merged.pdf" # 输出文件名
# 执行合并
merge_pdfs_by_number(SOURCE_DIR, OUTPUT_FILE)
安装依赖:
pip install PyPDF2
将所有PDF文件放在同一个目录中(如
pdf_files
)文件名应包含数字(如:
1_报告.pdf
,02_附录.pdf
,3.总结.pdf,4.pdf
)