Как известно, формат DjVu поддерживает встроенные аннотации-гиперссылки. В качестве адреса такой гиперссылки можно задать, например, номер страницы многостраничного DjVu-файла. Всё это используется, к примеру, в такой программе, как DjVu Hyperlinks Editor - которая внедряет гиперссылочное оглавление в DjVu-книгу.
Но DjVu-гиперссылки имеют один существенный недостаток: по ним можно перейти только на
начало желаемой DjVu-страницы. Тогда как в том же формате PDF по внутренней гиперссылке можно перейти на
произвольное место желаемой DjVu-страницы - т.е. на позицию с произвольным смещением относительно верха страницы.
Я давно уже спрашивал у Леона Боту и его коллег, нельзя ли что-то с этим сделать, как бы добавить желаемый функционал к DjVu-гиперссылкам - чтобы уравнять их в возможностях с PDF-гиперссылками? Вот топик на DjVuLibre с этим обсуждением:
https://sourceforge.net/projects/djvu/forums/forum/103286/topic/3517234Вот что ответил там Леон:
Things are not that simple. For instance, after eight years, there is still no consistency between djvulibre and celartem-djvu for something as simple as escape sequence in annotation strings. On the other hand, we (djvulibre) have been faster in implementing changes made by Celartem. Incidently, you can link to any part of a page by using the "showposition" cgi option. That works in djview4 and celartem=djvu. See http://djvu.sourceforge.net/doc/man/djview4.html
- L.
На днях я снова написал письмо Леону с тем же вопросом - что можно сделать с этой проблемой, как бы её решить?
Леон прислал мне такой ответ:
From the 'djvuchange.txt" document in djvulibre:
--------------
5- CGI STYLE OPTIONS IN MAPAREA AND OUTLINE LINKS
Outline and maparea annotation are
UTF-8 encoded strings that can be
interpreted as page specification (see section 3.1)
or as percent-encoded URLs (see section 1.3.)
In addition, strings starting with a question mark '?' are
interpreted as CGI style options separated by the
ampersand character '&'. These options are ignored
when the maparea link target is another window.
Otherwise these options are passed verbatim to the viewer.
This can cause portability problems because different djvu
viewers support different sets of CGI style options.
----------------
And I just checked that a link like
"?djvuopts&page=2&showposition=0,.46&zoom=300"
does exactly what it is supposed to do.
Why isn't this enough?
- L.
Такой ответ уже показался мне весьма интересным. То есть, Леон сказал, что у него подобный механизм работает - но только я вот не понял, как он этого добился? Я пробовал сделать такую гиперссылку в HTML-файле - она не заработала как нужно, то есть опции djvuopts были проигнорированы (в DjView 4). А как вставить такую гиперссылку в DjVu - я не понял. Попросил я Леона прислать мне образец DjVu-файла с внутренней гиперссылкой на произвольную позицию файла.
И сегодня Леон прислал мне такой DjVu-файл!

Вот он:
http://www.djvu-soft.narod.ru/scan/offset_hyperlink.rar (29 КБ)
Там на первой странице в левом верхнем углу над адресом вставлена такая гиперссылка. И действительно - при нажатии на неё происходит переход на произвольное место заданной страницы!

Однако, работает всё это только в DjView 4 (и ещё, наверное, в броузерном DjVu-плагине - надо будет попробовать) - а в WinDjView - не работает, при нажатии на гиперссылку выдаётся ошибка "Невозможно открыть документ ...".
Вот как выглядит синтаксис этой гиперссылки в djvused:
(maparea "?djvuopts&page=2&showposition=0,.46&zoom=300" "test"
(rect 116 2535 1159 571))
А вот - как в Document Express Editor 6:

Подробнее:

Получается, что теперь надо переделывать WinDjView - чтобы она тоже научилась работать с такими гиперссылками. А также можно уже переделывать DjVu Hyperlinks Editor - чтобы он научился создавать такие гиперссылки. Правда, это будет не слишком просто - ведь потребуется вычислять относительную позицию на листе позиции, на которую будет ссылаться гиперссылка. Впрочем, это дело техники. Кстати, теперь можно будет конвертировать PDF-гиперссылки в DjVu-гиперссылки без потерь! То есть, теперь не будет теряться страничное смещение цели гиперссылки.