Вопрос или проблема
Я слышал, что закладки PDF файла хранятся в виде простого текста где-то в файле. Мне было интересно, возможно ли импортировать и экспортировать закладки PDF файла в текстовый файл и обратно для пакетной обработки?
Если да, есть ли описание синтаксиса для редактирования текстового файла, содержащего закладки PDF файла?
Я надеялся на бесплатные программные решения для Ubuntu 10.10 и Windows 7.
Существует множество инструментов, которые могут извлекать закладки из PDF в простой текстовый файл и наоборот. Некоторые из них:
- pdftk
- iText toolbox (только старые версии, получите itext-2.0.1.jar)
- pdfWritebookmarks инструмент, который я использую
- JPdfBookmarks, у которого даже есть графический интерфейс.
Также у меня есть скрипт, который может конвертировать между форматами многих из этих инструментов: bmconverter.py.
Другой очень хороший способ – добавить закладки в PDF через pdflatex.
Вы можете использовать pdftk
для этого. Более подробная информация: Как экспортировать и импортировать закладки PDF.
Экспортируйте закладки PDF из командной строки следующим образом:
pdftk C:\Users\Sid\Desktop\doc.pdf dump_data output C:\Users\Sid\Desktop\doc_data.txt
Импортируйте закладки PDF из файла данных следующим образом:
pdftk C:\Users\Sid\Desktop\doc.pdf update_info C:\Users\Sid\Desktop\doc_data.txt output C:\Users\Sid\Desktop\updated.pdf
Формат закладок pdftk
немного утомителен для написания. Вместо этого я создал свой собственный скрипт, используя bash
, sed
, pdftk
и python3
. Ознакомьтесь с ним по этой ссылке: https://github.com/SiddharthPant/booky
Теперь я могу создать текстовый файл (bkmrks.txt
) вот так, что его написание занимает всего 5 минут даже для PDF на 1000 страниц.
{
Title1, 1
Title2, 2
{
Subtitle1, 3
Subtitle2, 4
{
SubSubtitle1, 5
...
}
}
}
А затем использовать мой скрипт
./booky.sh pdf_file.pdf bkmrks.txt
это автоматически создаёт PDF (pdf_file_new.pdf
), который содержит мои закладки.
Это будет работать в системах *nix, если вы находитесь на машине Windows. Тогда сначала установите python3
и pdftk
, просто используйте файл booky.py
в репозитории, чтобы конвертировать bkmrks.txt
в совместимый с pdftk
формат.
python3 booky.py < bkmrks.txt > output.txt
А затем используйте команду экспорта, чтобы сгенерировать файл с данными. Удалите предыдущие закладки из этого файла и вставьте содержимое output.txt
вместо этого с помощью простого копирования и вставки. А затем импортируйте эти данные обратно.
Если у вас есть версия документа с закладками и вы хотите скопировать их, гораздо проще использовать PDF-XChange Viewer (я использовал версию 2.5.211). Откройте PDF с закладками (исходный PDF), выберите все закладки в панели закладок, скопируйте их с помощью Ctrl+C, откройте PDF, в котором нет закладок (целевой PDF), и вставьте их (Ctrl+V) в панель закладок этого PDF. PDF-Xchange Viewer сохраняет свойства закладок такими, какими они были в исходном PDF (включая любое жирное/курсивное форматирование текста закладки). Если по какой-то причине некоторые разделы целевого PDF ниже или выше из-за изменений в документе, вы можете щелкнуть на закладку, нуждающуюся в исправлении, прокрутить до того места на странице, где вы хотите, чтобы закладка открывалась, щелкнуть правой кнопкой мыши на закладке снова и выбрать “Установить местоположение”. Повторите эту последнюю часть по мере необходимости для любой проблемной закладки. Сохраните целевой PDF, когда закончите.
Это отлично сработало для меня, было довольно интуитивно, и я справился за несколько минут. В моей конкретной ситуации один из коллег создал очень длинный документ с использованием Word для Mac, который не имел закладок. Из-за длины документа я хотел закладки, соответствующие содержанию документа. Я смог сохранить документ в Word для Windows как PDF с закладками, но некоторые различия в форматировании между Word для Windows и Word для Mac сильно испортили количество страниц (в частности, были различия в белом пространстве вокруг нижних колонтитулов и различия в интервале между рисунками и подписями). Я смог поиграться с заголовками и нижними колонтитулами и размерами фигур, чтобы получить корректную нумерацию страниц в Word для Windows, затем сохранил в PDF с закладками. К сожалению, все еще были некоторые различия в форматировании, так что я хотел просто применить закладки к оригинальному PDF, и именно тогда я нашел решение, указанное выше.
HandyOutline. 1 перетаскивание, 1 клик, готово. https://sourceforge.net/projects/handyoutlinerfo/. Бесплатно. Создает отступы для подпунктов. Не требует никакого PDF-читалки/редактора. Также редактирует, экспортирует все детали в текст (копировать в Word, написать макрос, чтобы привести к полностью функциональному документу Word) или XML, перераспределяет страницы, импортирует в PDF. Разработчик заслуживает пожертвований.
PDF-Xchange Editor (заменил PDFViewer) случайным образом дублировал/пропускал закладки, экспортированные в текст.
JPDF требовал Java, экспортировал нечитабельный формат, не смог очистить его, чтобы получить только имена.
PDFtk вызывал у меня головную боль только при взгляде на инструкции.
🙂
Спецификация для PDF файлов доступна для свободной загрузки в формате PDF от Adobe – по крайней мере, так было в последний раз, когда я проверял. Однако большинство PDF файлов имеют большую часть сжимаемых данных в сжатом виде. Возможно, когда-то существовала по существу текстовая версия PDF, и если это так, она все еще будет действительна сейчас, но на самом деле получить файл в этой форме может быть проблемой.
Хотя я это не делал, одна очень вероятная возможность (если вы готовы заплатить) – купить Acrobat Pro и использовать возможности написания скриптов на JavaScript, встроенные в это приложение. Для вашего начала…
http://acrobatusers.com/tutorials/2008/10/auto_bookmark_creation
Этот урок показывает, как автоматически создавать закладки, используя JavaScript в Acrobat 7.0 Pro (версия, включенная в Creative Suite CS2). Хотя это уже немного устарело, тот же метод должен хорошо работать и в более новых версиях.
Приложения Adobe действительно включают библиотеку для чтения/записи текстовых файлов с использованием JavaScript (чего нет в стандартном JavaScript), поэтому возможно написать свои собственные скрипты импорта/экспорта, хотя создание этих скриптов надежными не является тривиальной задачей.
Чтобы экспортировать закладки, я следую другому подходу, который требует использования Microsoft OneNote:
Я открываю PDF-читалку (я использую бесплатную версию Foxit) с видимой структурой закладок, а затем в OneNote прошу сделать снимок экрана и выбираю структуру закладок Foxit.
Вернувшись в OneNote, я выбираю опцию “Копировать текст из изображения” (в меню, которое появляется после щелчка правой кнопкой мыши на снимке экрана) и вставляю его сбоку, чтобы исправить отступы (обычно с маркерами).
Я нашел еще одно довольно “глупое” решение для копирования всех закладок в PDF в текст для использования в другом месте. В Acrobat Pro (для Mac OS) нет возможности выбрать все закладки и скопировать/вставить их в текстовый редактор. Однако вы можете экспортировать весь PDF как HTML-файл с опцией “одна страница HTML + добавить навигационный фрейм на основе закладок”. Затем откройте HTML в браузере, выделите весь текст в навигационном фрейме и скопируйте/вставьте его в текстовый редактор…
Чтобы считать все закладки из PDF в текстовый файл, вы можете использовать эту команду с помощью pdftk
:
pdftk input.pdf dump_data output output.txt
Затем я использовал regex в Notepad++, чтобы удалить лишние части. Следующее я заменил пустой строкой (в порядке), и затем у меня получился список закладок (не забудьте заменить, используя regex в вашем текстовом редакторе):
BookmarkLevel.*
BookmarkPageNumber.*
BookmarkBegin.*
\n\s+\n
Если вы хотите удалить числа, замените это выражение:
BookmarkTitle: A8.\d.\d+\s
Простое решение:-
Скопируйте исходный PDF (с закладками) в другое место, затем удалите все страницы, кроме страницы #1, сохраните файл. Теперь копия исходного файла имеет только одну страницу, но со всеми закладками. Переименуйте файл в ‘BOOK-MARK’. Откройте целевой PDF, вставьте файл ‘BOOK-MARK’ в качестве первой страницы, сохраните целевой PDF. Откройте целевой PDF, удалите первую страницу, теперь у вас есть целевой файл со всеми закладками, скопированными из исходного PDF. Теперь вы можете связать закладки с соответствующими страницами целевого файла.
УРА***
Существует еще одно решение, использующее скрипты import.py
и export.py
— это поддерживается автором библиотеки PyMuPDF/fitz.
- https://github.com/pymupdf/PyMuPDF-Utilities/blob/master/examples/import-toc/import.py
- https://github.com/pymupdf/PyMuPDF-Utilities/blob/master/examples/export-toc/export.py
Если вы выполните export.py a.pdf
, то будет сгенерирован output.csv
, который выглядит так:
1;Первый раздел;5;0
2;Первый подраздел;10;0
и так далее. (формат: уровень;имя;номер страницы;цель
, где цель
может быть просто чем-то вроде 0
)
После этого import.py -pdf a.pdf -csv output.csv
изменит и заменит файл a.pdf
закладками из файла output.csv
.
Есть одна особеность: иногда в выходном CSV может просочиться лишний ^M
байт (это байт “CR”), который делает его недействительным.
Работает на Python 3.
Ответ или решение
Импорт, экспорт и редактирование закладок в PDF-документах — это задачa, которую можно успешно решить с помощью различных программных инструментов. Закладки в PDF-файлах действительно часто хранятся в виде текстовой информации, что позволяет обрабатывать их в текстовом формате для более удобной работы. В этой статье мы рассмотрим, как выполнять эти операции, используя бесплатное программное обеспечение для Ubuntu и Windows, а также предоставим полезные советы и примеры.
1. Использование программы pdftk
pdftk (PDF Toolkit) является одним из самых популярных инструментов для работы с PDF-файлами, включая работу с закладками. Он доступен как для Windows, так и для Linux (в том числе для Ubuntu).
Экспорт закладок
Чтобы экспортировать закладки из PDF-файла, выполните следующую команду в терминале (Linux) или командной строке (Windows):
pdftk ваш_файл.pdf dump_data output закладки.txt
Эта команда создаст текстовый файл, содержащий информацию о закладках из указанного PDF-документа.
Импорт закладок
Для импорта закладок из текстового файла в PDF, используйте следующую команду:
pdftk ваш_файл.pdf update_info закладки.txt output обновленный_файл.pdf
2. Описание формата закладок
Формат, который использует pdftk для закладок, составляет довольно «трудоемкую» структуру. Пример структуры для закладок выглядит так:
BookmarkBegin
BookmarkTitle: Название Закладки
BookmarkLevel: 0
BookmarkPageNumber: 1
Каждая закладка начинается с BookmarkBegin
и содержит следующие параметры: BookmarkTitle
, BookmarkLevel
и BookmarkPageNumber
. Обратите внимание на уровень закладки (например, 0
для основной, 1
для подзакладки).
3. Альтернативные инструменты
Существует множество других инструментов для работы с закладками в PDF-файлах:
- iText Toolbox — это библиотека для разработки программного обеспечения, которая также может использоваться для работы с PDF.
- pdfWriteBookmarks и JPdfBookmarks — доступны с графическим интерфейсом и удобны для простых операций.
- Python — с использованием библиотеки PyMuPDF/fitz можно использовать скрипты
import.py
иexport.py
. Это позволяет экспортировать закладки в формате CSV и потом импортировать их обратно в документ.
Пример использования PyMuPDF для экспорта закладок:
python3 export.py ваш_файл.pdf
Это создаст CSV-файл, который можно отредактировать, а затем импортировать обратно.
4. Прямое редактирование закладок
Если у вас есть доступ к Adobe Acrobat Pro, вы можете разрабатывать собственные скрипты на JavaScript, чтобы автоматизировать импорт и экспорт закладок. Это более сложный, но гибкий подход.
5. Программа PDF-XChange
Если вы ищете простой графический интерфейс, попробуйте PDF-XChange Viewer. В этой программе можно копировать закладки из одного PDF-документа и вставлять их в другой PDF-документ, что значительно упрощает процесс, если у вас уже есть закладки в другом файле.
6. Заключение
Работа с закладками в PDF-файлах может быть выполнена различными способами — от командной строки до графических интерфейсов. Выбор подходящего инструмента зависит от ваших нужд и предпочтений. Использование таких инструментов, как pdftk, PyMuPDF или PDF-XChange, позволяет легко управлять закладками, экономя время и усилия. Рекомендуется создавать резервные копии PDF-файлов перед внесением изменений, для предотвращения потери данных.