Я не знаю жодного інструменту, який здійснить перетворення для вас. Ви, звичайно, повинні вміти це робити, але це може зайняти трохи роботи. Я викладу основний процес. Вам знадобляться утиліти командного рядка з відкритим кодом pdftk
та djvused
(частина DjVuLibre). Вони доступні у менеджера пакунків (GNU / Linux) або на їх веб-сайтах (Windows, OS X).
крок 1: перетворення тексту файлу
Спочатку скористайтеся будь-яким інструментом для перетворення файлу DJVU у PDF (без закладок).
Припустимо, файли називаються filename.djvu
і filename.pdf
.
крок 2: витягніть контур DJVU
Далі виведіть дані контуру DJVU у такий файл:
djvused "filename.djvu" -e 'print-outline' > bmarks.out
Це файл, у якому перераховані закладки документів DJVU у серіалізованому форматі дерева. Насправді це просто SEXPR , і його можна легко розібрати. Формат такий:
file ::= (bookmarks
<bookmark>*)
bookmark ::= (name
page
<bookmark>*)
name ::= "<character>*"
page ::= "#<digit>+"
Наприклад:
(bookmarks
("bmark1"
"#1")
("bmark2"
"#5"
("bmark2subbmark1"
"#6")
("bmark2subbmark2"
"#7"))
("bmark3"
"#9"
...))
крок 3: конвертуйте контур DJVU у формат метаданих PDF
Тепер нам потрібно конвертувати ці закладки у формат, необхідний метаданими PDF. Цей файл має формат:
file ::= <entry>*
entry ::= BookmarkBegin
BookmarkTitle: <title>
BookmarkLevel: <number>
BookmarkPageNumber: <number>
title ::= <character>*
Тож наш приклад став би:
BookmarkBegin
BookmarkTitle: bmark1
BookmarkLevel: 1
BookmarkPageNumber: 1
BookmarkBegin
BookmarkTitle: bmark2
BookmarkLevel: 1
BookmarkPageNumber: 5
BookmarkBegin
BookmarkTitle: bmark2subbmark1
BookmarkLevel: 2
BookmarkPageNumber: 6
BookmarkBegin
BookmarkTitle: bmark2subbmark2
BookmarkLevel: 2
BookmarkPageNumber: 7
BookmarkBegin
BookmarkTitle: bmark3
BookmarkLevel: 1
BookmarkPageNumber: 9
В основному, вам просто потрібно написати сценарій, щоб пройти дерево SEXPR, слідкуючи за рівнем, і вивести ім'я, номер сторінки та рівень кожного запису, до якого він потрапляє, у правильному форматі.
крок 4: витягніть метадані PDF та зробіть їх у конвертовані закладки
Після отримання перетвореного списку виведіть метадані PDF з перетвореного PDF-файлу:
pdftk "filename.pdf" dump_data > pdfmetadata.out
Тепер відкрийте файл і знайдіть рядок, який починається:
NumberOfPages:
вставити перетворені закладки після цього рядка. Збережіть новий файл якpdfmetadata.in
крок 5: створити PDF з закладками
Тепер ми можемо створити новий файл PDF, що містить ці метадані:
pdftk "filename.pdf" update_info "pdfmetadata.in" output out.pdf
Файл out.pdf
повинен бути копією вашого PDF із закладками, імпортованими з файлу DJVU.
j.split('#')[1]
з(int(re.findall(r'\d+', j.split('#')[1])[0])+1)
і він працював великий. Debian Jessie потрібно:sudo apt-get install pdftk djvulibre-bin python-pip ruby ruby-dev libmagickwand-dev; sudo pip install sexpdata; sudo gem install iconv pdfbeads