使用io.BytesIO流而不是PDF文件时,pytest失败

时间:2018-05-08 08:54:22

标签: python-3.x stream pdfminer

我正在运行pytest来检查使用pdfminer将PDF转换为文本的函数。该函数在执行$ python function.py时有效,结果就是我期望的结果。我还应该指出,我在解析文件时使用了一个流(io.BytesIO),这个流是我的测试失败的原因。 运行pytest函数失败,出现PDFSyntaxError。

# function.py

...
from pdfminer.pdfparser import PDFParser
from pdfminer.document import PDFDocument


req = requests.get(url_pointing_to_pdf_file)
pdf = io.BytesIO(req.content)

parser = PDFParser(pdf)
document = PDFDocument(parser, password=None) # this fails
...

pytest调用pdfdocument.py中的 init 方法(pdfminer库的一部分)并在此处停止:

for xref in xrefs:
    trailer = xref.get_trailer()
    ...
    if 'Root' in trailer:
        self.catalog = dict_value(trailer['Root'])
        break
else:
    raise PDFSyntaxError('No /Root object! - Is this really a PDF?')
...

这是测试函数失败时pytest显示的内容:

tests/test_function.py:11:
----------------------------------------------------
.../function.py:157: in function
**document = PDFDocument(parser, password=None)**

...

E    pdfminer.pdfparser.PDFSyntaxError: No /Root object! - Is this really a PDF?
lib/python3.6/site-packages/pdfminer/pdfdocument.py:583:PDFSyntaxError

使用存储在与function.py相同的目录中的PDF文件运行测试是成功的,因此罪魁祸首是下载的PDF文件的io.BytesIO格式。由于我想在function.py中使用一个流,我想知道是否有更好的方法来做到这一点。

0 个答案:

没有答案