Добавить и редактировать закладки в PDF


22

Получая метаданные из некоторых файлов 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в evince или Adobe Reader, в новом файле PDF нет закладки.

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

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


1
Этот небольшой графический инструмент работал для меня. (PDF-версия 0.9.1) apps.fedoraproject.org/packages/pdfmod
abhijit,

Ответы:


12

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

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

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


3
Это сработало очень хорошо для меня. Следует добавить, что во входном файле над BookmarkBeginтегами перед каждой записью закладки отсутствуют.
Даниэльп

4

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

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

РЕДАКТИРОВАТЬ: На самом деле это может быть возможно с ghostscript: смотрите здесь или здесь или здесь


4

Если вы все еще придерживаетесь этих сценариев Unix, то

  1. извлекать данные закладок, выгруженных из pdftk
  2. напишите один дополнительный скрипт для преобразования сброшенных данных закладок в формат pdfmarks, который gsпринимается командой ghostscript .
  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. обработка Unicode
  2. выводить файлы закладок, чтобы люди тоже могли их настроить

Во всяком случае, это должно работать


Одно возражение! Благодарность! Я с нетерпением жду вашего сценария!
Тим

Кажется, ссылка не работает. Вы можете это исправить, пожалуйста?
Fish Monitor

4

pdftk - определенно правильный инструмент (с правильным синтаксисом):

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

2

Калеб,

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

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


2

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

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

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


2

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), в котором есть мои закладки.


1

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

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

0

Перенаправление, которое вы использовали в шаге 1, приведет к некорректной работе update_info. Вам нужно указать выходной файл для pdftk:

pdftk in.pdf dump_data output in.info

Смотрите этот ответ на аналогичный вопрос: /programming//a/30308964/3158933

Файлы, которые я создал с помощью перенаправления, имеют немного больший размер и заставляют pdftk выдавать сообщение «Предупреждение: неожиданный случай 1 в LoadDataFile (); продолжение» при выполнении команды update_info.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.