Получение неожиданного EOF с Python PDFMiner при создании объекта документа

Я пытаюсь проанализировать PDF-файл в каталоге, используя PDFMiner, и я начинаю с репликации первого скрипта из документации, содержащейся здесь. Код (повторяется ниже) открывает файл и создает объект синтаксического анализатора, но выдает ошибку "Неожиданный EOF" при попытке создать объект документа. Любая помощь в понимании, почему это так, будет принята с благодарностью. В частности, существуют ли типы PDF-файлов, которые не могут быть проанализированы таким образом?

from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfpage import PDFPage
from pdfminer.pdfpage import PDFTextExtractionNotAllowed
from pdfminer.pdfinterp import PDFResourceManager
from pdfminer.pdfinterp import PDFPageInterpreter
from pdfminer.pdfdevice import PDFDevice

import os
import re

fp = open(os.getcwd() + '\\' + os.listdir(os.getcwd())[0])

parser = PDFParser(fp)
doc = PDFDocument(parser) #This is the problem, getting an "unexpected EOF" error

if not doc.is_extractable:
    raise PDFTextExtractionNotAllowed

rsrcmgr = PDFResourceManager()
device = PDFDevice(rsrcmgr)
interpreter = PDFPageInterpreter(rsrcmgr, device)

for page in PDFPage.create_pages(doc):
    interpreter.process_page(page)

Это приводит к следующей ошибке:

%run scrape_psr.py
---------------------------------------------------------------------------
PSEOF                                     Traceback (most recent call last)
C:\Users\Rob Lantz\Anaconda\lib\site-packages\IPython\utils\py3compat.pyc in execfile(fname, glob, loc)
    195             else:
    196                 filename = fname
--> 197             exec compile(scripttext, filename, 'exec') in glob, loc
    198     else:
    199         def execfile(fname, *where):


     22 
     23 parser = PDFParser(fp)
---> 24 doc = PDFDocument(parser) #This is the problem, getting an "unexpected EOF" error
     25 
     26 if not doc.is_extractable:

C:\Users\Rob Lantz\Anaconda\lib\site-packages\pdfminer-20140328-py2.7.egg\pdfminer\pdfdocument.pyc in __init__(self, parser, password, caching, fallback)
    313             parser.fallback = True
    314             xref = PDFXRefFallback()
--> 315             xref.load(parser)
    316             self.xrefs.append(xref)
    317         for xref in self.xrefs:

C:\Users\Rob Lantz\Anaconda\lib\site-packages\pdfminer-20140328-py2.7.egg\pdfminer\pdfdocument.pyc in load(self, parser, debug)
    173             # expand ObjStm.
    174             parser.seek(pos)
--> 175             (_, obj) = parser.nextobject()
    176             if isinstance(obj, PDFStream) and obj.get('Type') is LITERAL_OBJSTM:
    177                 stream = stream_value(obj)

C:\Users\Rob Lantz\Anaconda\lib\site-packages\pdfminer-20140328-py2.7.egg\pdfminer\psparser.pyc in nextobject(self)
    555         """
    556         while not self.results:
--> 557             (pos, token) = self.nexttoken()
    558             #print (pos,token), (self.curtype, self.curstack)
    559             if isinstance(token, (int, long, float, bool, str, PSLiteral)):

C:\Users\Rob Lantz\Anaconda\lib\site-packages\pdfminer-20140328-py2.7.egg\pdfminer\psparser.pyc in nexttoken(self)
    480     def nexttoken(self):
    481         while not self._tokens:
--> 482             self.fillbuf()
    483             self.charpos = self._parse1(self.buf, self.charpos)
    484         token = self._tokens.pop(0)

C:\Users\Rob Lantz\Anaconda\lib\site-packages\pdfminer-20140328-py2.7.egg\pdfminer\psparser.pyc in fillbuf(self)
    213         self.buf = self.fp.read(self.BUFSIZ)
    214         if not self.buf:
--> 215             raise PSEOF('Unexpected EOF')
    216         self.charpos = 0
    217         return

PSEOF: Unexpected EOF

Изменить: Некоторые предположили, что проблема с таблицей внешних ссылок, связанных с вопросом здесь. Я не уверен, так как в этой трассировке ошибок не упоминается "Неожиданный EOF", а скорее "Маркер EOF не найден". Такое решение может быть верным в том смысле, что оно, по сути, говорит о том, что пакеты Python в том виде, в каком они существуют сейчас, плохо подходят для анализа беспорядка, который является стандартом PDF-файлов.

0 ответов

Другие вопросы по тегам