首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用PyPDF2解密PDF?

如何使用PyPDF2解密PDF?
EN

Stack Overflow用户
提问于 2014-10-07 18:39:46
回答 6查看 32.2K关注 0票数 20

目前,我正在使用PyPDF2作为依赖项。

我遇到了一些加密文件,并按照通常的方式处理它们(在下面的代码中):

代码语言:javascript
复制
from PyPDF2 import PdfReader

reader = PdfReader(pdf_filepath)
if reader.is_encrypted:
    reader.decrypt("")
    print(len(reader.pages))

我的文件路径看起来类似于"~/blah/FDJKL492019 21490,LFS.pdf“PDF.decrypt("")返回1,这意味着它是成功的。但是,当它点击print PDF.getNumPages()时,仍然会引发错误"PyPDF2.utils.PdfReadError: File尚未解密“。

如何消除此错误?我可以通过双击打开PDF文件(默认情况下用Adobe打开)。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2014-10-07 19:12:22

要回答我自己的问题:如果您的文件名中有任何空格,那么尽管返回了成功的代码,PyPDF 2解密函数最终还是会失败。在通过PyPDF2运行PDF之前,尝试在命名PDF时坚持使用下划线。

例如,

而不是"FDJKL492019 21490,LFS.pdf“做类似于"FDJKL492019_21490_,LFS.pdf”之类的事情。

票数 11
EN

Stack Overflow用户

发布于 2015-08-24 21:11:05

此错误可能是由于pdf上128位AES加密造成的,请参阅查询--是否有办法绕过pdf上的安全限制?

一个解决方法是用"qpdf“解密所有isEncrypted pdfs。

代码语言:javascript
复制
qpdf --password='' --decrypt input.pdf output.pdf

即使您的PDF没有显示密码保护,它仍然可能是加密的没有密码。上面的片段假设情况是这样的。

票数 19
EN

Stack Overflow用户

发布于 2018-01-21 08:26:11

以下代码可以解决此问题:

代码语言:javascript
复制
import os

from PyPDF2 import PdfReader

filename = "example.pdf"
reader = PdfReader(filename)
if reader.is_encrypted:
    try:
        reader.decrypt("")
        print("File Decrypted (PyPDF2)")
    except:
        command = (
            "cp "
            + filename
            + " temp.pdf; qpdf --password='' --decrypt temp.pdf "
            + filename
            + "; rm temp.pdf"
        )
        os.system(command)
        print("File Decrypted (qpdf)")
        reader = PdfReader(filename)
else:
    print("File Not Encrypted")
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26242952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档