Как извлечь ВСЕ страницы из PDF как одну строку в Python 3, используя PyPDF2

Чтобы получить одну строку из многостраничного 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, что не работает в моем случае.

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

Любая помощь будет оценена.

Обновить:

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

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

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

Всего 3 ответа


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

output = page.extractText()

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

output += page.extractText()

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


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

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


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

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)

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

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

... и т.д


Есть идеи?

10000