PyPDF2 PdfReadError: Could not read Boolean object

PyPDF2 PdfReadError: Could not read Boolean object

我在使用 PyPDF2 阅读某些 PDF 文件时遇到以下错误。由于这些文件的机密性,我不能分享它们,但我可以尝试提供有助于解决这个问题的信息。

堆栈跟踪 -

    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')

打印变量 word 打印字符串 trai,但我不确定这个字符串代表什么。

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

注意:请注意,这些 PDF 没有密码保护。

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

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

然后阅读 output.pdf 对我有用。我不确定如何预先确定 pdf 是否已加密(或处于此特定状态)。不过这个方案暂时解决了问题。