Python之PDF拆分

首先确保Python库已经更新好,如果没有需要:

1、找到pip3.exe所在的文件夹,复制路径

我的路径是: 

2、按Win+R,输入CMD确定

3、进入后,先输入cd 路径 回车

4、输入 pip3 install pypdf2 回车

5、输入 pip3 install pdfplumber 回车

代码:

from PyPDF2 import PdfReader, PdfWriter
import os

# PDF 文件路径
input_path = r'C:\Users\cc\Desktop\任务\琼瑶作品全集.pdf'
# 检查输入文件是否存在
if not os.path.isfile(input_path):
    raise FileNotFoundError(f"文件 {input_path} 未找到")

# 创建一个 PdfReader 对象来读取 PDF 文件
pdf_reader = PdfReader(input_path)

# 定义一个页面范围的列表,每个子列表表示一个要拆分出的页面范围
# 注意:这里修正了原代码中页面范围列表的语法错误
page_ranges = [
    [3, 222], [223, 490], [491, 857], [858, 1238], [1239, 1592],
    [1593, 1919], [1920, 2251], [2252, 2590], [2591, 2735], [2736, 2928],
    [2929, 3133], [3134, 3324], [3325, 3521], [3522, 3778], [3779, 4032],
    [4033, 4199], [4200, 4448], [4449, 4734], [4735, 5159], [5160, 5401],
    [5402, 5549], [5550, 5824], [5825, 6060], [6061, 6251], [6252, 6413],
    [6414, 6578], [6579, 6718], [6719, 6851], [6852, 7072], [7073, 7334],
    [7335, 7564], [7565, 7754], [7755, 7902], [7903, 8110], [8111, 8267],
    [8268, 8407], [8408, 8554], [8555, 8737], [8738, 8963], [8964, 9188],
    [9189, 9397], [9398, 9623], [9624, 9834], [9835, 9986], [9987, 10183],
    [10184, 10326], [10327, 10500], [10501, 10667], [10668, 10831], [10832, 11070],
    [11071, 11304], [11305, 11550], [11551, 11726], [11727, 11850], [11851, 12044],
    [12045, 12291], [12292, 12577], [12578, 12820], [12821, 13043], [13044, 13196]
]

# 定义输出文件名的前缀列表(确保前缀数量与页面范围数量匹配)
# 注意:这里修正了原代码中前缀列表的引号不匹配问题
filename_prefixes = [
    '还珠格格(上)', '还珠格格(下)', '还珠格格之风云再起', '还珠格格之生死相许',
    '还珠格格之浪迹天涯', '还珠格格之天上人间(上)', '还珠格格之天上人间(中)',
    '还珠格格之天上人间(下)', '梅花烙', '苍天有泪之无语问苍天', '苍天有泪之爱恨千千万',
    '苍天有泪之人间有天堂', '我的故事', '烟雨濛濛', '窗外', '青青河边草', '在水一方',
    '庭院深深', '几度夕阳红', '寒烟翠', '翦翦风', '彩云飞', '碧云天', '一颗红豆',
    '梦的衣裳', '匆匆,太匆匆', '燃烧吧!火鸟', '冰儿', '菟丝花', '星河', '海鸥飞处',
    '雁儿在林梢', '却上心头', '我是一片云', '聚散两依依', '问斜阳', '昨夜之灯',
    '失火的天堂', '紫贝壳', '心有千千结', '浪花', '秋歌', '月朦胧鸟朦胧', '人在天涯',
    '金盏花', '雪珂', '望夫崖', '水云间', '烟锁重楼', '幸运草', '潮声', '月满西楼',
    '水灵', '女朋友', '六个梦', '白狐', '船', '彩霞满天', '一帘幽梦', '新月格格'
]

# 遍历页面范围列表和文件名前缀列表(假设它们长度相同)
for i, (page_range, prefix) in enumerate(zip(page_ranges, filename_prefixes)):
    start_page, end_page = page_range
    # 检查页面范围的有效性
    if start_page < 0 or end_page >= len(pdf_reader.pages):
        print(f"警告:在 page_ranges 的索引 {i} 处发现页面范围超出 PDF 文件的总页数:{page_range}")
        continue  # 跳过无效的页面范围

    # 创建一个 PdfWriter 对象来写入拆分后的 PDF 文件
    pdf_writer = PdfWriter()
    # 将指定范围内的页面添加到 PdfWriter 对象中
    for page_num in range(start_page, end_page + 1):
        page = pdf_reader.pages[page_num]
        pdf_writer.add_page(page)

    # 定义输出文件的名称(使用前缀来命名)
    output_filename = f'{prefix}.pdf'
    output_path = os.path.join(os.path.dirname(input_path), output_filename)

    # 将拆分后的 PDF 文件写入到磁盘上
    with open(output_path, 'wb') as output_pdf:
        pdf_writer.write(output_pdf)

    print(f'已创建 {output_path}')

你可能感兴趣的:(python,pdf,开发语言)