JavaRush /Курси /Python SELF UA /Об'єднання декількох PDF-файлів в один документ

Об'єднання декількох PDF-файлів в один документ

Python SELF UA
Рівень 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)

Цей код додає метадані, які допоможуть ідентифікувати та структурувати документ.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