Рубрики
Без рубрики

Извлечение PDF метаданных и текст с Python

Получите практические, реальные навыки Python на наших ресурсах и пути

Автор оригинала: Mike Driscoll.

Есть много пакетов, связанных с PDF для Python. Один из моих любимых – Pypdf2 Отказ Вы можете использовать его для извлечения метаданных, вращающихся страниц, разделение или слияние PDF и более. Это рода швейцарский армейский нож для существующих PDF. В этой статье мы узнаем, как извлечь базовую информацию о PDF с использованием PYPDF2

Начиная

PYPDF2 не приходит как часть стандартной библиотеки Python, поэтому вам нужно будет установить ее самостоятельно. Предпочтительный способ сделать это – использовать Пип Отказ

pip install pypdf2

Теперь, когда у нас установлено pypdf2, давайте узнаем, как получить метаданные из PDF!

Извлечение метаданных

Вы можете использовать PYPDF2 для извлечения справедливого количества полезных данных из любого PDF. Например, вы можете узнать автор документа, его названия и предмета и сколько страниц есть. Давайте узнаем, как, загрузив образец этой книги от LeanPub в https://leanpub.com/reportLab Отказ Образец я загружал было названо «REPORTLAB-образец.PDF».

Вот код:

# get_doc_info.py

from PyPDF2 import PdfFileReader


def get_info(path):
    with open(path, 'rb') as f:
        pdf = PdfFileReader(f)
        info = pdf.getDocumentInfo()
        number_of_pages = pdf.getNumPages()
    
    print(info)

    author = info.author
    creator = info.creator
    producer = info.producer
    subject = info.subject
    title = info.title

if __name__ == '__main__':
    path = 'reportlab-sample.pdf'
    get_info(path)

Здесь мы импортируем Pdffilereader класс от Pypdf2 Отказ Этот класс дает нам возможность читать PDF и извлечь данные из него с использованием различных методов доступа. Первое, что мы делаем, это создать наши собственные get_info Функция, которая принимает пункт файла PDF в качестве единственного аргумента. Затем мы открываем файл в двоичном режиме только для чтения. Затем мы передаем этот обработчик файлов в PDFFILEREAREADER и создать его экземпляр.

Теперь мы можем извлечь некоторую информацию из PDF, используя getdocumentinfo метод. Это вернет экземпляр Pypdf2.pdf.documentinformation , который имеет следующие полезные атрибуты, среди прочего:

  • автор
  • создатель
  • режиссер
  • предмет
  • заглавие

Если вы распечатаете DocumentInformation Объект, это то, что вы увидите:

{'/Author': 'Michael Driscoll',
 '/CreationDate': "D:20180331023901-00'00'",
 '/Creator': 'LaTeX with hyperref package',
 '/Producer': 'XeTeX 0.99998',
 '/Title': 'ReportLab - PDF Processing with Python'}

Мы также можем получить количество страниц в PDF, позвонив GetNUpages метод.

Извлечение текста из PDFS

PypDF2 имеет ограниченную поддержку для извлечения текста из PDFS. Это не имеет встроенной поддержки для извлечения изображений, к сожалению. Я видел некоторые рецепты в StackoverFlow, используя PypDF2 для извлечения изображений, но примеры кода, кажется, довольно удары или пропускают.

Давайте попробуем извлечь текст с первой страницы PDF, который мы загрузили в предыдущем разделе:

# extracting_text.py

from PyPDF2 import PdfFileReader


def text_extractor(path):
    with open(path, 'rb') as f:
        pdf = PdfFileReader(f)

        # get the first page
        page = pdf.getPage(1)
        print(page)
        print('Page type: {}'.format(str(type(page))))

        text = page.extractText()
        print(text)


if __name__ == '__main__':
    path = 'reportlab-sample.pdf'
    text_extractor(path)

Вы отметите, что этот код запускается почти так же, как наш предыдущий пример. Нам все еще нужно создать экземпляр Pdffilereader Отказ Но на этот раз мы снимаем страницу, используя GetPage метод. Pypdf2 – это нулевой, очень похоже на большинство вещей в Python, поэтому, когда вы передаете его, он фактически захватывает вторую страницу. Первая страница в этом случае это просто изображение, поэтому у него не будет никакого текста.

Интересно, что если вы запустите этот пример, вы обнаружите, что он не возвращает никакого текста. Вместо этого все, что я получил, был серией персонажей линии. К сожалению, PYPDF2 имеет довольно ограниченную поддержку для извлечения текста. Даже если он способен извлекать текст, он может не быть в ожидании того, и расстояние также может быть отличным.

Чтобы получить этот пример код для работы, вам нужно будет пытаться запустить его против другого PDF. Я нашел один на веб-сервисе внутренних доходов Соединенных Штатов здесь: https://www.irs.gov/pub/irs-pdf/fw9.pdf.

Это форма W9 для людей, которые являются самозанятыми или сотрудниками контракта. Он также может быть использован в других ситуациях. Во всяком случае, я скачал его как W9.PDF И добавил его в репозиторий GitHUB. Если вы используете это PDF вместо образец один, он будет счастливо извлекать некоторый текст с страницы 2. Я не буду воспроизвести вывод здесь, так как это довольно длинно.

Вы можете обнаружить, что pdfminer Пакет работает лучше для извлечения текста, чем pypdf2.

Обертывание

Пакет PypDF2 довольно полезен. Мы смогли получить полезную информацию от PDFS, используя ее. Я мог видеть, используя pypdf в папке PDFS и используя методику извлечения метаданных, чтобы разобраться в формате PDFS на имя создателя, субъектом и т. Д. Дайте ему попробовать и посмотреть, что вы думаете!

Связанное чтение

  • Простой пошаговый ReportLab Руководство
  • ReportLab 101: TextObject.
  • ReportLab – Как добавить графики и графики