2017-08-08 6 views
0

Ich bearbeite mehrere PDF-Dateien mit PyPDF2, aber mein Skript hängt irgendwo. Alles, was ich in meiner Konsole sehen kann, ist einige "startxref in der gleichen Zeile wie offset", was ich richtig finde, ist eine Warnung, also sollte es immer noch zum finally Block gehen und einen leeren String zurückgeben.PyPDF2 hängt an der Verarbeitung

Mache ich etwas falsch?

import PyPDF2 
import sys 
import os 
def decode_pdf(src_filename):   
    out_str="" 
    try: 
     f = open(str(src_filename), "rb")   
     read_pdf = PyPDF2.PdfFileReader(f) 
     number_of_pages = read_pdf.getNumPages() 
     for i in range(0,number_of_pages): 
      page = read_pdf.getPage(i) 
      out_str = out_str + " " + page.extractText() 
     out_str = ''.join(out_str.splitlines()) 
     f.close() 
    except: 
     print("Exception on pdf") 
     print(sys.exc_info()) 
     out_str = "" 
    finally: 
     return out_str 
+0

kann ich keine Fehler reproduzieren. Dieser Code funktioniert gut für mich. Können Sie Ihren Beitrag mit dem genauen Fehler aktualisieren, den Sie erhalten? Tritt dieser Fehler nur bei großen PDF-Dateien auf? –

+0

Kann nicht mit "einigen Fehler" und "einige Datei" reproduziert werden. Wenn es eine einzige Datei gibt, die konsistent diesen einen Fehler erzeugt, teilen Sie sie, damit wir sie überprüfen können. – usr2564301

Antwort

0

Ich war auch mit diesem Problem konfrontiert und konnte es nicht mit PyPDF2 lösen. Ich löste meine mit pdfminer das Beispiel von here

Kopieren des entsprechenden Code hier unten

from cStringIO import StringIO 
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter 
from pdfminer.converter import TextConverter 
from pdfminer.layout import LAParams 
from pdfminer.pdfpage import PDFPage 

def convert(fname, pages=None): 
    if not pages: 
     pagenums = set() 
    else: 
     pagenums = set(pages) 

    output = StringIO() 
    manager = PDFResourceManager() 
    converter = TextConverter(manager, output, laparams=LAParams()) 
    interpreter = PDFPageInterpreter(manager, converter) 

    infile = file(fname, 'rb') 
    for page in PDFPage.get_pages(infile, pagenums): 
     interpreter.process_page(page) 
    infile.close() 
    converter.close() 
    text = output.getvalue() 
    output.close 
    return text 

Anruf mit der Funktion convert(), wie unten

convert('myfile.pdf', pages=[5,7]) 
+1

Können Sie die relevanten Teile der verlinkten Ressource in Ihrer Antwort angeben? Wie es ist, ist Ihre Antwort sehr anfällig für Link-Rot (d. H. Wenn die verlinkte Website ausfällt oder sich ändert, ist Ihre Antwort nicht nützlich). – mech

Verwandte Themen