python—批量删除pdf页面

由于需要,结合大佬的python代码,做了一个程序,能够把选定目录内所有的pdf文件全部删除到仅剩第一页。

参考代码:(17条消息) python——获取文件夹中所有文件的路径_python 获取所有文件路径_哎呦不错的温jay的博客-CSDN博客

(17条消息) python删除pdf指定页的方法_欧气测不准的博客-CSDN博客

先安装需要的库(在cmd里)

pip install PyPDF2 -i https://pypi.tuna.tsinghua.edu.cn/simple/

python代码:

import os
import PyPDF2

def listdir(path, list_name):  # 传入存储的list
    for file in os.listdir(path):
        file_path = os.path.join(path, file)# 在path后面添加'\file',形成一个地址
        if os.path.isdir(file_path):#如果file_path是目录
            continue # listdir(file_path, list_name)
        else:
            list_name.append(file_path)# 把file_path添加在list后面
 


def delete_pdf_page(input_path, output_path, page_number):# 输入PDF文件路径,输出PDF文件路径,要保留的页码(从0开始)
    with open(input_path, 'rb') as input_file:# 打开输入路径下的文件,命名为input_file
        reader = PyPDF2.PdfReader(input_file)# 打开的文件用pdf打开,命名为reader
        writer = PyPDF2.PdfWriter()

        num_pages = len(reader.pages)# 页码总数

        if page_number < 0 or page_number >= num_pages:
            print(f"Invalid page number. The PDF file has {num_pages} pages.")
            return

        for current_page in range(num_pages):# 在页码总数里循环当前页码
            if current_page == page_number:# 如果当前页码是要保留的页码
                page = reader.pages[current_page]# 就把当前页码定义为page
                writer.add_page(page)# 把page显示出来

        with open(output_path, 'wb') as output_file:
            writer.write(output_file)# 按照目录输出

        print(f"Page {page_number + 1} deleted successfully.")

# 开始实施
list_name=[]
path='D:/Mr.s/外文文献1'   #文件夹路径
listdir(path,list_name)# 将path内的非目录文件的地址,存入list_name中
page_number_to_delete = 0  # 要保留的页码(从0开始)

for current_path in list_name:
    delete_pdf_page(current_path, current_path, page_number_to_delete)



其中,需要注意,输入文件夹地址时候,分隔符是左斜线 /

后续完善:

处理某些文件夹时遇到问题:有些待处理的某些PDF文件上,可能使用了AES加密算法,而目前环境中缺少处理AES加密所需的库 PyCryptodome,因此需要先在cmd中安装 PyCryptodome 库:

pip install pycryptodome

之后对代码进行完善如下:

import os
import PyPDF2
from PyPDF2.errors import PdfReadError

def listdir(path, list_name):  # 传入存储的list
    for file in os.listdir(path):
        file_path = os.path.join(path, file)# 在path后面添加'\file',形成一个地址
        if os.path.isdir(file_path):#如果file_path是目录
            continue # listdir(file_path, list_name)
        else:
            list_name.append(file_path)# 把file_path添加在list后面

def delete_pdf_page(input_path, output_path, page_number):# 输入PDF文件路径,输出PDF文件路径,要保留的页码(从0开始)
    try:
        with open(input_path, 'rb') as input_file:# 打开输入路径下的文件,命名为input_file
            reader = PyPDF2.PdfReader(input_file)# 打开的文件用pdf打开,命名为reader
            
            if reader.is_encrypted:
                try:
                    reader.decrypt('')
                except Exception as e:
                    print(f"Failed to decrypt {input_path}: {e}")
                    return
            
            writer = PyPDF2.PdfWriter()
            num_pages = len(reader.pages)# 页码总数

            if page_number < 0 or page_number >= num_pages:
                print(f"Invalid page number. The PDF file has {num_pages} pages.")
                return

            for current_page in range(num_pages):# 在页码总数里循环当前页码
                if current_page == page_number:# 如果当前页码是要保留的页码
                    page = reader.pages[current_page]# 就把当前页码定义为page
                    writer.add_page(page)# 把page显示出来

            with open(output_path, 'wb') as output_file:
                writer.write(output_file)# 按照目录输出

            print(f"Page {page_number + 1} deleted successfully.")
    
    except PdfReadError as e:
        print(f"Error reading {input_path}: {e}")

# 开始实施
list_name=[]
path='D:/Mr.s/需要仅保留第一页'   #文件夹路径
listdir(path,list_name)# 将path内的非目录文件的地址,存入list_name中
page_number_to_delete = 0  # 要保留的页码(从0开始)

for current_path in list_name:
    delete_pdf_page(current_path, current_path, page_number_to_delete)

