拆分、合并PDF
拆分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)# 使用上下文管理器读取PDFwith 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 Trueexcept Exception as e:print(f"❌ 发生错误: {str(e)}")return False# 执行拆分
if __name__ == "__main__":split_pdf(input_path, output_dir)
方案二:
from PyPDF3 import PdfFileWriter, PdfFileReaderpath = 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 redef 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)# 如果找到数字,转换为整数;否则返回0return 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}")# 保存合并后的PDFmerger.write(output_file)merger.close()print(f"\n✅ 合并完成! 共合并 {len(sorted_files)} 个文件")print(f"📄 输出文件: {os.path.abspath(output_file)}")return Trueexcept Exception as e:print(f"❌ 合并过程中出错: {str(e)}")return Falseif __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
)