JavaRush /Курси /Python SELF UA /Розділення сторінок PDF-документа для збереження окремих ...

Розділення сторінок PDF-документа для збереження окремих частин

Python SELF UA
Рівень 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 на частини може суттєво зекономити час і зусилля.

Подібні техніки також можна використовувати для підготовки навчальних матеріалів, виділення важливих розділів із технічних звітів і багато іншого. Справжня магія полягає в тому, наскільки просто можна автоматизувати ці рутинні задачі!

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