1. Розділення PDF-документа на сторінки
Основи розділення PDF-документів за допомогою PyPDF2
PyPDF2 надає клас PdfReader для відкриття PDF-файлів і читання сторінок, а також клас PdfWriter для запису сторінок в новий PDF-документ. Для розділення документа на окремі сторінки використовується add_page() у PdfWriter, щоб зберегти потрібні сторінки в окремі файли.
Збереження кожної сторінки PDF як окремого документа
Цей код розділяє документ, створюючи окремий PDF-файл для кожної сторінки вихідного файлу.
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. Для цього можна вказати конкретні сторінки у циклі.
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. Збереження декількох діапазонів
Якщо потрібно витягнути декілька діапазонів сторінок і зберегти їх в окремі файли, можна використати функцію, яка приймає початок і кінець діапазону.
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-документів у вказаній папці, можна створити скрипт, який автоматично обробить кожен файл.
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 на частини може суттєво зекономити час і зусилля.
Подібні техніки також можна використовувати для підготовки навчальних матеріалів, виділення важливих розділів із технічних звітів і багато іншого. Справжня магія полягає в тому, наскільки просто можна автоматизувати ці рутинні задачі!
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