首页 > 编程语言 >python解密带密码的pdf文件

python解密带密码的pdf文件

时间:2024-01-30 20:23:18浏览次数:28  
标签:文件 python 解密 filename reader print 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,解密,filename,reader,print,pdf
From: https://www.cnblogs.com/c-x-a/p/17997876

相关文章

  • anaconda+jupyter书写python简简简简简易安装教程,浏览器编写执行Python程序
    anaconda+jupyter书写python简简简简简易安装教程,浏览器编写执行Python程序目录 1、安装anaconda2、打开JupyterNotebook3、创立ipynb文件编写python代码 4、导出python文件(.py)1、安装anaconda下载地址:www.anaconda.com点击Download会下载一个大约600M的安装包,......
  • Pdfium.Net.Free 一个免费的Pdfium的 .net包装器--添加图片
    项目地址:Pdfium.Net:https://github.com/1000374/Pdfium.NetPdfiumViewer:https://github.com/1000374/PdfiumViewerPdfium添加图片有三个重载,根据入参可对添加的图片进行缩放、旋转、裁切1.添加图片路径到pdf///<summary>///addImage///</summary>///<......
  • python 一个能统计txt文件的每个单词出现次数的python程序; 统计txt文件里每个汉字出
    输出的时候排列顺序是从多到少,需要去除txt中的特殊符号,注意是英文txt文件用来自制词汇包的hhhimportrefromcollectionsimportCounterdefcount_words(file_path):#读取文本文件内容withopen(file_path,'r',encoding='utf-8')asfile:text=file.read......
  • [office] excel2003文件转成pdf文件的方法
    Excel中经常需要转换成PDF文件格式,Excel具体该如何转换成PDF呢?接下来是小编为大家带来的excel2003文件转成pdf文件的方法,供大家参考。excel2003文件转成pdf文件的方法:Excel转换PDF格式步骤1:下载安装pdf虚拟打印机Excel转换PDF格式步骤2:文件】【打印】,打印机选择pd......
  • python自定义装饰器
    被装饰函数带参数或不带参数#coding=utf8#自定义装饰器函数,需使用嵌套函数importtimedefdecorator_foo(func):definner_func(*args,**kwargs):start_time=time.time()func(*args,**kwargs)print('runfunccost{}s'.format(time.......
  • python自定义装饰器
    被装饰函数带参数或不带参数#coding=utf8#自定义装饰器函数,需使用嵌套函数importtimedefdecorator_foo(func):definner_func(*args,**kwargs):start_time=time.time()func(*args,**kwargs)print('runfunccost{}s'.format(time.......
  • [word] 100份PDF文档转换成Word,我只要10秒,不花钱就能搞定
    关注职场办公,分享实用干货,洞察科技资讯,这里是「职场科技范」。当领导发了100份PDF文档给你,并且要求在下班前整理成Word给他,你是不是已经准备提桶跑路了?而我只要10秒就能轻松搞定。方法一、Ctrl+C/V最简单的方法肯定是复制粘贴,操作简单,转换结果就是,内容基本完整保留,排版开始混乱,图片......
  • vue3+js使用插件实现pc端导出pdf
    1.安装jspdf插件:npminstalljspdf--save2.安装html2canvas插件:npminstall html2canvas--save 3.代码:<el-row><el-buttontype="primary"@click="downloadPDF">导出PDF</el-button></el-row><d......
  • Python中HTTPException(基于werkzeug.exceptions包)
    当我们在开发HTTP服务时(接口服务),由于很多从内部引发的Python异常,会触发标准HTTP非200响应的视图。为了让前端有着更好的视图体验(如果因为内部异常,会返回给前端/调用方更好的一个页面/返回)。对于我们来说,给予调用方一个固定的返回格式时非常重要的(因此通过HTTPException......
  • python之常用标准库-log
    log级别:debug(),info(),warning(),error()andcritical()5个级别,最低为debug,最高位criticallog标准输出格式:%(name)sLogger的名字%(levelno)s数字形式的日志级别%(levelname)s文本形式的日志级别%(pathname)s调用日志输出函数的模块的完整......