Никакой текст не возвращается, когда pypdf2 используется для очистки одного paged pdf - PullRequest
0 голосов
/ 25 января 2019

Я скачал несколько PDF-файлов из этого источника: 'http://ec.europa.eu/growth/tools-databases/cosing/index.cfm?fuseaction=search.detailsPDF_v2&id=28157

Теперь я хочу очистить PDF с помощью PyPDF2, однако текст не возвращается.

Я протестировал код с другим pdf, и он работал без проблем.

all_files = os.listdir('C:/Users/NAME.NAME/Downloads/Eu/T/')
count=0
count2=0
for filenames in all_files: 
   count +=1
   file_path='C:/Users/NAME.NAME/Downloads/Eu/T/'+filenames
   pdf_obj=open(file_path, 'rb')
   pdf_reader = PyPDF2.PdfFileReader(pdf_obj)
   num_pages = pdf_reader.numPages
   current_page=0
   text2=""
   pageObj= pdf_reader.getPage(current_page)
   text2 +=pageObj.extractText()

1 Ответ

0 голосов
/ 25 января 2019

Это потому, что PyPDF2 является непоследовательным шабером .Вы должны помнить, что не все PDF-файлы построены одинаково, поэтому в зависимости от структуры, в которой был создан PDF-файл, PyPDF2 может или не сможет его удалить.

Обычно, когда я копирую pdf, мне приходится переключаться между PyPDF2, pdfminer и slate3k в зависимости от того, получаю я текст с использованием PyPDF2 или нет.Я начинаю с PyPDF2, так как он самый простой на мой взгляд.

Мой порядок надежности (насколько хорошо пакет может утилизировать PDF-файлы):

1.) Pdfminer

2.) Slate3k

3.) PyPDF2

Использование slate3k:

import glob as glob
all_files = r'C:/Users/NAME.NAME/Downloads/Eu/T/*.pdf'
for filenames in glob.glob(all_files): 
    with open(filenames,'rb') as f:
       pdf_text = slate.PDF(f)
       print(text)

Использование pdfminer

import glob as glob
import io
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage


def convert_pdf_to_txt(path):
    rsrcmgr = PDFResourceManager()
    retstr = io.StringIO()
    codec = 'utf-8'
    laparams = LAParams()
    device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams)
    fp = open(path, 'rb')
    interpreter = PDFPageInterpreter(rsrcmgr, device)
    password = ""
    maxpages = 0
    caching = True
    pagenos = set()

    for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages,
                                  password=password,
                                  caching=caching,
                                  check_extractable=True):
        interpreter.process_page(page)

    text = retstr.getvalue()

    fp.close()
    device.close()
    retstr.close()
    return text

all_files = r'C:/Users/NAME.NAME/Downloads/Eu/T/*.pdf'

for files in glob.glob(all_files):
    convert_pdf_to_txt(files)   

Возможно, вам придется изменить функции, чтобы получить текст в нужном вам формате. Как ясказал, что PDF-файлы могут быть построены очень многими способами, ваш текст может быть выведен различными способами.Но это должно привести вас в правильном направлении.

...