用解密PDF pdf_reader.decrypy(密码)总会报错。
原因就在于:
1)这个被加密的pdf可能是从高版本的acrobot中来的,所以对应的加密算法代号为‘4’
2)然而,现有的pypdf2模块并只支持加密算法代号为‘1’或者‘2’的pdf加密文件,所以才会报这样的错。
这里我们采用更高级的pickpdf库来解密。
import pikepdf
pdf = pikepdf.open('book.pdf',password='')
pdf.save('book_without_pass.pdf')
代码如下:
import pikepdf
import os
def get_filelist(path):
Filelist = []
for home, dirs, files in os.walk(path):
for filename in files:
# 文件名列表,包含完整路径
if ".pdf" in filename:
Filelist.append(os.path.join(home, filename))
return Filelist
def reclosed(fn, passwd):
pdf = pikepdf.open(fn, password=passwd)
dir_name = os.path.dirname(fn)
os_name = os.path.basename(fn).split('.')[0]+'解密.pdf'
pdf.save(os.path.join(dir_name, os_name))
pdf.close()
def removal(fn):
os.remove(fn)
if __name__ == "__main__":
path = input('请输入目标路径:')
password = input('请输入密码:')
filelist = get_filelist(path)
for file in filelist:
print('正在解密:', file)
reclosed(fn=file, passwd=password)
以上就是本次全部内容,如果觉得有帮助,还请点赞呀!