Последнее обновление: 29 января 2025

В этой статье мы расскажем вам, как работать с PDF-файлами, используя Python. Для этого мы воспользуемся библиотекой pypdf.
С помощью библиотеки pypdf мы покажем, как выполнить следующие операции в Python:
- Извлечение текста из PDF
- Поворот страниц PDF
- Объединение нескольких PDF
- Разделение PDF на отдельные файлы
- Добавление водяных знаков на страницы PDF
Примечание: Эта статья охватывает множество ценных деталей, так что не стесняйтесь переходить к разделам, которые интересуют вас больше всего! Контент организован для простой навигации, так что вы сможете быстро сосредоточиться на наиболее актуальных для вас темах.

Примеры кода
Вы можете загрузить весь код, использованный в этой статье, по следующей ссылке. Она включает код, входные и выходные файлы.
Установка pypdf
Чтобы установить pypdf, просто выполните следующую команду в своем терминале или командной строке:
pip install pypdf
Примечание: Эта команда чувствительна к регистру.
1. Извлечение текста из PDF файла с использованием Python
Объяснение кода
1. Создание объекта чтения PDF
reader = PdfReader(pdf_file)
PdfReader(pdf_file)
загружает PDF файл в объект чтения.- Этот объект позволяет получить доступ к страницам и их содержимому.
2. Перебор страниц
for page_number, page in enumerate(reader.pages, start=1):
reader.pages
возвращает список страниц в PDF.enumerate(..., start=1)
присваивает номер страницы, начиная с 1.
3. Печать извлеченного текста
print(f"Страница {page_number}:")
print(page.extract_text())
print("-" * 50) # Разделитель для удобства чтения
page.extract_text()
извлекает текстовое содержимое из текущей страницы.- Скрипт выводит извлеченный текст вместе с номером страницы.
"-" * 50
печатает строку-разделитель (--------------------------------------------------
) для удобства чтения.
Входной PDF файл, использованный в коде
- Входной файл: Ссылка для загрузки
Выходные данные кода
2. Поворот страниц PDF, используя Python
Объяснение кода
Код в целом поворачивает первую страницу на 90° по часовой стрелке и сохраняет измененный PDF без воздействия на другие страницы.
1. Импорт требуемых классов
from pypdf import PdfReader, PdfWriter
PdfReader
: Читает входной PDF.PdfWriter
: Создает новый PDF с изменениями.
2. Определите пути к входным и выходным файлам
input_pdf = "pdf-to-rotate/input.pdf"
output_pdf = "pdf-to-rotate/rotated_output.pdf"
- Скрипт читает из
input.pdf
и сохраняет измененный файл какrotated_output.pdf
.
3. Чтение PDF и создание объекта Writer
reader = PdfReader(input_pdf)
writer = PdfWriter()
reader
загружает существующий PDF.writer
используется для хранения измененных страниц.
4. Поворот первой страницы на 90 градусов
page = reader.pages[0]
page.rotate(90) # Поворот на 90 градусов по часовой стрелке
writer.add_page(page)
- Извлекает первую страницу, поворачивает ее на 90 градусов и добавляет в новый PDF.
5. Добавление оставшихся страниц без изменений
for i in range(1, len(reader.pages)):
writer.add_page(reader.pages[i])
- Перебирает оставшиеся страницы и добавляет их как есть.
6. Сохранение нового PDF
with open(output_pdf, "wb") as file:
writer.write(file)
- Открывает
rotated_output.pdf
в двоичном режиме записи и сохраняет новый PDF.
7. Печать подтверждения
print(f"Повернутая страница сохранена в {output_pdf}")
- Выводит сообщение о успешном сохранении.
Входной PDF, использованный в коде, и его повёрнутый выходной файл
- Входной PDF файл: Ссылка для загрузки
- Выходной повёрнутый PDF файл: Ссылка для загрузки
Скриншот
3. Объединение PDF файлов с использованием Python
Этот скрипт Python демонстрирует, как объединить несколько PDF файлов из директории в один PDF с использованием библиотеки PyPDF.
Объяснение кода
- Этот скрипт автоматически объединяет все PDF файлы, найденные в указанной директории (
pdfs-to-merge
), в один выходной файл (merged_output.pdf
). - Он обеспечивает существование выходной директории и добавляет страницы каждого PDF в том порядке, в котором они перечислены.
- Он выводит финальный объединенный файл в поддиректорию
output-dir
.
Разбор кода
1. Импорт библиотек
import os
from pypdf import PdfReader, PdfWriter
os
: Используется для взаимодействия с файловой системой, например, для чтения директорий и управления путями к файлам.PdfReader
: Читает содержимое PDF файла.PdfWriter
: Создает и записывает новый PDF файл.
2. Определите директорию и выходной файл
directory = "pdfs-to-merge"
output_file = "output-dir/merged_output.pdf"
directory
: Указывает папку, в которой хранятся PDF файлы.output_file
: Определяет выходной путь и название объединенного PDF.
3. Создание выходной директории, если она не существует
os.makedirs(os.path.join(directory, "output-dir"), exist_ok=True)
- Это гарантирует, что выходная директория существует, и если ее нет, она создается.
4. Создать объект PdfWriter
writer = PdfWriter()
writer
используется для сбора и объединения всех страниц из PDF.
5. Итерация по всем PDF файлам в директории
for file_name in sorted(os.listdir(directory)):
if file_name.endswith(".pdf"):
file_path = os.path.join(directory, file_name)
print(f"Добавление: {file_name}")
- Этот цикл проходит по всем файлам в указанной директории, проверяя, чтобы файлы имели расширение
.pdf
. Он используетsorted()
, чтобы обрабатывать их в алфавитном порядке.
6. Чтение каждого PDF и добавление страниц в Writer
reader = PdfReader(file_path)
writer.append(reader)
- Для каждого PDF
PdfReader
читает файл, а затем все страницы этого PDF добавляются вwriter
.
7. Запись объединенного PDF в выходной файл
output_path = os.path.join(directory, output_file)
with open(output_path, "wb") as output_pdf:
writer.write(output_pdf)
- После сбора всех страниц
writer.write()
записывает объединённый PDF в указанный выходной путь.
8. Печать подтверждения
print(f"Объединенный PDF сохранен как: {output_path}")
- Печатает сообщение о успехе, подтверждающее место сохранения объединённого PDF.
Входные PDF файлы, использованные в коде, и объединённый выходной PDF
- Входные PDF файлы: Ссылка для загрузки
- Объединённый выходной PDF: Ссылка для загрузки
4. Разделение PDF с использованием Python
Объяснение кода
Вышеуказанный скрипт Python разделяет PDF на отдельные страницы с помощью библиотеки PyPDF. Сначала он проверяет наличие выходной директории, затем считывает входной PDF файл. Скрипт перебирает каждую страницу, создает новый объект PdfWriter и сохраняет каждую страницу как отдельный PDF файл. Выходные файлы называются последовательно (например, page_1.pdf, page_2.pdf) и хранятся в папке output-dir
. В конце скрипт выводит сообщение подтверждения для каждого созданного файла и уведомляет, когда процесс завершен.
Входной PDF и выходные разделенные файлы
- Входной PDF файл: Ссылка для загрузки
- Разделённые выходные файлы: Ссылка для загрузки
5. Добавление водяного знака в PDF с использованием Python
Вы можете добавить водяной знак в PDF, используя библиотеку PyPDF, накладывая PDF с водяным знаком на существующий PDF. Убедитесь, что PDF с водяным знаком содержит только одну страницу, чтобы он правильно применялся к каждой странице основного PDF.
Объяснение кода
Вышеуказанный скрипт Python читает входной PDF, извлекает одностраничный PDF водяного знака, накладывает водяной знак на каждую страницу входного PDF и сохраняет итоговый PDF с водяными знаками.
Разбор кода
Вот краткое объяснение каждой части
1. Импорт необходимых классов
from pypdf import PdfReader, PdfWriter
PdfReader
используется для чтения существующих PDF.PdfWriter
используется для создания и записи нового PDF.
2. Определите пути к файлам
input_pdf = "pdf-to-watermark/input.pdf"
watermark_pdf = "pdf-to-watermark/watermark.pdf"
output_pdf = "pdf-to-watermark/output_with_watermark.pdf"
input_pdf
: Оригинальный PDF, к которому будет добавлен водяной знак.watermark_pdf
: Отдельный одностраничный PDF, выступающий в качестве водяного знака.output_pdf
: Выходной файл, который будет содержать страницы с водяными знаками.
3. Чтение PDF
reader = PdfReader(input_pdf)
watermark = PdfReader(watermark_pdf)
reader
: Читает входной PDF.watermark
: Читает PDF с водяным знаком.
4. Создание объекта Writer
writer = PdfWriter()
- Это будет использовано для создания финального PDF с водяными знаками.
5. Извлечение страницы с водяным знаком
watermark_page = watermark.pages[0]
- Предполагается, что PDF с водяным знаком содержит только одну страницу, которая используется для наложения на все страницы.
6. Перебор страниц входного PDF и наложение водяного знака
for page in reader.pages:
# Совмещение водяного знака и текущей страницы
page.merge_page(watermark_page)
# Добавление объединённой страницы в writer
writer.add_page(page)
- Перебирает каждую страницу из
input_pdf
. merge_page(watermark_page)
накладывает водяной знак поверх текущей страницы.- Добавляет изменённую страницу в
writer
.
7. Сохранение PDF с водяными знаками
with open(output_pdf, "wb") as output_file:
writer.write(output_file)
- Записывает изменённые страницы в новый PDF файл.
8. Печать подтверждения
print(f"PDF с водяным знаком сохранён как: {output_pdf}")
- Выводит путь к выходному файлу для подтверждения.
Входной PDF, PDF с водяным знаком и выходной PDF с водяными знаками
- Входной PDF файл: Ссылка для загрузки
- PDF файл с водяным знаком: Ссылка для загрузки
- Выходной файл с водяным знаком: Ссылка для загрузки
Скриншот
Заключение
В этом руководстве мы изучили основные операции с PDF в Python, включая извлечение текста, поворот страниц, объединение, разделение и добавление водяных знаков. Обладая этими навыками, вы теперь можете создать собственный менеджер PDF и эффективно автоматизировать различные задачи, связанные с PDF.