обновление: user3124688 закодировал этот процесс в сценарии dpsprep .
Я не знаю каких-либо инструментов, которые сделают преобразование для вас. Вы, конечно, должны быть в состоянии сделать это, но это может занять немного работы. Я опишу основной процесс. Вам понадобятся утилиты командной строки с открытым исходным кодом 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