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

Заголовок - Работа с PDF файлами в Python

В этой статье мы расскажем вам, как работать с PDF-файлами, используя Python. Для этого мы воспользуемся библиотекой pypdf.

С помощью библиотеки pypdf мы покажем, как выполнить следующие операции в Python:

  • Извлечение текста из PDF
  • Поворот страниц PDF
  • Объединение нескольких PDF
  • Разделение PDF на отдельные файлы
  • Добавление водяных знаков на страницы PDF

Примечание: Эта статья охватывает множество ценных деталей, так что не стесняйтесь переходить к разделам, которые интересуют вас больше всего! Контент организован для простой навигации, так что вы сможете быстро сосредоточиться на наиболее актуальных для вас темах.

Иллюстрация - Работа с PDF файлами в Python

Примеры кода

Вы можете загрузить весь код, использованный в этой статье, по следующей ссылке. Она включает код, входные и выходные файлы.

Установка 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 с использованием Python

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

4. Разделение PDF с использованием Python

Объяснение кода

Вышеуказанный скрипт Python разделяет PDF на отдельные страницы с помощью библиотеки PyPDF. Сначала он проверяет наличие выходной директории, затем считывает входной PDF файл. Скрипт перебирает каждую страницу, создает новый объект PdfWriter и сохраняет каждую страницу как отдельный PDF файл. Выходные файлы называются последовательно (например, page_1.pdf, page_2.pdf) и хранятся в папке output-dir. В конце скрипт выводит сообщение подтверждения для каждого созданного файла и уведомляет, когда процесс завершен.

Входной 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 с водяным знаком с использованием Python

Заключение

В этом руководстве мы изучили основные операции с PDF в Python, включая извлечение текста, поворот страниц, объединение, разделение и добавление водяных знаков. Обладая этими навыками, вы теперь можете создать собственный менеджер PDF и эффективно автоматизировать различные задачи, связанные с PDF.