Извлечение текста из URL-адреса PDF с помощью io и PyPDF2 не дает вывода

Я пытаюсь извлечь текст из URL-адреса PDF. Если я скачаю PDF, я могу легко извлечь текст с помощью функции slate. Однако при попытке импортировать PDF-файл с помощью io и извлечь текст возвращаемый результат - просто ничего. Код прикреплен ниже.

import requests, PyPDF2, io
from io import BytesIO

url = 'https://www.poderjudicial.es/search/contenidos.action?action=accessToPDF&publicinterface=true&tab=AN&reference=e3ca421447bc6b71&encode=true&optimize=20210216&databasematch=AN'

response = requests.get(url)
f = io.BytesIO(response.content)

with f as data:
    read_pdf = PyPDF2.PdfFileReader(data)
    page = read_pdf.getPage(1)
    print(page.extractText())

Я пробовал кучу других функций, но они не работают. Я делаю что-то неправильно?


person Ana    schedule 27.02.2021    source источник
comment
Первые десять байтов response.content равны b'%PDF-1.4\n%', поэтому в программе это кажется допустимым PDF-файлом. Вы пробовали напечатать атрибут read_pdf.numPages?   -  person VirtualScooter    schedule 27.02.2021


Ответы (1)


Это также дает мне пустой вывод. Я не уверен, почему. Но пробовали ли вы использовать pdfminer3 . Это дает мне правильный вывод в виде текста. Следующий код дает мне правильный вывод для файла.

import requests
from pdfminer3.layout import LAParams, LTTextBox
from pdfminer3.pdfpage import PDFPage
from pdfminer3.pdfinterp import PDFResourceManager
from pdfminer3.pdfinterp import PDFPageInterpreter
from pdfminer3.converter import PDFPageAggregator
from pdfminer3.converter import TextConverter
import io

resource_manager = PDFResourceManager()
fake_file_handle = io.StringIO()
converter = TextConverter(resource_manager, fake_file_handle, laparams=LAParams())
page_interpreter = PDFPageInterpreter(resource_manager, converter)

url = 'https://www.poderjudicial.es/search/contenidos.action?action=accessToPDF&publicinterface=true&tab=AN&reference=e3ca421447bc6b71&encode=true&optimize=20210216&databasematch=AN'

response = requests.get(url)
f = io.BytesIO(response.content)

with f as fh:

    for page in PDFPage.get_pages(fh,
                                  caching=True,
                                  check_extractable=True):
        page_interpreter.process_page(page)

    text = fake_file_handle.getvalue()

# close open handles
converter.close()
fake_file_handle.close()

print(text)

Ознакомьтесь также с этим сообщением Как использовать PDFminer.six с питоном 3?.

person sourabh singh chauhan    schedule 27.02.2021