© 2001-2003
Алексей Алишевских
alexeya at gmail-dot-com

Last Modified:
01/24/2006 14:00:21

XSL FO и FOP

Для чего нужны XSL FO и FOP

Одно из решающих преимуществ использования XML для подготовки текстовых документов -- возможность получения произвольного множества  представлений  из одного и того же исходного текста. Многие веб-мастера уже оценили преимущества XML+XSLT перед ручным написанием HTML. Такой подход позволяет в любой момент изменить стиль сайта или получать различные версии HTML-оформления для одних и тех же документов.

С помощью языка XSL Formatting Objects и его реализации -- Apache FOP появляется дополнительная возможность получения печатных документов. Конечно, можно печатать HTML из броузера, но все броузеры до сих пор являются крайне примитивными системами автоматической верстки. К тому же, возможностей HTML и CSS недостаточно для исчерпывающе точного описания представления документа.  XSL FO  позволяет точно описывать, а FOP -- генерировать документы, практически, типографского качества.

FOP может использоваться, в частности:

  • В качестве издательской системы (как XML-альтернатива TeX)
  • Для визуализации данных и генерации отчетов в информационных системах
  • Для получения печатных версий веб-страниц в системах CMS 
  • Везде, где необходима генерация печатных документов  с точными параметрами оформления.

Как это работает

Предположим, мы хотим получить печатную версию (PDF) руководства пользователя в каком-то нашем частном XML языке. Процесс полностью аналогичен генерации HTML -- нам нужно написать XSLT-преобразование из нашего языка в XSL FO, соответствующий желаемому оформлению. Конечно, можно писать текст XSL FO и руками, но это довольно непродуктивное занятие, сводящее на нет все преимущества XML-паблишинга. Затем мы обрабатываем полученный XSL FO документ в FOP и получаем требуемый результат.   

Можно поступить еще проще -- если FOP может найти какой-нибудь TRAX-совместимый XSLT-процессор (стандартная поставка включает Xalan), он может самостоятельно выполнить XSLT-преобразование. В этом случае нам достаточно указать исходный XML-документ и XSLT-стайлшит чтобы сразу получить PDF (промежуточный этап -- генерация XSL FO произойдет автоматически).

Если вы используете стандартный XML-язык, то можно попытаться найти для него готовые XSLT-стайлшиты для преобразования в XSL FO. Например, такие стайлшиты входят в пакет DocBook XSL Stylesheets   для популярного языка DocBook. В дистрибутив самого FOP входят стайлшиты для собственного языка Apache XML Project (стайлшиты, DTD и образцы документов на этом языке можно найти в каталоге src/documentation).