拆分、合并PDF

发布于:2025-07-24 ⋅ 阅读:(30) ⋅ 点赞:(0)

拆分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


网站公告

今日签到

点亮在社区的每一天
去签到