from PyPDF2 import PdfFileReader, PdfFileWriter
# 读取文件
pdf_reader = PdfFileReader("_傅雷家书_1606477755.pdf")
# 解密
pdf_reader.decrypt("qp22")
pdf_writer = PdfFileWriter()
for page in range(pdf_reader.getNumPages()):
pdf_writer.addPage(pdf_reader.getPage(page))
# 未加密pdf
with open("encrypted.pdf", "wb") as out:
pdf_writer.write(out)
上面是我COPY的利用PyPDF2 移除PDF密码的一段程序;
但是当我运行之后
image.png
查了一下,网友说:
所以原因就在于:
1)这个被加密的pdf可能是从高版本的acrobot中来的,所以对应的加密算法代号为‘4’
2)然而,现有的pypdf2模块并只支持加密算法代号为‘1’或者‘2’的pdf加密文件,所以才会报这样的错。
那怎么解决这个错误呢?
我觉得吧,这都是因为pypdf2没有更新(在github上看到的讨论是这个模块快要被放弃维护了,以后打算出pypdf3),所以这才会导致这种不兼容错误吧。
所以只能通过别的途径来破解密码了,或者说pypdf2的解密能力有限,我们也可以试试用更低版本的Adobe Acrobat,看看能不能解密成功。
PyPDF3我也试过了,还是不能解决这个问题;
继续搜索,发现知乎有这样一个帖子:
https://zhuanlan.zhihu.com/p/32968668
于是我下载了qpdf
http://www.opdown.com/soft/108452.html
解压后是这样一堆
把需要转换的PDF文件aa.pdf粘到这里面
运行命令
E:\Python\移除pdf密码\qpdf-8.2.1\bin>qpdf --decrypt aa.pdf bb.pdf
得到结果
aa.pdf: invalid password
说无效的密码,那么把密码加上就行了吧,怎么输入密码呢?参考一下
image.png
再试试
E:\Python\移除pdf密码\qpdf-8.2.1\bin>qpdf --decrypt --password=qp22 aa.pdf bb.pdf
这回成功了!
顺利地得到了无密码的文件bb.pdf!!!
网友评论