1. Объединение PDF с помощью PyPDF2
Зачем объединять PDF-файлы
Во-первых, давайте разберемся, почему вообще возникает необходимость объединять PDF-файлы. Ведь, как говорится, "Один PDF лучше, чем десять!". В рабочей обстановке у вас могут быть отчеты, результаты исследования, техническая документация или презентации, которые предоставляются отдельными файлами. Постоянно переключаться между ними не только неудобно, но и рискованно — можно что-то упустить. С помощью объединения всех файлов в один документ вы упростите работу с этими данными и создадите более структурированный подход к их анализу и распространению.
Кроме того, объединение PDF-файлов удобно для последующего архивирования, создания единого итогового отчета или сшивания множества версий документа для отслеживания изменений. В общем, возможностей — вагон и маленькая тележка!
Основы использования PyPDF2 для объединения PDF
Для начала давайте воспользуемся основами работы с PyPDF2. Мы создадим скрипт, который объединит несколько PDF-файлов в один. Разумеется, код будет сопровождаться комментариями, чтобы вы понимали, что происходит на каждом этапе.
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. Пример:
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)
Как работает этот код?
- Создаем список файлов: Список
pdf_filesсодержит пути к PDF-документам, которые нужно объединить. - Инициализируем PdfWriter:
pdf_writerиспользуется для создания нового PDF-файла. - Проходим по каждому файлу: Каждый PDF-файл открывается в режиме чтения.
- Добавляем страницы: Все страницы файла поочередно добавляются в объект
pdf_writerс помощьюadd_page(). - Сохраняем результат: После добавления всех страниц новый PDF-файл записывается в
merged_document.pdf.
3. Стилизация нового документа
Добавление закладок и оглавления
Что же делать, если ваш объединенный документ стал слишком большим и в нем трудно ориентироваться? В такой ситуации на помощь приходят закладки! PyPDF2 позволяет добавлять базовые закладки, чтобы облегчить навигацию по документу. Давайте добавим закладки для каждого документа, который мы объединяем.
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-море документов.
Обновление метаданных объединенного файла
После объединения можно добавить или изменить метаданные документа, такие как автор, название и ключевые слова.
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)
Этот код добавляет метаданные, которые помогут идентифицировать и структурировать документ.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