PyPDF2,为什么会出现索引错误?列表索引超出范围

时间:2018-06-20 14:38:11

标签: python-3.x pypdf2

我一直在Al Sweigart的著作《自动化无聊的东西》中学习,却迷失了索引错误。我正在使用PyPDF2 tring打开一个加密的PDF文档。我知道这本书是2015年的书,所以我去https://pythonhosted.org/PyPDF2/PdfFileReader.html看看我是否遗漏了什么,而且一切似乎都是一样的,至少从我的判断中可以看出。所以我不确定这是怎么回事。这是我的代码...

import PyPDF2
pdfReader = PyPDF2.PdfFileReader(open('encrypted.pdf', 'rb'))
pdfReader.isEncrypted
True
pdfReader.getPage(0)
Traceback (most recent call last):
    File "<pyshell#65>", line 1, in <module>
pdfReader.getPage(0)
    File "/home/user67/.local/lib/python3.6/site-packages/PyPDF2/pdf.py", line 1176, in getPage
self._flatten()
    File "/home/user67/.local/lib/python3.6/site-packages/PyPDF2/pdf.py", line 1505, in _flatten
catalog = self.trailer["/Root"].getObject()
    File "/home/user67/.local/lib/python3.6/site-packages/PyPDF2/generic.py",    line 516, in __getitem__
return dict.__getitem__(self, key).getObject()
    File "/home/user67/.local/lib/python3.6/site-packages/PyPDF2/generic.py", line 178, in getObject
return self.pdf.getObject(self).getObject()
    File "/home/user67/.local/lib/python3.6/site-packages/PyPDF2/pdf.py", line 1617, in getObject
raise utils.PdfReadError("file has not been decrypted")
PyPDF2.utils.PdfReadError: file has not been decrypted
pdfReader.decrypt('rosebud')
1
pageObj = pdfReader.getPage(0)
Traceback (most recent call last):
    File "<pyshell#67>", line 1, in <module>
pageObj = pdfReader.getPage(0)
    File "/home/user67/.local/lib/python3.6/site-packages/PyPDF2/pdf.py",line 1177, in getPage
return self.flattenedPages[pageNumber]
IndexError: list index out of range

在问我一个问题之前,我在Google上进行了一些搜索,发现此链接带有“建议的修正” https://github.com/mstamy2/PyPDF2/pull/359。但是,我是新来的,以了解解决方法。我不能以此为首。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

我知道了。该问题是由在解密IDLE shell中的文件之前运行“ pdfReader.getPage(0)”引起的。如果您删除该行,或者在收到错误后不使用该行重新开始,它将按预期运行。

答案 1 :(得分:0)

我得到了同样的错误。我在控制台上工作,在解密之前我使用了“ pdf.getPage(0)”。 解密前请勿使用“ getPage(#)”。

使用如下代码:

what I have:
    <td width = 150 bgcolor = "colorstatus">status</td>
    <td width = 150 bgcolor = "colorstack">stack</td>

What I need from what I have:
    <td width = 150 bgcolor = "red">status</td>
    <td width = 150 bgcolor = "red">stack</td>