В этом блоге мы узнаем, как обрабатывать 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 — отличный ресурс, доступ к которому вы можете получить здесь. Если вы хотите увидеть больше примеров, вы можете изучить их здесь.