# # 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解密帶密碼的pdf文件
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.