4. Выходные форматы

Преобразование из DocBook в HTML в стандартных XSL-скриптах отработано практически идеально.

Нет проблем также с генерацией в Windows HTML Help. Скрипт htmlhelp/htmlhelp.xsl создает набор файлов HTML и необходимые служебные файлы. После этого запускаете help-компилятор hhc.exe, который компания Microsoft распространяет свободно, и получаете HTML Help.

Но в том, что касается генерации PDF, проблемы, увы, есть. И если для документов на английском языке получить выходной документ приемлемого качества довольно просто, то добиться того же для документа на русском — занятие не для слабонервных.

Сначала немного теории. PDF из DocBook получают в два этапа: сначала DocBook преобразуют в промежуточный формат — такой, для которого уже есть готовая программа преобразования в PDF. Таких промежуточных форматов два: XSL-FO и TeX. Стандартные xsl-скрипты поддерживают преобразование в XSL-FO, но дальше начинаются проблемы.

Хорошо известны два свободно распространяемых транслятора из XSL-FO в PDF: PassiveTeX и Apache FOP (xml.apache.org/fop). Первый никогда не рассматривался его автором в качестве серьезного продукта, второй выглядит посолиднее, все-таки Apache Foundation — это марка. Но увы, последняя версия FOP 0.20.5 была выпущена еще в июле 2003г. После этого разработчиками было заявлено о намерении выпустить версию 1.0, полностью переписав код, но по состоянию на начало 2005г. «никаких прогнозов по поводу сроков дать невозможно».

Из коммерческих FOP-процессоров, пожалуй, лучшим на сегодняшний день является продукт XEP от компании RenderX ценой около 300 долл. Это зрелый продукт и проблем с русским языком у него нет, благо вся команда разработчиков русскоязычная. К сожалению, "из коробки" кириллические шрифты в нем не работают и нет инструкции, которая толково объясняла бы как их включить. Но разобраться можно, и после того как кириллические шрифты подключены, все работает гладко. Работают даже переносы для русского текста.

Вторая альтернатива — промежуточное преобразование в LaTeX. Стандартные XSL-скрипты его не поддерживают, но есть, например, db2latex — также пакет XSL-скриптов, который можно заставить делать то, что нужно. "Из коробки" он с русскими буквами тоже не работает — как минимум, в XSLT-драйвере надо прописать следующее:


<xsl:output method="text" encoding="UTF-8" indent="yes"/>
<xsl:param name="latex.inputenc">utf8</xsl:param>
<xsl:param name="latex.document.font">pscyr</xsl:param>

Сгенерированный документ в формате LaTeX можно преобразовать в PDF командой pdflatex, также штатно имеющейся в Linux. После этого русский текст появляется, но до удовлетворительного результата еще далеко: остаются огрехи в графике, в выравнивании текста, в закладках PDF и т.п. Нас пакет db2latex не устроил еще и тем, что в нем не поддерживается атрибут morerows, т.е. в таблицах невозможно объединять ячейки по вертикали. К тому же стало ясно, что для доведения этого варианта до ума не обойтись без глубокого изучения TeX/LaTeX, а это в наши планы не входило.

Не в последнюю очередь источником проблем PDF является компания Adobe. Трудности с поддержкой русского языка возникают чуть ли не во всех ее продуктах: и в Photoshop, и во FrameMaker, и в Acrobat. (Видимо среди программистов в Adobe не оказалось выходцев из бывшего СССР.) Вот что официально пишет компания по поводу Adobe Acrobat версии 6: «при создании PDF из HTML файлов текст, набранный кириллическими шрифтами, заменяется неправильными символами или пустотами». Иными словами, «не работает — и не должно!»

Самый простой и надежно работающий вариант генерации PDF на русском — это Adobe Acrobat Distiller. Немаловажно то, что он включает шрифты в создаваемый документ, что гарантирует его прочтение на любом компьютере, а не только на том, что оснащен русской версией Windows. Поступаем следующим образом: штатными средствами (onechunk.xsl) создаем единый HTML; настраиваем CSS так, чтобы документ хорошо смотрелся в печатном варианте; отправляем его в Acrobat Distiller и получаем на выходе PDF.

Недостатки этого варианта: в результирующем PDF нет ссылок и закладок, т.е. это не гипертекстовый документ, а предназначенный в основном для печати; в оглавлении нет номеров страниц. Преимуществом же является то, что при помощи CSS можно точно подобрать шрифты, отступы, отбивки, расположение картинок и тем самым добиться индивидуального дизайна ваших документов. На пути XSL-FO этой цели добиться сложнее — потребуется глубокая адаптация XSL-скриптов.

DocBook Website

Еще одно применение DocBook — создание интернет-сайтов. Идея заключается в следующем: пользуясь тэгами DocBook, вы создаете по одному XML-файлу на каждую страницу сайта (корневой тэг <website>) плюс один XML-файл, содержащий оглавление. Затем обрабатываете эти файлы при помощи XSL-скриптов (docbook.sourceforge.net/release/website) и получаете на выходе набор HTML-страниц, составляющих вебсайт.

В ходе генерации к каждой странице автоматически подверстывается панель с иерархическим оглавлением сайта, пункты которого можно сворачивать-разворачивать. Также автоматически в оглавлении выделяются новые/измененные страницы. Примечательно, что ссылки между страницами сайта делаются не при помощи привычных <a href=…>, а при помощи тэга docbook <olink>. Это гарантирует, что все внутренние ссылки на результирующем сайте будут корректными.

Основное достоинство этой технологии, как и DocBook в целом,— последовательное отделение контента от дизайна. Скажем, сайты www.docbook.org, www.docbook.ru, сделанные по этой технологии, выглядят по-академически строго. Но, воспользовавшись стандартными приемами кастомизации DocBook, вы сможете радикально менять дизайн и верстку своего сайта, абсолютно не затрагивая при этом его контент.