Je suis en train d'extraire du texte à partir d'un grand nombre de PDF en utilisant les liaisons python PDFMiner. Le module que j'ai écrit fonctionne pour de nombreux PDF, mais j'obtiens cette erreur quelque peu cryptique pour un sous-ensemble de PDF :
Traceback de l'interpréteur 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?
Évidemment, j'ai immédiatement vérifié si ces PDF étaient corrompus, mais ils peuvent être lus sans problème.
Existe-t-il un moyen de lire ces PDF malgré l'absence d'un objet racine ? Je ne suis pas sûr de savoir quoi faire à partir de là.
Merci beaucoup !
Édition :
J'ai essayé d'utiliser PyPDF dans le but d'obtenir des diagnostics différentiels. La trace de la pile est ci-dessous :
In [50]: pdf = pyPdf.PdfFileReader(file(fail, "rb"))
---------------------------------------------------------------------------
PdfReadError Traceback (most recent call last)
/home/louist/Desktop/pdfs/indir/ in ()
----> 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 a suggéré que peut-être PDFMiner s'est arrêté de parser après avoir atteint le premier caractère EOF. Cela semblerait suggérer le contraire, mais je suis vraiment perdu. Des idées ?