> 技术文档 > 拆分、合并PDF

拆分、合并PDF


拆分PDF

方案一:

from PyPDF3 import PdfFileReader, PdfFileWriterimport 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, 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 PdfMergerimport osimport 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) # 如果找到数字,转换为整数;否则返回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 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