Преобразование из 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 — создание интернет-сайтов.
Идея заключается в следующем: пользуясь тэгами DocBook,
вы создаете по одному XML-файлу на каждую страницу сайта
(корневой тэг <website>)
плюс один XML-файл, содержащий оглавление.
Затем обрабатываете эти файлы при помощи XSL-скриптов
(docbook.sourceforge.net/release/website)
и получаете на выходе набор HTML-страниц, составляющих вебсайт.
В ходе генерации к каждой странице автоматически подверстывается
панель с иерархическим оглавлением сайта, пункты которого можно сворачивать-разворачивать.
Также автоматически в оглавлении выделяются новые/измененные страницы.
Примечательно, что ссылки между страницами сайта делаются
не при помощи привычных <a href=…>,
а при помощи тэга docbook <olink>.
Это гарантирует, что все внутренние ссылки на результирующем сайте будут корректными.
Основное достоинство этой технологии, как и DocBook в целом,— последовательное отделение контента от дизайна. Скажем, сайты www.docbook.org, www.docbook.ru, сделанные по этой технологии, выглядят по-академически строго. Но, воспользовавшись стандартными приемами кастомизации DocBook, вы сможете радикально менять дизайн и верстку своего сайта, абсолютно не затрагивая при этом его контент.