Додавання та редагування закладок у 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, у новому pdf-файлі немає закладки.

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

Мені було цікаво, чи є якісь помилки? Як додати та відредагувати закладки файлу PDF, не обов'язково за допомогою pdftk?


1
Цей маленький графічний інструмент працював для мене. (PDF Mod 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тегами перед кожним записом закладок відсутні.
danielp

4

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

Щодо сценаріїв, я думаю, що вашим єдиним варіантом Unix / Linux буде pdflatex з пакетом pdfpages. Але це крива навчання, якщо ви ще не користувач LaTeX.

EDIT: Насправді це може бути можливим за допомогою ghostscript: Дивіться тут або тут або тут


4

Якщо ви все ще дотримуєтесь цих скриптів unix, значить

  1. витягнути дані закладок, вивантажені з pdftk
  2. написати один додатковий скрипт для перетворення скинутих даних закладок у формат pdfmark, який gsбуде прийнята команда ghostscript .
  3. використовувати gsскрипт, щоб об'єднати їх разом з pdfmark

Погляньте на http://blog.tremily.us/posts/PDF_bookmarks_with_Ghostscript/ сценарій pdf-merge.pyробити саме те, що ви (або я) хочете.

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

Деякі незначні поліпшення можна було б зробити в його сценарії

  1. однокодовий поводження
  2. виводити файли закладок, щоб люди могли також їх коригувати

Так чи інакше, це має працювати


Один внесок! Спасибі! Я з нетерпінням чекаю вашого сценарію!
Тім

Здається, посилання не працює. Чи можете ви це виправити?
Монітор риб

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, щоб робити те, що ви пропонуєте відповідно до цього підручника , але ми маємо справу зі сотнями файлів pdfs щодня, тому її потрібно було автоматизувати. Якщо ви робите одноразові, Adobe Acrobat має бути в змозі це зробити.


2

Підсумовуючи всі ці хороші відповіді:

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

На жаль, проект не підтримується у форматі pdfmark , але, на щастя, хтось розмістив сценарій у проблемах bmconverter, який може перетворити вихід pdftk у pdfmark. Отже, пакетна опція ghostscript - це варіант


2

pdftkФормат закладок - це трохи нудно писати. Замість цього я створив свій власний сценарій , використовуючи bash, sed, pdftkі python3. Перевірте це у цьому репо: https://github.com/SiddharthPant/booky

Тож тепер я можу створити текстовий файл ( bkmrks.txt), подібний до цього, для запису навіть для PDF-сторінки на 1000 сторінок потрібно всього 5 хвилин.

{
  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.