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


12

Я використовую pdftkдля впорядкування сторінок pdf-файлу із закладками / контурами, але після цього вихідний файл втратив закладки оригіналу.

Моя команда pdftk in.pdf cat 1-22 43 23-42 44-end output out.pdf.

Мені було цікаво, як я можу зберігати закладки під час перестановки сторінок?

Відповіді:


10

Ось робоче рішення. Однак вам потрібно буде відкоригувати його відповідно до ваших потреб.

У своєму прикладі я видалив першу сторінку PDF, а потім мені потрібно було оновити закладки, щоб вказати на правильні місця.

  1. видалити сторінку 1 з in.pdf:

    pdftk A=in.pdf cat A2-end output temp.pdf
    
  2. створити файл in.info з in.pdf:

    pdftk in.pdf dump_data > in.info
    
  3. in.info потрібно виправити в моєму випадку, оскільки я видалю сторінку.

    Таким чином, мені потрібно зменшити BookmarkPageNumber на одну, щоб закладки привели на правильні сторінки.

    php-код:

    $file = "in.info";
    $data = file_get_contents($file);
    
    foreach (explode("\n", $data) as $row) {
        $tmp = explode(": ", $row);
    
        if ($tmp[0] == "BookmarkPageNumber") {
            if ($tmp[1] != "1") $tmp[1]--;
            echo $tmp[0].": ".$tmp[1]."\n";
        } else {
            echo $row."\n";
        }
    }
    
  4. створити фінал out.pdf:

    pdftk temp.pdf update_info in2.info output out.pdf
    

перевірена робота на debian за допомогою pdftk 2.01


1
Працював і для мене. Можливо, ви можете додати підказку про те, як виконати свій скрипт (не знаю, як ...) або додати сценарій python:#!/usr/bin/python output = open('res.info','w') with open('temp.info','r') as f: for line in f: if line.startswith("BookmarkPageNumber"): output.write( "BookmarkPageNumber: "+ str(int(line.split()[1])+1)+"\n") else: output.write(line)
Vser

6

Вам потрібно зробити pdftk in.pdf dump_data > in.info, а потім додати update_infoпараметр при генерації out.pdf. Цитуючи man pdftk:

update_info <info data filename | - | PROMPT>

Змінює метадані, що зберігаються в одному словнику інформації PDF, щоб відповідати файлу вхідних даних. Файл вхідних даних використовує той самий синтаксис, що і вихідний з dump_data. Символи, що не належать до ASCII, повинні бути кодовані як сукупності чисел XML. Це не змінює метадані, що зберігаються у потоці XMP PDF, якщо вони є. Наприклад:

             pdftk in.pdf update_info in.info output out.pdf

  update_info_utf8 <info data filename | - | PROMPT>

Те саме, що update_info, за винятком того, що вхід кодується як UTF-8.


Дякую! Як мені отримати цей файл "in.info"?
Тім

@Tim: відредаговано. Я сподіваюся, що це зараз зрозуміло. Вам потрібно використовувати dump_data_utf8для update_info_utf8роботи, звичайно.
Філомат

3
Дякую! Це все ще не працює. Мої команди в три етапи: pdftk in.pdf dump_data > in.info, pdftk in.pdf cat 1-22 43 23-42 44-end output out.pdfі pdftk out.pdf update_info in.info output out1.pdfТам досі немає закладок в out1.pdf. `
Тім

@Tim Я можу підтвердити, що це дійсно не працює. Ви знайшли вирішення цього випадково?
Glutanimate

1
Мій побіжний трелінг Google говорить про те, що закладки взагалі не обробляються.
vonbrand

5

Читаючи чоловічу сторінку обережно, в ній говориться, що update_infoдані беруть у будь-якому форматі dump_data. Це, мабуть, доведеться коригувати відповідно до змішування сторінки. Не звучить неможливо , але автоматично це не так.

Сайт PDFtk дає лише наведене вище звернення та створює / редагує закладки як результати. Все, що Google знає про предмет закладок у форматі PDF та реорганізацію, це хіти щодо вищезазначених операцій та ліричні експозиції на диво, які вони пропонують, і ця тема ;-).

Тож, здається, цього неможливо зробити. У коментарях пропонуються деякі можливості, які не спрацювали при спробі.


1

"pdfmod" - це простий графічний інструмент, який дозволяє видалити одну або сторінки режимів із існуючого PDF-файлу. Це лише питання кількох клацань. Він також зберігає інформацію про зміст та перехресне посилання у форматі PDF.

"pdftk" працює добре, і я використовував його тривалий час, але я втрачав вміст після видалення однієї чи двох сторінок з PDF. Ті файли pdf, які тестуються у "pdftk" та "pdfmod", створюються з openoffice.

https://apps.fedoraproject.org/packages/pdfmod


pdfmodздається кращим, ніж pdftkколи йдеться про збереження метаданих. Різний exiftoolрезультат показує, що pdfmodметадані зберігають, але pdftkне зберігають усе, навіть якщо ви використовуєте dump_data_utf8& update_info_utf8.
користувач1338062
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.