
В этом блоге мы узнаем, как обрабатывать PDF-файлы в Python с помощью PyMuPDF, библиотеки, которая предоставляет интерфейс Pythonic для библиотеки MuPDF.
Библиотека MuPDF — это легкое высококачественное средство визуализации PDF, написанное на переносимом коде C. Он разработан, чтобы быть быстрым и эффективным с точки зрения использования памяти, что делает его хорошо подходящим для использования в приложениях, которым необходимо работать с большими PDF-файлами или обрабатывать большое количество PDF-файлов за короткий промежуток времени.
С помощью PyMuPDF мы можем открывать и читать PDF-файлы, извлекать текст и изображения, добавлять текст и изображения в PDF-файлы и выполнять различные другие операции с PDF-файлами. В дополнение к своей основной функциональности PyMuPDF также предоставляет несколько удобных функций, упрощающих работу с PDF-файлами в Python. Например, он включает поддержку закладок, аннотаций и заполнения форм, а также поддержку PDF-файлов, защищенных паролем.
Чтобы начать работу с PyMuPDF, вам необходимо установить библиотеку и ее зависимости. Это можно сделать с помощью pip:
pip install pymupdf
После установки PyMuPDF вы можете начать использовать его в своем коде Python.
Вот наиболее часто используемые примеры,
Открыть файл PDF
Чтобы открыть файл PDF с помощью PyMuPDF, вы можете использовать функцию open модуля fitz. Эта функция принимает путь к файлу PDF в качестве аргумента и возвращает объект Document, представляющий файл PDF.
Вот пример того, как открыть файл PDF с помощью PyMuPDF:
import fitz
# Open the PDF document
doc = fitz.open("document.pdf")
Это откроет файл document.pdf и вернет объект Document, представляющий файл. Затем вы можете использовать различные методы и свойства объекта Document для доступа и управления содержимым файла PDF.
Например, вы можете использовать свойство page_count объекта Document, чтобы получить количество страниц в файле PDF, и вы можете использовать оператор индексации (например, doc[i]), чтобы получить конкретную страницу из файла.
Вы также можете использовать свойство metadata объекта Document для получения метаданных о файле PDF, таких как заголовок, автор и тема.
Извлечь текст из PDF
Чтобы извлечь текст из файла PDF в список с помощью PyMuPDF, вы можете использовать метод get_text объекта Page и добавить извлеченный текст в список.
Вот пример того, как извлечь весь текст из файла PDF и сохранить его в виде списка:
import fitz
# Open the PDF document
doc = fitz.open("document.pdf")
# Create an empty list to store the text
text_list = []
# Iterate over all the pages in the document
for page in doc:
# Extract the text from the page
text = page.get_text()
# Append the text to the list
text_list.append(text)
# Print the list
print(text_list)
Это позволит извлечь весь текст из файла document.pdf и сохранить его в переменной text_list. Текст с каждой страницы будет сохранен как отдельный элемент в списке.
Вы также можете извлечь текст с определенной страницы, используя оператор индексирования (например, doc[i].get_text()), чтобы получить нужную страницу, а затем вызвать метод get_text на этой странице.
Имейте в виду, что метод get_text не всегда дает идеальные результаты, особенно для сложных или плохо отформатированных PDF-файлов. В нем может отсутствовать какой-либо текст или содержаться дополнительные символы. Возможно, вам потребуется выполнить дополнительную обработку, чтобы очистить извлеченный текст.
Добавить текст в файл PDF
Чтобы добавить текст в файл PDF с помощью PyMuPDF, вы можете использовать метод insert_text объекта Page. Этот метод принимает добавляемый текст, положение текста на странице и размер шрифта в качестве аргументов и добавляет текстовое поле с заданным текстом на страницу в указанной позиции.
Вот пример того, как добавить текстовое поле с текстом на первую страницу документа PDF:
import fitz
# Open the PDF document
doc = fitz.open("document.pdf")
# Get the first page
page = doc[0]
# Set the font size
font_size = 20
# Set the position of the textbox on the page
x = 50
y = 50
# Set the text to be added
text = "This is some text"
# Add the textbox to the page
page.insert_text((x, y), text, fontsize=font_size)
# Save the changes to the PDF
doc.save("modified_document.pdf")
Это добавит текстовое поле с текстом «Это какой-то текст» на первую страницу файла document.pdf в позиции (50, 50) с размером шрифта 20. Измененная страница будет сохранена в новый файл с именем modified_document.pdf.
При необходимости вы можете настроить положение, размер шрифта и другие параметры форматирования текстового поля. Вы также можете добавить текст на несколько страниц, повторив описанные выше шаги для каждой страницы.
Поворот страниц в документе PDF
Чтобы повернуть страницы в документе PDF с помощью PyMuPDF, вы можете использовать метод set_rotate объекта Page. Этот метод принимает угол в качестве аргумента и поворачивает страницу на этот угол. Вы можете использовать метод get_rotate, чтобы получить значение поворота текущей страницы.
Вот пример того, как повернуть все страницы в документе PDF на 90 градусов:
import fitz
# Open the PDF document
doc = fitz.open("document.pdf")
# Iterate over all the pages in the document
for page in doc:
# Rotate the page by 90 degrees
page.set_rotation(90)
# Save the changes to the PDF
doc.save("rotated_document.pdf")
Это повернет все страницы в файле document.pdf на 90 градусов и сохранит повернутые страницы в новый файл с именем rotated_document.pdf. Вы можете указать любой угол от 0 до 360 для поворота страниц.
Извлечение изображений из файла PDF
Чтобы извлечь изображения из файла PDF с помощью PyMuPDF, вы можете использовать метод get_pixmap объекта Page. Этот метод возвращает объект Pixmap, представляющий изображение. Затем вы можете сохранить это изображение в файл, используя метод save объекта Pixmap.
Вот пример того, как извлечь все изображения из файла PDF и сохранить их в файлы изображений:
import fitz
# Open the PDF document
doc = fitz.open("document.pdf")
# Iterate over all the pages in the document
for i in range(doc.page_count):
# Get the current page
page = doc[i]
# Extract all the images on the page
for img in page.get_images():
# Get the image data
pix = fitz.Pixmap(doc, img)
# Save the image to a file
pix.save("image{}.png".format(i))
# Free the memory used by the Pixmap object
pix = None
При этом все изображения будут извлечены из файла document.pdf и сохранены в виде файлов изображений с такими именами, как image0.png, image1.png и т. д. Изображения будут сохранены в том же формате, что и в файле PDF.
Объединить два PDF-файла
Чтобы объединить два PDF-файла с помощью метода insert_pdf PyMuPDF, вы можете использовать следующий код:
import fitz
# Open the first PDF document
doc1 = fitz.open('document1.pdf')
# Open the second PDF document
doc2 = fitz.open('document2.pdf')
# Insert the second document into the first document
doc1.insert_pdf(doc2)
# Save the merged PDF
doc1.save('merged.pdf')
Это создаст новый файл PDF с именем merged.pdf, содержащий страницы из document1.pdf и document2.pdf. Страницы из document2.pdf будут добавлены в конец document1.pdf.
Удалить страницу из PDF
Чтобы удалить страницу из PDF с помощью PyMuPDF, вы можете использовать метод delete_page объекта Document. Вот пример того, как удалить вторую страницу PDF:
import fitz
# Open the PDF document
doc = fitz.open('document.pdf')
# Delete the second page
doc.delete_page(1)
# Save the modified PDF
doc.save('modified.pdf')
Это создаст новый файл PDF с именем modified.pdf с удаленной второй страницей. Обратите внимание, что нумерация страниц начинается с нуля, поэтому для удаления второй страницы необходимо указать индекс 1.
Если вы хотите удалить сразу несколько страниц, вы можете передать список индексов страниц в метод delete_pages.
Как видите, PyMuPDF — это мощная и простая в использовании библиотека для работы с файлами PDF в Python. Если вам нужно извлечь текст и изображения из PDF-файлов или добавить и изменить содержимое в существующих PDF-файлах, PyMuPDF поможет вам.
Документация PyMuPDF — отличный ресурс, доступ к которому вы можете получить здесь. Если вы хотите увидеть больше примеров, вы можете изучить их здесь.