Легко читайте 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 для анализа данных, управления документами и автоматизации.
Программирование на python
882 поста11.9K подписчика
Правила сообщества
Публиковать могут пользователи с любым рейтингом. Однако!
Приветствуется:
• уважение к читателям и авторам
• конструктивность комментариев
• простота и информативность повествования
• тег python2 или python3, если актуально
• код публиковать в виде цитаты, либо ссылкой на специализированный сайт
Не рекомендуется:
• допускать оскорбления и провокации
• распространять вредоносное ПО
• просить решить вашу полноценную задачу за вас
• нарушать правила Пикабу