pyPDF

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
pcat
User
Beiträge: 4
Registriert: Freitag 2. September 2011, 17:01

Hallo, ich habe folgendes Problem und bitte um Hilfe.

Ich möchte ganz einfach mit pyPDF arbeiten und versuche jetzt schon seit einiger Zeit, die einfachsten ersten Schritte zu meistern. Ich habe schon eine Weile gegoogelt, aber keine Lösung gefunden, deshalb meine Frage an euch.

Also,
in pyPdf ist es möglich, einfach nur die Pdfs zu lesen und dann die Infos, wie Autor, Titel etc., zurück zu bekommen.
Doch da scheitert es bei mir schon.
Ich gebe ein:

>>> from pyPdf import Pd
>>> p = r 'myfile.pdf'
>>> pdf = PdfFileReader(file(p, 'r'))


Dann kommt folgende Fehlermeldung.

Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
pdf = PdfFileReader(file(p, 'r'))
File "C:\Python26\lib\site-packages\pyPdf\pdf.py", line 374, in __init__
self.read(stream)
File "C:\Python26\lib\site-packages\pyPdf\pdf.py", line 707, in read
raise utils.PdfReadError, "EOF marker not found"
PdfReadError: EOF marker not foundfFileReader

Das konnte ich fixen, indem ich den EOF marker hinzugefügt habe, wie hier beschrieben: http://lindaocta.com/?p=114

Aber dann bekomme ich folgende Fehlermeldung:
>>> pdf = PdfFileReader(file(p, 'r'))

Traceback (most recent call last):
File "<pyshell#8>", line 1, in <module>
pdf = PdfFileReader(file(p, 'r'))
File "C:\Python26\lib\site-packages\pyPdf\pdf.py", line 374, in __init__
self.read(stream)
File "C:\Python26\lib\site-packages\pyPdf\pdf.py", line 711, in read
startxref = int(line)
ValueError: invalid literal for int() with base 10: '%O'

Ich habe mir den Code entsprechend angeschaut, aber nichts finden können.
Es würde mir sehr sehr helfen, wenn ihr eine Lösung hättet.

Vielen Dank!
BlackJack

@pcat: Ändert sich etwas wenn Du die Dateien im Binärmodus öffnest? Das macht unter Windows ja einen Unterschied.
pcat
User
Beiträge: 4
Registriert: Freitag 2. September 2011, 17:01

hm, schon, aber dennoch:

>>> pdf = PdfFileReader(file(p, 'rb'))

Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
pdf = PdfFileReader(file(p, 'rb'))
File "C:\Python26\lib\site-packages\pyPdf\pdf.py", line 374, in __init__
self.read(stream)
File "C:\Python26\lib\site-packages\pyPdf\pdf.py", line 711, in read
startxref = int(line)
ValueError: invalid literal for int() with base 10: '%%EOF'

Liegts am EOF hinzufügen? pyPdf braucht das.
BlackJack

@pcat: Hast Du denn noch das Original-PDF? Vielleicht hat er ja die Endmarkierung auch nur nicht gefunden weil die Datei irgendwann einmal als Textdatei verarbeiten wurde und dabei dann kaputt gegangen ist.
pcat
User
Beiträge: 4
Registriert: Freitag 2. September 2011, 17:01

Das ist das Original, ja. Beim Googlen hab ich gefunden, dass EOF schon seit ner Weile nicht mehr gebraucht wird und deshalb auch nicht markiert wird. Deshalb wollt ichs ja dazu fügen.
Ich habs mit mehreren Files versucht, immer das gleiche Ergebnis.
BlackJack

@pcat: Jetzt bin ich ein wenig verwirrt — ich denke beim Original fehlt das '%%EOF', dann kann der letzte Traceback aber nicht vom Original sein, weil der sich ja gerade darüber beschwert, dass diese Zeichenkette nicht in eine Zahl umgewandelt werden kann.
pcat
User
Beiträge: 4
Registriert: Freitag 2. September 2011, 17:01

Hm, also, erst beschwert er sich über fehlendes EOF, dann gebe ich es ihm und dann beschwert er sich darüber.
Ich dachte, mit dem Original meintest du eine Textverarbeitung, wie angedeutet.

Ich habs nochmal versucht, ohne das EOF hinzuzufügen. Und siehe da: Es geht!
Es lag am Anfang einfach nur daran, dass ichs nicht hab binär lesen lassen.

Vielen Dank für den Tipp, du hast mich gerettet! Danke!!!
Antworten