Вопрос или проблема
Как я могу разбить PDF на основе границ закладок?
Допустим, например, есть закладка с названием “Глава 1”, которая указывает на страницу 10, и закладка с названием “Глава 2”, которая указывает на страницу 20.
Я хочу извлечь страницы с 10 по 19 в файл под названием “Глава 1.pdf”, используя названия закладок (без необходимости вручную получать страницы, которые я хочу извлечь).
Вы можете использовать pdfextbook для извлечения закладок PDF на Linux.
Это свободное программное обеспечение.
Он доступен на PyPI, так что вы можете установить его с помощью pipx
:
pipx install pdfextbook
Он использует pdftk для чтения закладок из файла, fzf для того, чтобы позволить пользователю выбрать, какую закладку извлечь, и снова pdftk для извлечения закладок страниц.
Гораздо проще использовать любой один кросс-платформенный инструмент командной строки.
Здесь, используя всего один исполняемый файл на Windows, мы видим, что тестовый исходный файл имеет размер 4 КБ, но при разбивке каждый файл будет логически почти таким же большим, так как каждый требует аналогичных ресурсов. Поэтому во многих случаях не очень хорошая идея разбивать файлы, которые имеют большие перекрытия в использовании ресурсов.
cpdf>dir chapters.pdf|find "."
2024-10-14 16:41 4,269 Chapters.pdf
cpdf>cpdf -list-bookmarks chapters.pdf
0 "Обложка" 1 "[1/XYZ 0 845.550161 null]"
0 "Глава 1" 10 "[10/XYZ 0 841.889771 null]"
0 "Глава 2" 20 "[20/XYZ 0 845.550161 null]"
0 "Глава 3" 30 "[30/XYZ 0 845.550161 null]"
0 "Указатель" 40 "[40/XYZ 0 845.550161 null]"
cpdf>cpdf -split-bookmarks 0 Chapters.pdf -utf8 -o @B.pdf
cpdf>dir cover.pdf "chapter ?.pdf" index.pdf|find "."
2024-10-14 16:51 3,863 Cover.pdf
2024-10-14 16:51 3,919 Глава 1.pdf
2024-10-14 16:51 3,912 Глава 2.pdf
2024-10-14 16:51 3,920 Глава 3.pdf
2024-10-14 16:51 3,742 Указатель.pdf
cpdf>
Вы можете протестировать, что получится при повторном объединении, чтобы проверить, чтобы результат не имел слишком большого перекрытия.
cpdf -merge cover.pdf "chapter ?.pdf" index.pdf -o Reclaimed.pdf
cpdf>dir reclaimed.pdf|find "."
2024-10-14 17:01 4,340 Reclaimed.pdf
Таким образом, в этом случае минимальное количество перекрытия.
.
Ответ или решение
Для разделения PDF-документа на части по границам закладок можно использовать несколько методов, включая как специальные инструменты, так и более обобщенные команды. В данном ответе мы рассмотрим наиболее эффективные способы, используя libre программное обеспечение и командные утилиты.
Использование pdfextbook на Linux
Одним из наиболее удобных решений для извлечения страниц PDF на основе закладок является использование библиотеки pdfextbook. Данная библиотека доступна через PyPI и её можно установить следующим образом:
pipx install pdfextbook
Основные шаги:
- Установка зависимостей: Убедитесь, что на вашем компьютере установлены утилиты
pdftk
иfzf
, так как они необходимы для работы pdfextbook. - Использование pdfextbook: Запустите команду для извлечения закладок из вашего PDF-файла. Программа предложит выбрать закладку, по которой вы хотите извлечь диапазон страниц.
Одним из примеров использования pdfextbook может быть следующий:
pdfextbook chapters.pdf
Альтернативный метод с использованием cpdf
Если вам нужно более простое решение, вы можете использовать командную утилиту cpdf
, которая является кроссплатформенной и поддерживает работу с закладками. Установите cpdf
, затем выполните следующие действия:
- Просмотрите закладки PDF-документа:
cpdf -list-bookmarks chapters.pdf
Это покажет список всех закладок с указанием соответствующих страниц.
- Разделите PDF на основании закладок:
cpdf -split-bookmarks 0 Chapters.pdf -utf8 -o @B.pdf
Эта команда создаст отдельные файлы для каждой закладки с именами, содержащими названия закладок.
- Проверьте созданные файлы:
dir *.pdf
Вы сможете увидеть все извлеченные файлы, такие как Cover.pdf
, Chapter 1.pdf
, Chapter 2.pdf
и т.д.
Проверка на перекрытия
После разделения вы можете проверить, насколько сильно страничные ресурсы пересекаются при слиянии:
cpdf -merge cover.pdf "chapter ?.pdf" index.pdf -o Reclaimed.pdf
Проверьте размер нового файла, чтобы убедиться, что он находится в допустимых пределах и минимизирует перекрытия.
Заключение
Использование закладок для разделения PDF-документов является эффективным способом управления содержимым. Как библиотека pdfextbook, так и утилита cpdf предоставляют функционал для выполнения этой задачи. Выбор между ними зависит от ваших предпочтений и окружения (Linux, Windows и т.д.).
Используя эти инструменты и методы, вы сможете легко извлекать нужные страницы из PDF-файлов, основываясь на закладках, что существенно облегчит работу с большими документами.