JavaRush /Курсы /Python SELF /Разделение страниц PDF-документа для сохранения отдельных...

Разделение страниц PDF-документа для сохранения отдельных частей

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

1. Разделение PDF-документа на страницы

Основы разделения PDF-документов с помощью PyPDF2

PyPDF2 предоставляет класс PdfReader для открытия PDF-файлов и чтения страниц, а также класс PdfWriter для записи страниц в новый PDF-документ. Для разделения документа на отдельные страницы используется add_page() в PdfWriter, чтобы сохранить нужные страницы в отдельные файлы.

Сохранение каждой страницы PDF как отдельного документа

Этот код разделяет документ, создавая отдельный PDF-файл для каждой страницы исходного файла.

Python

import PyPDF2

# Открываем PDF-файл
with open("sample.pdf", "rb") as pdf_file:
    pdf_reader = PyPDF2.PdfReader(pdf_file)
    
    # Проходим по каждой странице
    for page_num in range(len(pdf_reader.pages)):
        pdf_writer = PyPDF2.PdfWriter()
        
        # Извлекаем страницу и добавляем в новый PDF
        page = pdf_reader.pages[page_num]
        pdf_writer.add_page(page)
        
        # Сохраняем текущую страницу как отдельный PDF-файл
        output_filename = f"page_{page_num + 1}.pdf"
        with open(output_filename, "wb") as output_file:
            pdf_writer.write(output_file)

print("Каждая страница сохранена как отдельный файл.")

В этом примере каждая страница исходного документа сохраняется в отдельный файл page_1.pdf, page_2.pdf и так далее.

2. Извлечение диапазона страниц

Иногда нужно сохранить не каждую страницу, а определенный диапазон страниц, например, с 1 по 5. Для этого можно указать конкретные страницы в цикле.

Python

import PyPDF2

with open("sample.pdf", "rb") as pdf_file:
    pdf_reader = PyPDF2.PdfReader(pdf_file)
    pdf_writer = PyPDF2.PdfWriter()
    
    # Определяем диапазон страниц, например, страницы с 1 по 5
    start_page = 1
    end_page = 5
    
    for page_num in range(start_page - 1, end_page):  # Нумерация страниц начинается с 0
        page = pdf_reader.pages[page_num]
        pdf_writer.add_page(page)

    # Сохраняем диапазон страниц как новый PDF
    with open("pages_1_to_5.pdf", "wb") as output_file:
        pdf_writer.write(output_file)

print("Диапазон страниц успешно сохранен.")

Этот код извлекает страницы с 1 по 5 и сохраняет их в файл pages_1_to_5.pdf.

3. Сохранение нескольких диапазонов

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

Python

import PyPDF2

def save_page_range(input_pdf, output_pdf, start_page, end_page):
    with open(input_pdf, "rb") as pdf_file:
        pdf_reader = PyPDF2.PdfReader(pdf_file)
        pdf_writer = PyPDF2.PdfWriter()
        
        for page_num in range(start_page - 1, end_page):
            page = pdf_reader.pages[page_num]
            pdf_writer.add_page(page)

        with open(output_pdf, "wb") as output_file:
            pdf_writer.write(output_file)
    
    print(f"Страницы {start_page}–{end_page} сохранены в {output_pdf}")

# Использование функции для извлечения разных диапазонов
save_page_range("sample.pdf", "section_1.pdf", 1, 3)
save_page_range("sample.pdf", "section_2.pdf", 4, 6)

Этот код создаёт две функции для сохранения страниц с 1 по 3 и с 4 по 6, которые сохраняются в section_1.pdf и section_2.pdf соответственно.

4. Массовая обработка pdf-документов

Автоматизация разделения PDF для всех страниц в папке

Если нужно разделить каждую страницу всех PDF-документов в указанной папке, можно создать скрипт, который автоматически обработает каждый файл.

Python

import PyPDF2
import os

# Путь к папке с PDF-файлами
folder_path = "pdf_folder"

# Автоматическое разделение всех PDF-файлов в папке
for filename in os.listdir(folder_path):
    if filename.endswith(".pdf"):
        file_path = os.path.join(folder_path, filename)
        with open(file_path, "rb") as pdf_file:
            pdf_reader = PyPDF2.PdfReader(pdf_file)
            
            # Разделяем файл на отдельные страницы
            for page_num in range(len(pdf_reader.pages)):
                pdf_writer = PyPDF2.PdfWriter()
                page = pdf_reader.pages[page_num]
                pdf_writer.add_page(page)
                
                # Создание имени выходного файла
                output_filename = f"{filename[:-4]}_page_{page_num + 1}.pdf"
                output_path = os.path.join(folder_path, output_filename)
                
                # Сохранение страницы
                with open(output_path, "wb") as output_file:
                    pdf_writer.write(output_file)

print("Все страницы из каждого PDF-файла в папке успешно сохранены.")

Этот скрипт автоматически проходит по каждому PDF-файлу в папке pdf_folder и сохраняет каждую страницу как отдельный PDF с именем <имя_файла>_page_<номер>.pdf.

5. Когда нужно разделять PDF-файлы?

Как говорил один великий разработчик, у которого после долгих часов кодинга прямо как у нас, часто возникает вопрос: "Зачем?". Разделение PDF-документов может потребоваться в разных ситуациях:

  • Выделение ключевых страниц: Поделитесь только нужными страницами, не пересылая всю "Войну и Мир" коллегам.
  • Создание подборок: Сохраните важные главы из разных документов в одном файле для учебных или рабочих нужд.
  • Архивирование: Храните архив важных данных страничка за страничкой, чтобы не терять ценную информацию среди ненужных страниц.

Вот тут и выходит на сцену наш герой PyPDF2, который упростит вам жизнь!

6. Случайные трудности и как их избежать

Работая с PDF-документами, вы можете столкнуться с некоторыми затруднениями. Например, нумерация страниц в PyPDF2 начинается с нуля, так что не забудьте учитывать это при указании нужных страниц. Ведь нет ничего хуже, чем потратить время на извлечение не тех страниц, которые вам нужны!

Также, при работе с открытыми и закрытыми файлами, убедитесь, что все close() вызваны корректно. Одна незакрытая книга может обернуться болью, особенно если это учебник по Oracle.

Применение в реальной жизни

Использование этого метода полезно не только для обработки личных документов. Например, если вы работаете в юридической фирме и вам нужно быстро подготовить определенные разделы из громоздкого дела для суда, разбитие PDF на части может значительно сэкономить время и усилия.

Подобные техники могут быть также использованы для подготовки учебных материалов, выделения важных разделов из технических отчетов и многого другого. Настоящая магия заключается в том, насколько просто можно автоматизировать эти рутинные задачи!

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