В прошлом номере "Компьютерных вестей" мы с вами обсудили проблему внедрения поддержки PDF в приложения, создаваемые с использованием различных языков программирования и технологий. Сегодня поговорим о "родственном" вопросе - о внедрении поддержки формата DjVu.
Зачем внедрять поддержку DjVu?
Если в случае с PDF вопрос "А зачем приложениям нужна поддержка этого формата?" был, в некотором роде, риторическим, то в случае формата DjVu он становится уже далеко не праздным. Дело в том, что формат DjVu распространён не так широко, как PDF, а, соответственно, и потребность пользователей в приложениях, которые бы поддерживали его, значительно меньше. В то же время, если бы форматом DjVu вообще никто не пользовался, то не было бы и смысла писать подобную статью, потому что проблемы поддержки этого формата в более-менее массовых масштабах и не существовало бы в природе. Однако этот формат всё-таки, как ни крути, используется активно для хранения тех же электронных книг и другой документации.
В общем-то, в первую очередь, поддержка DjVu нужна в программах, где идёт работа с документами - в системах электронного документооборота, управления архивами и других подобных решениях. Может пригодиться поддержка DjVu в разных вьюверах (в своё время, помнится, в том же ACDSee была поддержка этого формата), в программах для работы со сканерами... Да, в общем-то, была бы программа и были бы у неё пользователи, которым нужна поддержка DjVu в этой программе.
Немного о самом формате
Как и в статье про PDF, давайте для начала вспомним, чем, так сказать, знаменит формат DjVu и в чём его "важность для народного хозяйства". Этот формат оптимизирован специально для хранения электронных документов (особенно отсканированных), что достигается использованием в нём различных текстовых и графических слоёв, а также применением сжатия с потерями, что позволяет получать гораздо меньшие по размеру файлы, чем если бы отсканированные документы были "засунуты" в формат PDF. Собственно говоря, именно благодаря этой особенности данного файлового формата он стал таким популярным. Разработала же его в своё время AT&T Research.
DjVu свободный формат, то есть его спецификации являются открытыми, и вы можете беспрепятственно реализовывать его поддержку в своём приложении. Но, как и в случае с PDF, во весь свой немалый рост встаёт вопрос о целесообразности такого подхода. Формат DjVu тоже не так прост, как, например, обычные графические форматы, а потому имеет смысл сначала поискать готовые решения.
Немного о готовых решениях вообще
Заранее забегая вперёд, хочу сказать, что, в отличие от PDF, решений для внедрения поддержки DjVu, в общем-то, мягко говоря, не очень много. Нет, не сказать, что их совсем нет, но их мало, по сравнению с библиотеками, способными осчастливить пользователей вашего приложения поддержкой PDF.
В принципе, это вполне закономерно. DjVu сегодня используется, в основном, для распространения электронных книг, в то время как область применения PDF несравнимо шире. Вы можете встретить в формате PDF и различные мануалы к программам и библиотекам, и электронные версии разных официальных документов, которые предлагается самостоятельно заполнить и распечатать, и статьи из различных изданий... В общем-то, во многом этому способствуют широкие возможности самого формата, но не нужно забывать и про не менее широкую спину компании Adobe, занимающейся его разработкой и продвижением. В случае с DjVu всё намного скромнее. Потому более скромным является и число библиотек, обеспечивающих поддержку работы с DjVu в приложениях.
Впрочем, кажется, я немного отвлёкся, и нужно всё-таки приступить к рассказу о самих библиотеках, ради которого, в общем-то, эта заметка и задумывалась.
DjVuLibre
Если вы пишете свободное программное обеспечение, то можете воспользоваться кодом другого свободного программного обеспечения, распространяемого на условиях GNU GPL. А если несвободное, то можно просто нагло... э... украсть этот код, - только я вам об этом не говорил, договорились? Потому что это плохо, а на Западе за такое на вас даже могут подать в суд. Но дело, конечно, не только в судах - просто как-то неэтично пользоваться наивностью доверчивых, как дети, разработчиков свободного софта, которые верят в то, что с его помощью можно построить коммунизм и обеспечить мир во всём мире. Да и просто стоит уважать труд своих коллег, работающих не за деньги, а за идею. Поэтому, в общем, будем считать, что мы рассматриваем вариант для тех, кто желает написать программу, распространяемую на условиях GNU GPL.
Вариант же этот заключается в использовании наработок проекта DjVuLibre (djvu.sourceforge.net). Этот проект - совсем не библиотека для разработчиков, но поскольку её исходные тексты открыты, то можно этим фактом воспользоваться. Как написано на официальном сайте, "DjVuLibre includes a standalone viewer, a browser plug-in (for Mozilla, Firefox, Konqueror, Netscape, Galeon, and Opera), and command line tools (decoders, encoders, utilities). DjVuLibre works under Unix with X11". Понадеемся, что читатели статьи, связанной с разработкой приложений, знают английский в достаточном объёме, чтобы перевод этой фразы не потребовался. Как видите, в распоряжении того, кто воспользуется кодом DjVuLibre, окажутся практически все возможности, начиная с чтения документов формата DjVu и заканчивая их созданием (правда, только в чёрно-белом режиме) и конвертацией DjVu в другие форматы.
Сами инструменты, входящие в состав DjVuLibre, написаны на C++. В принципе, это неплохо, но если вы используете какой-то другой язык, придётся идти на ухищрения. И если для того же Delphi можно ещё как-то написать DLL'ку, то для Java лучше поискать что-нибудь другое.
Java DjVu Viewer Project
Тоже вариант, в принципе, умеренно удачный, потому что, как и в случае с предыдущим проектом, этот также разрабатывается и распространяется под милой сердцу каждого линуксоида GNU GPL. Сайт этого проекта находится по адресу javadjvu.foxtrottechnologies.com, и, кстати, ссылку на него можно найти на сайте DjVuLibre.
Для Java реализован только просмотр DjVu, хотя, откровенно говоря, вряд ли вам так уж сильно понадобится создавать документы в этом формате в своём приложении. Собственно, наверное, что-то ещё сказать по поводу этого программного продукта сложно, потому что, как видите, функций у него немного.
Caminova DjVu SDK
В процессе чтения этой статьи у вас могло сложиться мнение, что внедрение поддержки DjVu в ваш программный продукт будет неизбежно сопряжено с "ковырянием" в коде какого-нибудь свободного программного продукта, который нужно будет адаптировать под ваши нужды, и неизбежным переводом разрабатываемого вами приложения в разряд свободного, и, более того, распространяемого на условиях GNU GPL софта (или нарушением лицензии - но мы с вами люди законопослушные, и такое может присниться разве что в страшном сне). Но, к счастью, это совсем не так, и добропорядочные разработчики коммерческих приложений, желающие оплатить кому-нибудь библиотеку для включения поддержки DjVu в свой софт, а потом терзать техподдержку этой несчастной компании, могут осуществить свою мечту.
Caminova DjVu SDK - это кросс-платформенная C++-библиотека, поддерживающая как чтение, так и запись DjVu-документов. Сайт этой библиотеки располагается по адресу dev.caminova.jp/sdk. Хотя сама библиотека написана на чистом C++, её авторы предлагают "обёртку" для .NET-разработчиков, с помощью которой можно использовать возможности библиотеки в приложениях, пишущихся на C# и Visual Basic .NET, и даже, если есть такая необходимость, в PowerShell-скриптах. При этом Caminova DjVu SDK полностью поддерживает Unicode (т.е. не будет проблем с многоязычными документами) и поддерживает Windows, Mac OS X и различные UNIX-подобные операционные системы. Ещё, как пишут создатели библиотеки, это первый SDK, официально поддерживающий чтение и запись защищённых DjVu-документов. Прямо на сайте библиотеки можно найти справку по ней, ознакомиться с деревом классов и заголовочных файлов. Есть и простые примеры работы с библиотекой.
Единственное, пожалуй, чего так и не удалось найти на сайте, это стоимость библиотеки и политику её лицензирования. Но если вы заинтересовались, попробуйте написать создателям Caminova DjVu SDK, и, может быть, они прояснят вам эти моменты.
Резюме
Что ж, как видите, внедрить поддержку DjVu в своё приложение сложнее, чем поддержку PDF - по крайней мере, если опираться на какие-то сторонние разработки, а не писать всё с нуля самостоятельно. Если же заниматься написанием этой функциональности своими силами, то, наверное, задачи будут в равной степени трудоёмкими. Что касается разных библиотек и компонентов для чтения и записи DjVu-файлов, то, как видите, их ассортимент, мягко говоря, довольно скуден. О причинах этого я достаточно подробно писал выше, и не вижу, честно говоря, смысла повторяться. Наверное, именно по причине не слишком большого числа продуктов для работы с DjVu для разработчиков этот формат поддерживается меньшим числом приложений, чем, скажем, тот же PDF. Хотя, возможно, всё дело как раз в том, что он менее востребован пользователями.
В любом случае, если вы всё-таки отважитесь взяться за добавление поддержки DjVu в ваше приложение, то хочу пожелать вам успехов.
Вадим СТАНКЕВИЧ,
[email protected]
Горячие темы