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