JavaRush /Курсы /Python SELF /Объединение нескольких PDF-файлов в один документ

Объединение нескольких PDF-файлов в один документ

Python SELF
43 уровень , 3 лекция
Открыта

1. Объединение PDF с помощью PyPDF2

Зачем объединять PDF-файлы

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

Кроме того, объединение PDF-файлов удобно для последующего архивирования, создания единого итогового отчета или сшивания множества версий документа для отслеживания изменений. В общем, возможностей — вагон и маленькая тележка!

Основы использования PyPDF2 для объединения PDF

Для начала давайте воспользуемся основами работы с PyPDF2. Мы создадим скрипт, который объединит несколько PDF-файлов в один. Разумеется, код будет сопровождаться комментариями, чтобы вы понимали, что происходит на каждом этапе.

Python

import PyPDF2

# Создаем объект PdfMerger из библиотеки PyPDF2
pdf_merger = PyPDF2.PdfMerger()

# Список наших PDF-документов, которые мы хотим объединить
pdf_files = ['document1.pdf', 'document2.pdf', 'document3.pdf']

# Цикл для добавления каждого файла в объект PdfMerger
for file in pdf_files:
    pdf_merger.append(file)

# Сохраняем результат в новый PDF-файл
output_filename = 'merged_document.pdf'
with open(output_filename, 'wb') as output_file:
    pdf_merger.write(output_file)

# Закрываем объект PdfMerger для освобождения ресурсов
pdf_merger.close()

print(f"Объединенный PDF создан: {output_filename}")

Порядок и структура объединенного документа

Теперь, когда мы научились объединять PDF-документы, стоит задуматься о порядке страниц. Помните, что PyPDF2 добавляет страницы в том порядке, в каком вы передали файлы в метод .append(). Таким образом, порядок в списке pdf_files влияет на порядок в итоговом документе.

2. Объединение отдельных страниц

Если вы хотите не объеденить документы, а собрать итоговый документ из их частей, то вам нужно восользоваться классом PdfWriter вместо PdfMerger. Пример:

Python

import PyPDF2

# Список PDF-файлов, которые нужно объединить
pdf_files = ["file1.pdf", "file2.pdf", "file3.pdf"]

# Создание объекта PdfWriter для записи объединенного PDF
pdf_writer = PyPDF2.PdfWriter()

# Проходим по каждому PDF-файлу
for pdf_file in pdf_files:
    with open(pdf_file, "rb") as file:
        pdf_reader = PyPDF2.PdfReader(file)
        # Добавляем каждую страницу в PdfWriter
        for page_num in range(len(pdf_reader.pages)):
            # Тут вы можете пропускать страницы, которые не хотите добавлять
            page = pdf_reader.pages[page_num]
            pdf_writer.add_page(page)

# Сохранение объединенного PDF
with open("merged_document.pdf", "wb") as output_file:
    pdf_writer.write(output_file)

Как работает этот код?

  1. Создаем список файлов: Список pdf_files содержит пути к PDF-документам, которые нужно объединить.
  2. Инициализируем PdfWriter: pdf_writer используется для создания нового PDF-файла.
  3. Проходим по каждому файлу: Каждый PDF-файл открывается в режиме чтения.
  4. Добавляем страницы: Все страницы файла поочередно добавляются в объект pdf_writer с помощью add_page().
  5. Сохраняем результат: После добавления всех страниц новый PDF-файл записывается в merged_document.pdf.

3. Стилизация нового документа

Добавление закладок и оглавления

Что же делать, если ваш объединенный документ стал слишком большим и в нем трудно ориентироваться? В такой ситуации на помощь приходят закладки! PyPDF2 позволяет добавлять базовые закладки, чтобы облегчить навигацию по документу. Давайте добавим закладки для каждого документа, который мы объединяем.

Python

pdf_merger = PyPDF2.PdfMerger()

# Индекс страницы для закладок
page_offset = 0

for file in pdf_files:
    # Читаем текущий документ
    pdf_reader = PyPDF2.PdfReader(file)

    # Добавляем документ в PdfMerger
    pdf_merger.append(file)

    # Добавляем закладку с именем файла
    pdf_merger.add_bookmark(file, page_offset)

    # Обновляем смещение страниц
    page_offset += len(pdf_reader.pages)

with open(output_filename, 'wb') as output_file:
    pdf_merger.write(output_file)

pdf_merger.close()

Эта маленькая хитрость поможет вам сохранить спокойствие и избежать утонувших в PDF-море документов.

Обновление метаданных объединенного файла

После объединения можно добавить или изменить метаданные документа, такие как автор, название и ключевые слова.

Python

import PyPDF2

pdf_files = ["file1.pdf", "file2.pdf"]
pdf_writer = PyPDF2.PdfWriter()

for pdf_file in pdf_files:
    with open(pdf_file, "rb") as file:
        pdf_reader = PyPDF2.PdfReader(file)
        for page_num in range(len(pdf_reader.pages)):
            page = pdf_reader.pages[page_num]
            pdf_writer.add_page(page)

# Добавление метаданных
pdf_writer.add_metadata({
    "/Title": "Объединенный документ",
    "/Author": "Иван Иванов",
    "/Subject": "Отчет по продажам"
})

# Сохранение объединенного файла
with open("merged_with_metadata.pdf", "wb") as output_file:
    pdf_writer.write(output_file)

Этот код добавляет метаданные, которые помогут идентифицировать и структурировать документ.

Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