7

Легко читайте PDF в Python: Извлечение текста, изображений, таблиц и метаданных

PDF-файлы широко используются для хранения структурированных документов, но программное извлечение их содержимого может быть сложной задачей. К счастью, библиотеки Python для работы с PDF, такие как PyPDF2, pdfplumber и Spire.PDF, предоставляют мощные решения для чтения PDF, позволяя разработчикам легко извлекать текст, изображения, таблицы и метаданные.

В этом блоге мы рассмотрим, как извлекать различные типы содержимого из PDF с помощью библиотеки Spire.PDF.

  • Библиотека Python для чтения PDF-файлов

  • Извлечение текста из поисковых PDF

  • Извлечение изображений, внедренных в PDF-файлы

  • Сбор табличных данных из PDF-документов

  • Доступ к метаданным в PDF-файлах

  • Заключение

Библиотека Python для чтения PDF-файлов

Spire.PDF для Python — это всесторонняя библиотека, которая позволяет разработчикам программно манипулировать PDF-файлами. Она поддерживает:

  • Генерацию PDF с нуля

  • Редактирование существующих документов

  • Объединение или разделение PDF-документов

  • Конвертацию PDF в другие форматы файлов

  • Чтение содержимого PDF-документов

Чтобы установить библиотеку, выполните команду:

pip install spire.pdf

Примечание: Spire.PDF для Python — это коммерческая библиотека, которая добавляет сообщения об оценке в сгенерированные документы. Доступна бесплатная версия, но она ограничивает загрузку PDF до 10 страниц на документ.

Вы также можете установить бесплатную версию через pip:

pip install freespire.pdf

Теперь давайте погрузимся в различные техники извлечения.

Извлечение текста из поисковых PDF

Поисковые PDF содержат выделяемый текст, что делает извлечение простым. Класс PdfTextExtractor в Spire.PDF предоставляет методы для извлечения текста со специфических страниц, в то время как класс PdfTextExtractOptions позволяет настраивать процесс извлечения, например, задавать прямоугольную область для извлечения.

Следующий пример демонстрирует, как извлечь текст со всех страниц PDF и сохранить его в отдельные .txt файлы. Метод ExtractText() извлекает содержимое, сохраняя структуру документа, что обеспечивает сохранение оригинального макета извлеченного текста.

from spire.pdf.common import *

from spire.pdf import *

# Создаем объект PdfDocument

doc = PdfDocument()

# Загружаем PDF-документ

doc.LoadFromFile("C:/Users/Administrator/Desktop/Input.pdf")

# Перебираем страницы документа

for i in range(doc.Pages.Count):

# Получаем конкретную страницу

page = doc.Pages[i]

# Создаем объект PdfTextExtractor

textExtractor = PdfTextExtractor(page)

# Создаем объект PdfTextExtractOptions

extractOptions = PdfTextExtractOptions()

# Устанавливаем IsExtractAllText в True

extractOptions.IsExtractAllText = True

# Извлекаем текст со страницы

text = textExtractor.ExtractText(extractOptions)

# Записываем текст в файл txt

with open('output/TextOfPage-{}.txt'.format(i + 1), 'w', encoding='utf-8') as file:

lines = text.split("\n")

for line in lines:

if line != '':

file.write(line)

doc.Close()

Извлечение изображений, внедренных в PDF-файлы

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

Извлеченные изображения можно сохранить в различных форматах, таких как PNG или JPEG. Следующий пример демонстрирует, как просканировать каждую страницу PDF, идентифицировать встроенные изображения и сохранить их как отдельные файлы.

from spire.pdf.common import *

from spire.pdf import *

# Создаем объект PdfDocument

doc = PdfDocument()

# Загружаем PDF-документ

doc.LoadFromFile("C:\\Users\\Administrator\\Desktop\\input.pdf")

# Создаем объект PdfImageHelper

imageHelper = PdfImageHelper()

# Объявляем переменную int

index = 0

# Перебираем страницы

for i in range(0, doc.Pages.Count):

