Как извлечь ВСЕ страницы из PDF в виде одной строки в Python 3, используя PyPDF2 - PullRequest
2 голосов
/ 13 февраля 2020

Чтобы получить одну строку из многостраничного PDF, я делаю это:

import PyPDF2
pdfFileObject = open('sample.pdf', 'rb')
pdfReader = PyPDF2.PdfFileReader(pdfFileObject)
count = pdfReader.numPages
for i in range(count):
    page = pdfReader.getPage(i)
    output = page.extractText()
output

В результате получается строка из одной страницы (последняя страница в документе) - так, как и должно быть согласно PyPDF2 документации . Я применил этот метод, потому что я читал некоторых людей, предлагающих прочитать весь PDF, что не работает в моем случае.

Очевидно, что это базовая c операция, и я заранее извиняюсь за свои недостаток опыта. Я пробовал другие решения, такие как Tika, PDFMiner и Textract, но PyPDF, кажется, пока что позволяет мне только.

Любая помощь будет принята с благодарностью.

Обновление:

Как и предполагалось, я определил output как список, а затем добавил к нему (как я думал) все страницы в al oop следующим образом:

for i in range(count):
    page = pdfReader.getPage(i)
    output = []
    output.append(page.extractText())

Результат, думал, является единственной строкой в ​​списке как ['sample content from the last page of PDF']

Ответы [ 3 ]

3 голосов
/ 13 февраля 2020

Может быть из-за этой строки:

output = page.extractText()

Попробуйте вместо этого:

output += page.extractText()

Поскольку в вашем коде вы перезаписываете значение переменной «output» вместо того, чтобы присоединиться к нему. Не забудьте объявить переменную «output» перед значением для l oop. Так что output = '' до for i in range(count):

1 голос
/ 14 февраля 2020

Этот код работает:

import os, glob, PyPDF2, sys

file_path = 'C:/Users/ipeter/Desktop/Webdriverdownloads'
read_files = glob.glob(os.path.join(file_path,'*.pdf'))

for files in read_files:
    pdfReader = PyPDF2.PdfFileReader(files)
    count = pdfReader.numPages
    output = []
    for i in range(count):
        page = pdfReader.getPage(i)
        output.append(page.extractText())
    print(output)

Первый l oop читает все файлы в папке. Второй l oop читает все страницы в формате PDF.

output[0] = pdfpage1
output[1] = pdfpage2
output[2] = pdfpage3

... et c

Если вам нужен целый pdf в одной строке, вы можете сохранить newoutput, используя функцию соединения:

seperator = ','
newoutput = seperator.join(output)

или упростить:

newoutput = ','.join(output)
1 голос
/ 13 февраля 2020

Вы перезаписываете переменную output каждый раз.

Хотя вы можете объединить байты вместе, используя output +=, возможно, вместо этого безопаснее использовать список, в этом случае вы получите output = [] определено за пределами l oop и замените output = page.extractText() на output.append(page.extractTest()).

...