PyPDF2 PdfReadError:无法读取布尔对象

时间:2017-11-14 09:19:33

标签: python pypdf2

使用PyPDF2读取某些PDF文件时出现以下错误。由于这些文件的机密性质,我无法分享,但我可以尝试提供有助于解决此问题的信息。

Stacktrace -

    inputpdf = PdfFileReader(open(pdfpath, "rb"), strict=False)
  File "/home/tata/.virtualenvs/obu/local/lib/python2.7/site-packages/PyPDF2/pdf.py", line 1084, in __init__
    self.read(stream)
  File "/home/tata/.virtualenvs/obu/local/lib/python2.7/site-packages/PyPDF2/pdf.py", line 1732, in read
    num = readObject(stream, self)
  File "/home/tata/.virtualenvs/obu/local/lib/python2.7/site-packages/PyPDF2/generic.py", line 74, in readObject
    return BooleanObject.readFromStream(stream)
  File "/home/tata/.virtualenvs/obu/local/lib/python2.7/site-packages/PyPDF2/generic.py", line 137, in readFromStream
    raise utils.PdfReadError('Could not read Boolean object')
PdfReadError: Could not read Boolean object

似乎从generic.py中的以下函数引发了异常:

def readFromStream(stream):
    word = stream.read(4)
    if word == b_("true"):
        return BooleanObject(True)
    elif word == b_("fals"):
        stream.read(1)
        return BooleanObject(False)
    else:
        raise utils.PdfReadError('Could not read Boolean object')

打印变量单词会打印字符串 trai ,但我不确定此字符串代表什么。

由于PyPDF2项目似乎没有维护,有人可以帮我找到解决方案吗?

注意:请注意,这些PDF不受密码保护。

1 个答案:

答案 0 :(得分:0)

似乎所有pdf都以某种方式加密。使用PyPDF2的github存储库中本期#53中引用的解决方案,我使用以下命令生成另一个pdf(原始pdf的解密版本) -

qpdf --password= --decrypt input.pdf output.pdf

然后阅读output.pdf为我工作。我不确定如何事先确定pdf是否加密(或在此特定状态下)。但是这个解决方案暂时解决了这个问题。