Добавление и редактирование закладок в pdf

Получая метаданные из некоторых файлов PDF с закладками pdftk , я наблюдаю формат закладок в pdf-метаданных. Поэтому я предполагаю, что с помощью pdftk можно добавлять и редактировать закладки PDF-файла.

Вот три шага, которые я следую:

  1. Сначала я получаю метаданные (включая закладки, если они есть) из файла pdf в текстовый файл с помощью pdftk in.pdf dump_data > in.info .
  2. Затем я добавляю некоторые закладки в текстовый файл метаданных in.info , меняя его

     InfoKey: Creator InfoValue: PScript5.dll Version 5.2 InfoKey: Title InfoValue: SSReader Print. InfoKey: Producer InfoValue: Acrobat Distiller 7.0 (Windows) InfoKey: Author InfoValue: Administrator InfoKey: ModDate InfoValue: D:20050605073244+08'00' InfoKey: CreationDate InfoValue: D:20050605073244+08'00' PdfID0: 591a87c91dc76881fdf2ccf3811e72a5 PdfID1: 6b6ab11de8824e438e4f5eb1d85ec72 NumberOfPages: 400 PageLabelNewIndex: 1 PageLabelStart: 1 PageLabelNumStyle: DecimalArabicNumerals 

    в

     InfoKey: Creator InfoValue: PScript5.dll Version 5.2 InfoKey: Title InfoValue: SSReader Print. InfoKey: Producer InfoValue: Acrobat Distiller 7.0 (Windows) InfoKey: Author InfoValue: Administrator InfoKey: ModDate InfoValue: D:20050605073244+08'00' InfoKey: CreationDate InfoValue: D:20050605073244+08'00' PdfID0: 591a87c91dc76881fdf2ccf3811e72a5 PdfID1: 6b6ab11de8824e438e4f5eb1d85ec72 NumberOfPages: 400 BookmarkBegin BookmarkTitle: Front cover BookmarkLevel: 1 BookmarkPageNumber: 1 BookmarkBegin BookmarkTitle: About the Author BookmarkLevel: 1 BookmarkPageNumber: 5 BookmarkBegin BookmarkTitle: Title page BookmarkLevel: 1 BookmarkPageNumber: 6 BookmarkBegin BookmarkTitle: Copyright page BookmarkLevel: 1 BookmarkPageNumber: 7 BookmarkBegin BookmarkTitle: Foreword BookmarkLevel: 1 PageLabelNewIndex: 1 PageLabelStart: 1 PageLabelNumStyle: DecimalArabicNumerals 
  3. Затем я пытаюсь вернуть отредактированные метаданные в файл pdf с помощью pdftk in.pdf update_info in.info output out.pdf .

Но когда я открываю новый pdf-файл out.pdf в out.pdf или adobe reader, в новом PDF-файле нет закладки.

Если я получу метаданные из нового pdf-файла out.pdf by pdftk out.pdf dump_data > out.info , в pdftk out.pdf dump_data > out.info не будет закладок. Похоже, что закладки не были добавлены успешно.

Мне было интересно, есть ли какие-то ошибки? Как добавить и редактировать закладки PDF-файла, а не обязательно pdftk?

8 Solutions collect form web for “Добавление и редактирование закладок в pdf”

Мне кажется, что с версии 1.45 (2012-12-06), pdftk позволяет изменять закладки через команду update_info:

Теперь вы можете добавлять или изменять закладки PDF с помощью update_info.

через: http://www.pdflabs.com/docs/pdftk-version-history/

jPDFtweak (Java, поэтому работает на Unix / Linux) может изменять закладки, но я не знаю, можете ли вы с ним что-либо скриптировать .

Для сценариев я предполагаю, что ваш единственный родной вариант Unix / Linux будет pdflatex с пакетом pdfpages. Но это кривая обучения, если вы еще не пользователь LaTeX.

EDIT: на самом деле это возможно с помощью ghostscript: см. Здесь или здесь или здесь

