PDF操作——批量删除末页

一、说明

由于PDF末页为空白页或者是免责声明需要删除,涉及的文件比较多,因此写了一小段代码进行处理。

二、完整架构流程

这个代码的整体架构流程可以分为以下几个步骤:

  1. 导入所需的库 :首先,代码导入了PyPDF2os两个库。PyPDF2是一个Python库,用于处理PDF文件,而os库提供了与操作系统交互的功能。
  2. 定义find_pdf函数:这个函数用于获取指定文件夹中所有的PDF文件路径。它通过遍历文件夹及其子文件夹,检查每个文件的扩展名,并返回所有PDF文件的路径列表。
  3. 定义delete函数:这个函数用于删除PDF文件的最后一页。它首先打开指定的PDF文件,然后创建一个PDF读取器对象来读取文件内容。接着,它获取文件的总页数,并创建一个新的PDF写入器对象。这个函数遍历除最后一页外的所有页面,将这些页面添加到写入器对象中。最后,它将写入器对象中的页面写入到新的PDF文件中,并关闭文件流。
  4. 主程序 :在主程序部分,首先调用find_pdf函数获取指定文件夹中所有PDF文件的路径列表。然后,它遍历这个列表,对每个文件调用delete函数,以删除每个文件的最后一页。最后,它将处理后的文件保存到新的文件夹中。

请注意,这段代码仅是以实现主要功能为主,并没有处理可能的异常情况,例如打开文件失败、读取文件失败、写入文件失败等。在实际使用中,还需要添加适当的错误处理代码来确保程序的健壮性。

三、完整代码

python 复制代码
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2023-12-31 15:24
# @Author : Leuanghing Chen
# @Blog : https://blog.csdn.net/weixin_46153372?spm=1010.2135.3001.5421
# @File : pdf尾页删除.py
# @Software : PyCharm

import PyPDF2
import os


# 获取文件夹中的pdf文件路径
def find_pdf(path):
    filename_list = []
    archives_path_list = []
    # 读入文件
    for root, dirs, files in os.walk(path):
        # 遍历文件时以pdf文件为依据,获取文件名filename_list和文件路径archives_path_list
        for file in files:
            if file[-4:] == '.pdf' or file[-4:] == '.PDF':
                name = os.path.join(root, file).split("\\")[-1]
                filename_list.append(name.replace('.pdf', '').replace('.PDF', ''))
                archives_path_list.append(os.path.join(root, file))
    return archives_path_list

# 删除末页(old_path为旧路径,new_path为新路径。新旧文件分为两个文件夹,主要用来对比,也可以改成覆盖原文件的方式)
def delete(old_path, new_path):
    # 打开要处理的PDF文件
    pdf_file = open(old_path, 'rb')
    # 创建一个PDF读取器对象
    pdf_reader = PyPDF2.PdfFileReader(pdf_file)
    # 获取PDF文件的总页数
    num_pages = pdf_reader.getNumPages()
    # 创建一个新的PDF写入器对象
    pdf_writer = PyPDF2.PdfFileWriter()
    # 将所有除了最后一页以外的页面添加到写入器对象中
    for page_num in range(num_pages - 1):
        page = pdf_reader.getPage(page_num)
        pdf_writer.addPage(page)
    # 将写入器对象中的页面写入到新的PDF文件中
    output_file = open(new_path, 'wb')
    pdf_writer.write(output_file)
    # 关闭文件流
    pdf_file.close()
    output_file.close()


if __name__ == '__main__':
    path = find_pdf(r'C:\Users\LTCH\Desktop\新建文件夹 (2)')
    for i in range(len(path)):
        delete(path[i], path[i].replace('新建文件夹 (2)', '新建文件夹 (3)'))
相关推荐
white-persist21 分钟前
Python实例方法与Python类的构造方法全解析
开发语言·前端·python·原型模式
Java 码农1 小时前
Centos7 maven 安装
java·python·centos·maven
倔强青铜三1 小时前
苦练Python第63天:零基础玩转TOML配置读写,tomllib模块实战
人工智能·python·面试
浔川python社2 小时前
《网络爬虫技术规范与应用指南系列》(xc—3):合规实操与场景落地
python
B站计算机毕业设计之家2 小时前
智慧交通项目:Python+YOLOv8 实时交通标志系统 深度学习实战(TT100K+PySide6 源码+文档)✅
人工智能·python·深度学习·yolo·计算机视觉·智慧交通·交通标志
IT森林里的程序猿2 小时前
基于机器学习方法的网球比赛胜负趋势预测
python·机器学习·django
正牌强哥2 小时前
Futures_ML——机器学习在期货量化交易中的应用与实践
人工智能·python·机器学习·ai·交易·akshare
倔强青铜三2 小时前
苦练Python第62天:零基础玩转CSV文件读写,csv模块实战
人工智能·python·面试
郝学胜-神的一滴2 小时前
Effective Python 第43条:自定义容器类型为什么应该从 `collections.abc` 继承?
开发语言·python
银行数字化转型导师坚鹏3 小时前
如何设计优秀的企业微信私域运营实战培训方案
大数据·python·企业微信