# Получаем конкретную страницу

page = doc.Pages.get_Item(i)

# Получаем всю информацию об изображениях с конкретной страницы

imageInfos = imageHelper.GetImagesInfo(page)

# Перебираем информацию об изображениях

for imageInfo in imageInfos:

# Задаем имя выходного файла изображения

imageFileName = "C:\\Users\\Administrator\\Desktop\\Extracted\\Image-{0:d}.png".format(index)

# Получаем конкретное изображение

image = imageInfo.Image

# Сохраняем изображение в файл png

image.Save(imageFileName)

index += 1

# Освобождаем ресурсы

doc.Dispose()

Сбор табличных данных из PDF-документов

Извлечение структурированных табличных данных из PDF является распространенной задачей для анализа данных. Spire.PDF предоставляет класс PdfTableExtractor, который идентифицирует таблицы в PDF и позволяет извлекать данные на уровне ячеек.

Метод ExtractTable() возвращает список таблиц, каждая из которых может быть обработана построчно. Следующий пример демонстрирует, как извлечь таблицы из PDF и сохранить их в структурированном текстовом формате.

from spire.pdf.common import *

from spire.pdf import *

# Создаем объект PdfDocument

doc = PdfDocument()

# Загружаем PDF-файл

doc.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Input.pdf")

# Создаем список для хранения извлеченных данных

builder = []

# Создаем объект PdfTableExtractor

extractor = PdfTableExtractor(doc)

# Извлекаем таблицы с конкретной страницы (индекс страницы начинается с 0)

tableList = extractor.ExtractTable(0)

# Проверяем, что список таблиц не пуст

if tableList is not None:

# Перебираем таблицы в списке

for i in range(len(tableList)):

# Получаем конкретную таблицу

table = tableList[i]

# Получаем количество строк и столбцов

row = table.GetRowCount()

column = table.GetColumnCount()

# Перебираем строки и столбцы

for m in range(row):

for n in range(column):

# Получаем текст из конкретной ячейки

text = table.GetText(m, n)

# Добавляем текст в список

builder.append(text + " ")

builder.append("\n")

builder.append("\n")

# Записываем содержимое списка в текстовый файл

with open("output/Table-{}.txt".format(i + 1), "w", encoding="utf-8") as file:

file.write("".join(builder))

Доступ к метаданным в PDF-файлах

Метаданные PDF включают свойства документа, такие как заголовок, автор, тема и ключевые слова. Свойство DocumentInformation класса PdfDocument предоставляет доступ к этим деталям.

Следующий пример демонстрирует, как извлечь и отобразить метаданные PDF.

from spire.pdf import *

from spire.pdf.common import *

# Создаем объект PdfDocument

doc = PdfDocument()

# Загружаем PDF-файл

doc.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Input.pdf")

# Получаем информацию о документе

properties = doc.DocumentInformation

# Инициализируем строку для хранения информации о документе

information = ""

# Извлекаем стандартные свойства документа

information += "\nTitle: " + properties.Title

information += "\nAuthor: " + properties.Author

information += "\nSubject: " + properties.Subject

information += "\nKeywords: " + properties.Keywords

# Печатаем свойства документа

print(information)

# Освобождаем ресурсы

doc.Dispose()

Заключение

Статья демонстрирует, как извлекать текст, изображения, таблицы и метаданные из PDF-документа с помощью Python. Следуя примерам в этом руководстве, вы можете эффективно обрабатывать PDF для анализа данных, управления документами и автоматизации.

Правила сообщества

Публиковать могут пользователи с любым рейтингом. Однако!


Приветствуется:

• уважение к читателям и авторам

• конструктивность комментариев

• простота и информативность повествования

• тег python2 или python3, если актуально

• код публиковать в виде цитаты, либо ссылкой на специализированный сайт


Не рекомендуется:

• допускать оскорбления и провокации

• распространять вредоносное ПО

• просить решить вашу полноценную задачу за вас

• нарушать правила Пикабу