Разбор PDF без объекта /Root с помощью PDFMiner

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

трассировка стека ipython:

/usr/lib/python2.7/dist-packages/pdfminer/pdfparser.pyc in set_parser(self, parser)
    331                 break
    332         else:
--> 333             raise PDFSyntaxError('No /Root object! - Is this really a PDF?')
    334         if self.catalog.get('Type') is not LITERAL_CATALOG:
    335             if STRICT:

PDFSyntaxError: No /Root object! - Is this really a PDF?

Конечно, я сразу же проверил, не повреждены ли эти PDF-файлы, но они прекрасно читаются.

Есть ли способ прочитать эти PDF-файлы, несмотря на отсутствие корневого объекта? Я не слишком уверен, куда идти отсюда.

Большое спасибо!

Изменить:

Я попытался использовать PyPDF в попытке провести дифференциальную диагностику. Трассировка стека ниже:

In [50]: pdf = pyPdf.PdfFileReader(file(fail, "rb"))
---------------------------------------------------------------------------
PdfReadError                              Traceback (most recent call last)
/home/louist/Desktop/pdfs/indir/<ipython-input-50-b7171105c81f> in <module>()
----> 1 pdf = pyPdf.PdfFileReader(file(fail, "rb"))

/usr/lib/pymodules/python2.7/pyPdf/pdf.pyc in __init__(self, stream)
    372         self.flattenedPages = None
    373         self.resolvedObjects = {}
--> 374         self.read(stream)
    375         self.stream = stream
    376         self._override_encryption = False

/usr/lib/pymodules/python2.7/pyPdf/pdf.pyc in read(self, stream)
    708             line = self.readNextEndLine(stream)
    709         if line[:5] != "%%EOF":
--> 710             raise utils.PdfReadError, "EOF marker not found"
    711 
    712         # find startxref entry - the location of the xref table


PdfReadError: EOF marker not found

Quonux предположил, что, возможно, PDFMiner прекратил синтаксический анализ после достижения первого символа EOF. Казалось бы, это говорит об обратном, но я очень невежественен. есть идеи?

11
задан Pale Blue Dot 13 July 2012 в 21:24
поделиться