Если вы все еще придерживаетесь этих unix-скриптов, тогда

  1. извлекать данные закладок, сбрасываемых из pdftk
  2. напишите один дополнительный скрипт, чтобы преобразовать данные с выгруженными закладками в формат pdfmarks, который принимает ghostscript команда gs .
  3. используйте скрипт gs для их объединения вместе с pdfmarks

Взгляните на http://blog.tremily.us/posts/PDF_bookmarks_with_Ghostscript/ скрипт pdf-merge.py сделать то, что вы (или я) хотите.

pdf-merge.py --output=merged.pdf input1.pdf input2.pdf

Некоторые незначительные улучшения могут быть сделаны в его сценарии

  1. обработка Юникода
  2. файлы с записями, так что люди также могут его отрегулировать

В любом случае, он должен работать

pdftk – это, безусловно, правильный инструмент (с правильным синтаксисом):

 BookmarkBegin BookmarkTitle: Chapter 1 BookmarkLevel: 1 BookmarkPageNumber: 1 BookmarkBegin BookmarkTitle: Paragraph 1.1 BookmarkLevel: 2 BookmarkPageNumber: 1 

Калеб,

Насколько я понимаю, закладки в соответствии с спецификацией PDF не могут быть введены с помощью диагностического инструмента, такого как pdftk . Обновление метаданных, чтобы ссылаться на главы и привязки к закладке, которые не существуют, определенно не сработает, это может даже сделать ваш PDF непоследовательным или непригодным.

Я закончил использование java + iText-библиотек, чтобы делать то, что вы предлагаете в соответствии с этим учебным пособием , но мы имеем дело с сотнями PDF-файлов в день, поэтому его необходимо автоматизировать. Если вы делаете одноразовое, Adobe Acrobat должна это сделать.

Подводя итог всем этим хорошим ответам:

В GitHub есть проект bmconverter, который может конвертировать различные PDF-закладки. Он может преобразовать вывод pdftk в формат jpdftweak, хотя, если вы будете использовать jpdftweak, вам не нужно будет преобразовывать вывод pdftk в csv, так как вы можете выполнять всю работу из jpdftweak.

К сожалению, pdfmarks не поддерживается проектом, но, к счастью, кто-то опубликовал скрипт в проблемах bmconverter, которые могут преобразовывать вывод pdftk в pdfmarks. Таким образом, опция партии ghostscript является опцией

Просто добавьте BookmarkBegin перед каждой закладкой, как в

 BookmarkBegin BookmarkTitle: Front cover BookmarkLevel: 1 BookmarkPageNumber: 1 BookmarkBegin ⋮ 

pdftk закладки pdftk немного утомителен для записи. Вместо этого я создал свой собственный скрипт, используя bash , sed , pdftk и python3 . Проверьте это на этом репо: https://github.com/SiddharthPant/booky

Поэтому теперь я могу создать текстовый файл ( bkmrks.txt ), подобный этому, который занимает всего 5 минут, чтобы писать даже для 1000 страниц pdf.

 { Title1, 1 Title2, 2 { Subtitle1, 3 Subtitle2, 4 { SubSubtitle1, 5 ... } } } 

и затем используйте мой скрипт

 ./booky.sh pdf_file.pdf bkmrks.txt 

это автоматически создает pdf ( pdf_file_new.pdf ), в котором есть мои закладки.

  • Объединить PDF-файлы, но увеличить число PDF-страниц, чтобы быть равномерным количеством страниц
  • Как шифровать (защищать паролем) PDF без шифрования метаданных?
  • cygwin и pdftk
  • Наложение текста в PDF через командную строку
  • Разделение большого PDF-файла на мелкие файлы
  • Как я «unbook» pdf
  • Самый простой способ создать pdf-файл из шаблона с помощью командной строки (без pdflatex)?
  • Все приложения PDF смешивают ширину и высоту PDF-файла
  • Реализация инструмента String -> PDF Stamp
  • Как заканчивать pdftk минус 1?
  • Поврежденный PDF: открывает отлично, но pyPdf поручает с AssertionError
  • Linux и Unix - лучшая ОС в мире.