python-pdf的合并与拆分

本文介绍了如何使用Python库PyPDF2实现PDF文件的合并,将多个PDF按顺序合并成一个文件,并演示了如何按照指定页数拆分PDF。示例代码提供了详细步骤和所需的修改部分。
摘要由CSDN通过智能技术生成

1. 安装PyPDF2

pip install PyPDF2

2. pdf合并

import os
from PyPDF2 import PdfMerger
from datetime import datetime

"""
介绍:
    将 merge_input_folder 文件夹下的所有pdf文件合并成为一个pdf文件

使用方法:
    1.首先在本目录下新建一个 merge_input_folder 文件夹
    2.将需要合并的pdf文件放入到其中(注意顺序)
    3.修改 output_file_name 变量的值
    4.运行代码

结果:
    合并后的文件在 merge_output_folder 目录下
"""

cur_path = os.path.dirname(__file__)

def merge_pdfs(input_folder, output_pdf_path):
    merger = PdfMerger()

    # 遍历输入文件夹中的所有PDF文件,并逐个添加到合并器中
    for root, _, files in os.walk(input_folder):
        for filename in files:
            if filename.endswith(".pdf"):
                file_path = os.path.join(root, filename)
                merger.append(file_path)

    # 将合并后的PDF文件保存到指定路径
    with open(output_pdf_path, "wb") as output_file:
        merger.write(output_file)

    print(f"Merged PDF saved at {output_pdf_path}")

def get_output_file_name(output_file_name):
    formatted_time  = datetime.now().strftime("%Y_%m_%d_%H_%M_%S_")
    dir_path = cur_path + "/merge_output_folder/"
    if not os.path.exists(dir_path):
        os.makedirs(dir_path)
    return  dir_path + formatted_time + output_file_name + ".pdf"

if __name__ == "__main__":
    # 只写输出文件名即可 ============= 需要修改的地方
    output_file_name = "name"
    
    input_folder = cur_path + "/merge_input_folder"
    output_pdf_path = get_output_file_name(output_file_name)

    merge_pdfs(input_folder, output_pdf_path)

3. pdf拆分

import os
from PyPDF2 import PdfReader, PdfWriter

"""
介绍:
    将指定路径下的pdf文件, 按照 split_num 的大小进行拆分, 并将拆分后的文件放到指定文件夹

使用方法:
    1.修改 input_file 变量值为待拆分pdf文件的文件位置 (注意斜线的方向的问题)
    2.运行代码

结果:
    拆分后的文件在 split_output_folder 目录下
"""

cur_path = os.path.dirname(__file__)

def split_pdf(input_pdf_path, output_pdfs_folder, split_num):
    # 读取输入的PDF文件
    input_pdf = PdfReader(input_pdf_path)

    # 获取输入PDF文件的基本文件名
    base_name = os.path.splitext(os.path.basename(input_pdf_path))[0]

    # 分割PDF文件
    for i in range(0, len(input_pdf.pages), split_num):
        output_pdf = PdfWriter()
        end_page = min(i + split_num, len(input_pdf.pages))

        # 添加页面到输出PDF文件
        for page_num in range(i, end_page):
            output_pdf.add_page(input_pdf.pages[page_num])

        # 写入分割后的PDF文件
        output_pdf_path = f"{output_pdfs_folder}{base_name}_part_{i + 1}-{end_page}.pdf"
        with open(output_pdf_path, "wb") as output_file:
            output_pdf.write(output_file)

        print(f"Created {output_pdf_path}")

def get_output_folder():
    dir_path = cur_path + "/split_output_folder/"
    if not os.path.exists(dir_path):
        os.makedirs(dir_path)
    return dir_path

if __name__ == "__main__":
    # 文件名全路径名 ============= 需要修改的地方
    input_file = """E:/data/2024_04_16_20_10_56_name.pdf"""
    split_num = 30  # 每多少页进行分隔一次
    
    split_pdf(input_file, get_output_folder(), split_num)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值