Как импортировать, экспортировать и редактировать закладки PDF-файла?

Вопрос или проблема

Я слышал, что закладки 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.

Если вы выполните 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-файлов перед внесением изменений, для предотвращения потери данных.

Оцените материал
Добавить комментарий

Капча загружается...