Python全能 PDF 工具:一行代码轻松合并、拆分、加密和解密文件!

liftword3周前 (05-04)技术文章16

简介:

PyPDF2 是一个 Python 库,用于操作 PDF 文件。它提供了多种功能,可以让你轻松地读取、写入、合并、拆分、旋转以及加密 PDF 文件等。PyPDF2 不支持修改已有的 PDF 内容(如文本编辑),但它可以在 PDF 文件的结构上进行很多处理,如提取文本、重新排列页面等。

import PyPDF2  # 导入 PyPDF2 库用于 PDF 操作
class PdfManager:
    def __init__(self, file_path=None):
        # 构造函数,初始化 PdfManager 类,可以选择传入一个文件路径
        self.file_path = file_path  # 存储传入的文件路径
        self.reader = None  # 初始化 PDF 读取器
        self.writer = PyPDF2.PdfWriter()  # 初始化 PDF 写入器

        if file_path:  # 如果传入了文件路径
            self._load_pdf(file_path)  # 调用内部方法加载 PDF 文件

    def _load_pdf(self, file_path):
        """加载 PDF 文件"""
        # 该方法会打开 PDF 文件并使用 PyPDF2 进行读取
        with open(file_path, 'rb') as file:  # 以二进制方式打开 PDF 文件
            self.reader = PyPDF2.PdfReader(file)  # 使用 PdfReader 读取文件内容

    def read_pdf(self):
        """读取 PDF 内容并返回其中的文本"""
        # 该方法会提取 PDF 文件中的所有文本内容
        if not self.reader:  # 如果文件未加载
            raise ValueError("PDF 文件未加载")  # 抛出错误

        text = ""  # 初始化文本变量,用来存储 PDF 提取的文本
        for page in self.reader.pages:  # 遍历所有页面
            text += page.extract_text()  # 提取页面中的文本并添加到 text 变量
        return text  # 返回提取的文本内容

    def merge_pdfs(self, pdf_list, output_path):
        """合并多个 PDF 文件"""
        # 该方法用于将多个 PDF 文件合并成一个文件
        merger = PyPDF2.PdfMerger()  # 初始化 PDF 合并器
        for pdf in pdf_list:  # 遍历传入的 PDF 文件列表
            merger.append(pdf)  # 将每个 PDF 文件添加到合并器中
        merger.write(output_path)  # 将合并后的文件写入到指定路径
        merger.close()  # 关闭合并器

    def split_pdf(self, output_folder):
        """拆分 PDF 文件"""
        # 该方法会将 PDF 文件拆分成多个单独的页面
        if not self.reader:  # 如果文件未加载
            raise ValueError("PDF 文件未加载")  # 抛出错误

        num_pages = len(self.reader.pages)  # 获取 PDF 文件中的页面数
        for page_num in range(num_pages):  # 遍历每一页
            writer = PyPDF2.PdfWriter()  # 创建一个新的 PDF 写入器
            writer.add_page(self.reader.pages[page_num])  # 将当前页添加到写入器
            output_path = f"{output_folder}/page_{page_num + 1}.pdf"  # 生成拆分后的文件路径
            with open(output_path, 'wb') as output_file:  # 以写入模式打开新文件
                writer.write(output_file)  # 将当前页写入新文件

    def rotate_pages(self, degrees):
        """旋转所有页面"""
        # 该方法会旋转 PDF 文件中的每一页
        if not self.reader:  # 如果文件未加载
            raise ValueError("PDF 文件未加载")  # 抛出错误

        for page in self.reader.pages:  # 遍历每一页
            page.rotate_clockwise(degrees)  # 按照指定角度顺时针旋转页面
            self.writer.add_page(page)  # 将旋转后的页面添加到写入器中

    def save_pdf(self, output_path):
        """保存 PDF 文件"""
        # 该方法会将操作后的 PDF 文件保存到指定路径
        with open(output_path, 'wb') as output_file:  # 以写入模式打开输出文件
            self.writer.write(output_file)  # 将写入器中的内容写入文件

    def encrypt_pdf(self, password, output_path):
        """加密 PDF 文件"""
        # 该方法会对 PDF 文件进行加密,只有输入密码才能打开
        if not self.reader:  # 如果文件未加载
            raise ValueError("PDF 文件未加载")  # 抛出错误

        for page in self.reader.pages:  # 遍历每一页
            self.writer.add_page(page)  # 将每一页添加到写入器

        self.writer.encrypt(password)  # 使用指定的密码加密 PDF 文件
        self.save_pdf(output_path)  # 将加密后的文件保存到指定路径

    def decrypt_pdf(self, password, output_path):
        """解密 PDF 文件"""
        # 该方法会对已加密的 PDF 文件进行解密
        if not self.reader:  # 如果文件未加载
            raise ValueError("PDF 文件未加载")  # 抛出错误

        if self.reader.decrypt(password):  # 尝试使用密码解密 PDF 文件
            for page in self.reader.pages:  # 如果解密成功,遍历每一页
                self.writer.add_page(page)  # 将解密后的页面添加到写入器
            self.save_pdf(output_path)  # 保存解密后的 PDF 文件
        else:  # 如果密码错误
            raise ValueError("密码错误,无法解密文件")  # 抛出错误

