Как разделить pdf файл в Python
Существует множество сценариев где может понадобиться автоматическое разделение или слияние PDF файлов. Допустим, нам понадобилось передать большие объемы документов через мессенджер или другую программу, с лимитом передачи данных. Или же ради удобства вы хотите сохранить в отдельном файле определенные страницы из книги. И в сегодняшней статье мы рассмотрим, как при помощи языка Python3 и библиотеки pikepdf решить данную задачу.
Для создания скрипта понадобится Python библиотека pikepdf. И прежде создадим виртуальную среду, куда установим все необходимое.
>>>python -m venv my_pikepdf
# активируем ее
>>>cd my_pikepdf/Scripts
>>>activate
# теперь установим саму библиотеку pikepdf
>>>pip install pikepdf
Создадим файл pdf_splitter.py и вызовем импорты
import os
from pikepdf import Pdf
Далее создадим словарь, который сопоставит индексы с текущими страницами в PDF.
file2pages = {
0: [0, 10],
1: [10, 20],
2: [20, 30],
}
# целевой pdf документ будет предаваться в качестве аргумента cmd
fn = sys.argv[1:][0]
# загрузка файла
pdf = Pdf.open(fn)
new_pdf_files = [ Pdf.new() for i in file2pages ]
pdf_index_new = 0
# итерация по pdf страницам
for i, pg in enumerate(pdf.pg):
if i in list(range(*file2pages[pdf_index_new])):
new_pdf_files[pdf_index_new].pages.append(pg)
print(f"[*] Назначение страницы {i} {pdf_index_new}-ому файлу")
else:
# добавим к имени файла его индекс
name, ext = os.path.splitext(fn)
output_fn = f"{name}-{pdf_index_new}.pdf"
# сохранение файла
new_pdf_files[pdf_index_new].save(output_fn)
print(f"[+] Файл: {output_fn} сохранен.")
# переход к следующему
pdf_index_new += 1
new_pdf_files[pdf_index_new].pages.append(page)
print(f"[*] Назначение страницы {i} {pdf_index_new}-ому файлу")
# сохраним последний файл
name, ext = os.path.splitext(fn)
output_fn = f"{name}-{pdf_index_new}.pdf"
new_pdf_files[pdf_index_new].save(output_fn)
print(f"[+] Файл: {output_fn} сохранен.")
Запустим скрипт:
>>>python pdf_split.py python_book.pdf
Таким образом, при помощи Python и библиотеки pikepdf можно сохранить фрагменты книги в качестве отдельных pdf файлов.