### 回答1: 要批量删除PDF文件的指定页,我们可以使用Python的PyPDF2库来实现。 首先,我们需要安装PyPDF2库。可以使用以下命令在终端安装: ``` pip install PyPDF2 ``` 在安装完库之后,我们可以通过以下代码来实现批量删除PDF的指定页: ```python import os from PyPDF2 import PdfReader, PdfWriter def delete_pages(input_file, output_file, pages): # 创建一个PdfReader对象,读取输入的PDF文件 pdf_reader = PdfReader(input_file) # 创建一个PdfWriter对象来写入输出的PDF文件 pdf_writer = PdfWriter() # 遍历输入PDF的每一页 for page_num in range(len(pdf_reader.pages)): # 如果当前页不在要删除的页列表,则将该页添加到PdfWriter if page_num not in pages: page = pdf_reader.pages[page_num] pdf_writer.add_page(page) # 将PdfWriter的内容写入到输出的PDF文件 with open(output_file, "wb") as f: pdf_writer.write(f) # 关闭PdfReader和PdfWriter对象 pdf_reader.close() pdf_writer.close() # 指定要删除的页码列表,比如要删除第2页和第4页,可以设置为[1, 3] pages_to_delete = [1, 3] # 指定输入的PDF文件路径和输出的PDF文件路径 input_pdf = "input.pdf" output_pdf = "output.pdf" # 调用函数进行批量删除指定页 delete_pages(input_pdf, output_pdf, pages_to_delete) ``` 在上述代码,我们传入输入的PDF文件路径、输出的PDF文件路径以及要删除的页码列表。代码会读取输入的PDF文件,逐页检查是否在要删除的页码列表,然后将不需要删除的页码添加到PdfWriter。最后,将PdfWriter的内容写入到输出的PDF文件。 请注意,上述代码适用于PyPDF2库的旧版本。如果您使用的是新版本的PyPDF2,代码可能需要进行一些更改。另外还需要注意的是,PyPDF2库有一些限制和局限性,对于某些特定的PDF文件可能无法正常工作。如有需要,您可以尝试其他的PDF处理库。 ### 回答2: 想要批量删除PDF文件的指定页,可以使用Python的PyPDF2模块来实现。以下是一个示例代码: ```python import PyPDF2 def delete_pages(input_pdf, output_pdf, pages_to_delete): input_file = open(input_pdf, 'rb') pdf = PyPDF2.PdfReader(input_file) output_file = open(output_pdf, 'wb') writer = PyPDF2.PdfWriter() for page_num in range(pdf.numPages): if page_num+1 not in pages_to_delete: writer.addPage(pdf.getPage(page_num)) writer.write(output_file) input_file.close() output_file.close() # 调用示例 delete_pages('input.pdf', 'output.pdf', [3, 5, 7]) ``` 在这个例子,我们首先导入了PyPDF2模块。`delete_pages`函数接收三个参数,input_pdf表示输入的PDF文件路径,output_pdf表示输出的PDF文件路径,pages_to_delete是一个列表,包含需要删除页面的页码。 在函数内部,我们首先打开输入PDF文件,并使用`PdfReader`函数创建一个PdfReader对象。然后,我们打开输出的PDF文件,使用`PdfWriter`创建一个PdfWriter对象。 接下来,我们遍历输入PDF的所有页面,如果当前页面不在需要删除的页码列表,就将该页面添加到输出的PDF文件。最后,使用`write`函数将结果写入输出文件。 最后示例代码的调用部分,我们将输入PDF文件设置为"input.pdf",输出PDF文件设置为"output.pdf",并指定需要删除页面为第3、5和7页。 ### 回答3: 使用Python进行批量删除PDF指定页的操作可以借助PyPDF2库。下面是一个简单的代码示例,以帮助您理解如何实现此功能: 首先,确保您已经安装了PyPDF2库。如果没有安装,可以通过在命令提示符运行以下命令来安装: pip install PyPDF2 然后,可以使用以下代码删除指定页: ```python from PyPDF2 import PdfFileWriter, PdfFileReader def delete_pages(input_pdf, output_pdf, pages): input_file = PdfFileReader(input_pdf) output_file = PdfFileWriter() for page_number in range(input_file.numPages): if page_number not in pages: output_file.addPage(input_file.getPage(page_number)) with open(output_pdf, 'wb') as f: output_file.write(f) # 示例用法: input_pdf = 'input.pdf' output_pdf = 'output.pdf' pages_to_delete = {2, 4, 6} # 要删除的页码,以集合形式提供 delete_pages(input_pdf, output_pdf, pages_to_delete) ``` 在上述示例,我们定义了一个名为`delete_pages`的函数,该函数接受输入PDF文件的路径、输出PDF文件的路径以及要删除的页码列表。函数使用`PdfFileReader`读取输入PDF文件,然后使用`PdfFileWriter`创建一个新的PDF文件对象。接下来,函数遍历输入PDF的所有页码,并检查当前页码是否在要删除的页码列表。如果不在列表,则将该页码添加到输出PDF文件。最后,将输出的PDF内容写入到指定的输出PDF文件。 请注意,页码是从0开始计数。在示例,我们要删除的页码是第2、4和6页,因此相应地设置了`pages_to_delete`变量。 希望这个简单的示例对您有所帮助,如果您需要更复杂的操作,可以参考PyPDF2文档进行扩展。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值