if __name__ == '__main__':
    # 示例用法:
    # 加载 PDF 文件并读取内容
    pdf_manager = PdfManager("example.pdf")  # 创建 PdfManager 对象并加载文件
    print(pdf_manager.read_pdf())  # 打印 PDF 文件的文本内容

    # 合并多个 PDF 文件
    pdf_manager.merge_pdfs(["file1.pdf", "file2.pdf"], "merged_output.pdf")  # 合并两个文件并保存

    # 拆分 PDF 文件
    pdf_manager.split_pdf("output_folder")  # 将 PDF 文件拆分为多个页面并保存

    # 旋转 PDF 文件页面并保存
    pdf_manager.rotate_pages(90)  # 顺时针旋转每一页 90 度
    pdf_manager.save_pdf("rotated_example.pdf")  # 保存旋转后的 PDF 文件

    # 加密 PDF 文件
    pdf_manager.encrypt_pdf("your_password", "encrypted_example.pdf")  # 使用密码加密 PDF 文件

    # 解密 PDF 文件
    pdf_manager.decrypt_pdf("your_password", "decrypted_example.pdf")  # 使用密码解密 PDF 文件并保存

注释说明:

  • 构造函数 (__init__):初始化时可以选择加载一个 PDF 文件。
  • 加载 PDF 文件 (_load_pdf):私有方法,用于读取并加载 PDF 文件。
  • 读取 PDF 内容 (read_pdf):提取 PDF 中的文本内容。
  • 合并 PDF 文件 (merge_pdfs):将多个 PDF 文件合并成一个新的 PDF 文件。
  • 拆分 PDF 文件 (split_pdf):将 PDF 文件拆分成多个单独的页面文件。
  • 旋转页面 (rotate_pages):旋转 PDF 文件中的所有页面。
  • 保存 PDF 文件 (save_pdf):将当前操作后的 PDF 文件保存到指定路径。
  • 加密 PDF 文件 (encrypt_pdf):给 PDF 文件加密,需要设置密码。
  • 解密 PDF 文件 (decrypt_pdf):使用密码解密加密过的 PDF 文件。

相关文章

零基础玩转Python生成PDF!5分钟实战教程助你轻松上头条

一、为什么Python生成PDF能成为流量密码?办公自动化刚需:90%企业需要自动化报表生成能力知识付费必备:电子书、付费教程制作核心技能数据可视化新场景:动态生成可视化报告成趋势头条内容创新:原创技...

高效办公!Python 批量生成PDF文档是如何做到的?

前言:日常办公中,经常会使用PDF文档,难免需要对PDF文档进行编辑,有时候PDF文档中的大部分内容都是一样的,只是发送对象不同。这种模板套用的场景下,使用Python进行自动化就尤为方便,用最短的时...

10分钟实现PDF转Word神器!看DeepSeek如何用Python解放打工人

开篇痛点每个被PDF折磨过的职场人都懂——领导发来的扫描件要修改,手动抄到Word需要2小时;网上下载的报告想复制数据,却变成乱码…今天我们用Python+DeepSeek,10分钟打造一个智能转换工...

AI启动!教你写一个PDF免费转成word文件程序!

编程项目轻松学,代码生成一步到位。AI启动PDF转成word文档so easy!·首先打开豆包,选择AI编程,输入用Python写一个PDF转换成word的程序,啪啦啪啦啪啦全力输出。·要输出桌面,运...

pdfkit | 利用python实现html文件转pdf

在用jupyter notebook写代码文档的时候,有时需要导出pdf版本,但jupyter会报错。我在想,除了网上的debug方法,还没有其他方案可以生成pdf。度娘搜了下,很多博客推荐Pytho...

JPG转PDF还要收费?20行Python轻松实现!

昨天,由于工作需要将JPG图片转为PDF才能上传网站,打开某国产热门软件,转换时竟然要冲会员才能转,好吧,打开Python,几分钟弄了一段代码,几秒钟完成转化,完美!附完整代码,需要的朋友可以复制直接...