【发布时间】:2019-02-08 17:00:47
【问题描述】:
我不理解这个错误。我想打开一个 pdf 并循环浏览页面,但我遇到了这个异常,我通过谷歌搜索找不到太多。
这是失败的例子
from pdfminer.pdfparser import PDFParser, PDFDocument
from os.path import basename, splitext
file = 'tmpfiles/tmpfile.pdf'
filename = splitext(basename(file))[0]
fp = open(file, 'rb')
parser = PDFParser(fp)
doc = PDFDocument(parser)
num_page = 0
text = ""
pages = doc.get_pages()
for p in pages:
print("do whatever")
这是回溯
Traceback (most recent call last):
File "test.py", line 20, in <module>
for p in pages:
File "/home/.../anaconda3/lib/python3.6/site-packages/pdfminer/pdfparser.py", line 544, in get_pages
raise PDFException('PDFDocument is not initialized')
pdfminer.pdftypes.PDFException: PDFDocument is not initialized
我有 python 3.6
在这样做之前,我会像这样保存 pdf 文件,因为我的内容是 base64 编码的字符串
decoded = base64.b64decode(content_string)
with open(tmpfiles_path+'tmpfile.pdf', 'wb') as fout:
fout.write(decoded)
可能是文件在保存时受到了一些保护吗?
【问题讨论】:
-
根据文档 (media.readthedocs.org/pdf/pdfminer-docs/latest/…) 判断,2014 年似乎发生了变化,无需调用
initialize,但也许您正在运行旧版本或其他什么?尝试在doc = PDFDocument(parser)之后调用doc.initialize()看看是否有效? -
我做了 doc = doc.initialize() 现在它说 NoneType 对象没有属性 get_pages。如果我只做 doc.initialize() 我会得到和以前一样的错误
-
是的,我相信是后者——initialize 可能会初始化对象,而不是创建一个新对象。您是否尝试过使用绝对没有保护或奇怪属性作为完整性检查的 PDF?如果没有,请尝试使用 cloud.google.com/files/CloudStorage.pdf? 之类的内容运行它
-
好吧,显然我有一个奇怪的 pdfminer 版本,因为我刚刚安装了 pdfminer.six 并更改了几行代码,现在它可以工作了。感谢您的帮助!
-
没问题!考虑在下面将您的解决方案作为答案发布并接受它 - 您会得到一些分数,它可以帮助以后遇到此帖子的人
标签: python-3.x exception pdfminer pdfparser