python解密带密码的pdf文件

# # coding: utf-8
#
# # 用来存储一些通用模块
from PyPDF2 import PdfReader  # pdf的读取方法
from PyPDF2 import PdfWriter  # pdf的写入方法
from Crypto.Cipher import AES  # 高加密的方法,要引入不然会报错


def get_reader(filename, password):  # 读取pdf的方法(自定义函数)
    try:
        old_file = open(filename, 'rb')
        print('解密开始...')
    except Exception as err:
        return print('文件打开失败!' + str(err))

    # 如果是python2将PdfReader改为PdfFileReader
    pdf_reader = PdfReader(old_file, strict=False)  # 读取pdf文件

    # 如果是python2将is_encrypted改为isEncrypted
    if pdf_reader.is_encrypted:  # 解密操作(以下操作是自适应,不会展示在终端中)
        if password is None:
            return print('文件被加密,需要密码!--{}'.format(filename))
        else:
            if pdf_reader.decrypt(password) != 1:
                return print('密码不正确!--{}'.format(filename))
    elif old_file in locals():
        old_file.close()  # 如果pdf文件已经在本地了就关闭
    return pdf_reader  # 返回读出pdf的值


def deception_pdf(filename, password, decrypted_filename=None):  # 生成新pdf的方法(自定义函数)
    print('正在生成解密...')
    pdf_reader = get_reader(filename, password)  # 得到传入的文件名,和密码(如果密码没有可以不填)
    if pdf_reader is None:
        return print("无内容读取")

    # 如果是python2将is_encrypted改为isEncrypted
    elif not pdf_reader.is_encrypted:
        return print('文件没有被加密,无需操作')

    # 如果是python2将PdfWriter改为PdfFileWriter
    pdf_writer = PdfWriter()  # 写pdf(记录pdf内容)

    # 如果是python2将append_pages_from_reader改为appendPagesFromReader
    pdf_writer.append_pages_from_reader(pdf_reader)

    if decrypted_filename is None:  # 创建解密后的pdf文件和展示文件的路径
        decrypted_filename = "".join(filename.split('.')[:-1]) + '_' + '已解密' + '.pdf'
        print("解密文件已生成:{}".format(decrypted_filename))
    # 写入新文件
    pdf_writer.write(open(decrypted_filename, 'wb'))


if __name__ == '__main__':
    # 逗号前面的为需要解密的pdf文件路径,后面的''里面为密码,如果不知道就用不填
    deception_pdf('ssss.pdf', '')

本文作者:一起来学python

本文链接:https://www.cnblogs.com/c-x-a/p/17997876

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   公众号python学习开发  阅读(389)  评论(0编辑  收藏  举报
历史上的今天:
2023-01-30 frida stalker
2023-01-30 binwalk提取文件
2020-01-30 python判断链表是否有环
2020-01-30 单链表python和go的代码
2019-01-30 events.py 知识点记录
2019-01-30 asyncio之asyncio.run
2019-01-30 网页块元素定位建议使用的xpath方式
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起