Актуально: ИТ-решение

Оборудование за 1 рубль

Позволяет корпоративным клиентам до 31 августа этого года приобрести оборудование для подключения к Интернету по мобильной сети оператора всего за 1 рубль.
Читайте подробности>>
 




Мир ПК :: Студия программирования

Все дело в FOPе

в buzz в мой мир в twitter версия для печатисохранить в pdf

Петр Курышев

Преобразование XML-документа с помощью Apache FOPЛюбая информационная система призвана обрабатывать информацию. У нее есть так называемые «ввод» и «вывод». Один из самых значимых «выводов» — отчетность. На территории Российской Федерации формат обязательной отчетности регламентирован и описан в законодательстве. Именно поэтому он имеет такое большое значение для компаний, выпускающих программные продукты для использования в нашей стране. Программы, ориентированные на бизнес, просто обязаны генерировать горы бумаг, избавляя от этой напасти операторов.

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

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

Что такое FOP и XSL-FO

В моем случае идеальное решение — продукт Apache FOP. Он свободен, и код его открыт. Лицензия Apache Software License позволяет использовать FOP в коммерческих продуктах и основывать на нем другие коммерческие разработки, не открывая после этого весь исходный код. Главное условие использования кода под лицензией Apache — информирование его получателя о том, что в продукте имеется код с этой лицензией.

Что же такое Apache FOP и почему его можно использовать для создания отчетности в коммерческом приложении? Это XSL-FO — процессор, который реализует часть стандарта XSL-FO (XSL Formating Objects) консорциума W3C. XSL-FO, в свою очередь, — часть XSL, набора технологий фонда, разработанных для преобразования и форматирования данных, представленных в XML. Другими частями пула технологий XSL являются XSL и XPath, предназначенные для преобразования XML-файлов и обращения к частям XML-документа.

Преобразование XML-документа с помощью Apache FOP

Стандарты обсудим немного позже. С лицензиями и технологиями все понятно. Однако что же все-таки будет главным фактором выбора Apache FOP в качестве сердца «генератора» отчетности? Во-первых, разделение данных и способов их отображения. Во-вторых, гибкость формата XML для передачи данных. В-третьих, доступность на рынке визуальных редакторов для работы с файлами преобразований XSL-FO. В-четвертых, функциональность Apache FOP, достаточная для реализации форм отчетности, принятых в нашей стране. Не могу сказать, что реализовать их просто, но это вполне возможно.

Немного о стандартах

Внешний вид документа, получаемого при запуске Apache FOP с ключом -awtПочему в процессе разработки следует ориентироваться именно на стандарты, а не на конкретные решения? Как правило, разработчики программного продукта недооценивают масштабы жизненного пути своего творения. Зато заказчик и эксплуататор этого решения знает: чем дольше он сможет использовать продукт, тем лучше возвращаются инвестиции, затраченные на его разработку или покупку. Вот и получается, что программы для мэйнфреймов все еще существуют в глубинах корпораций и древние разработки на языке программирования COBOL успешно справляются со своими обязанностями.

Мир, как известно, не стоит на месте, и любой продукт требует поддержки и развития. Вот здесь-то и начинаются проблемы в том случае, если разработчик был привязан к конкретной технологии. Она могла измениться и утратить совместимость со своей прошлой инкарнацией, а поставщик мог отказаться от ее развития и поддержки. Компания-разработчик иногда просто исчезает. Если же архитектура вашего продукта была построена в расчете на стандарт, то новых инвестиций в него не потребуется. Надо будет найти на рынке решение, более всего соответствующее стандарту, и использовать его. Возможно, что некоторая работа по модернизации программного кода все-таки понадобится, но она будет связана с инновацией и адаптацией к новому и прогрессивному, а не направлена на поиск решения под платформу, «такую же, как эта, но другую».

Лучше один раз увидеть

В нашем случае главная цель применения Apache FOP — создание красивого документа. Рассмотрение подготовки одного документа строгой формы отчетности может занять целую статью или даже серию статей. Здесь же мы ограничимся лишь наброском документа, который будет содержать шапку и список. Допустим, это некий прообраз счета, заказа или информационного письма. В шапке документа должно находиться наименование клиента, в теле документа — список товаров с основными атрибутами, а закончится документ подписью с указанием названия компании-поставщика.

Для того чтобы получить отчет с помощью FOP, потребуются сами данные и способ их представления. Данные передаются в формате XML, а преобразование — в виде XSLT-файла. После «наложения» преобразований на данные должен выйти корректный XSL-FO-документ. Он-то и будет переводиться в графическую форму.

Допустим, у нас есть следующие данные для построения отчета:

<report>

<header>

<supplier>Fruit Co.</supplier>

<client>Labaz inc.</client>

</header>

<rows>

<row price=”1” quantity=”2”

total=”2”><name>Яблоко</name></row>

<row price=”2” quantity=”1”

total=”2”><name>Груша</name></row>

<row price=”3” quantity=”4”

total=”12”><name>Тыква</name></row>

</rows>

</report>

Шапкой документа служит содержимое тега header, а деталями данного тестового отчета — то, что находится в теге rows. В данном примере мы используем минимум оформления, но суть этого небольшого отчета сохранится. Суммируются поля количества и общей стоимости.

Преобразование в виде xslt-файла может представлять собой примерно следующее:

<?xml version=”1.0” encoding=”utf-8”?>

<xsl:stylesheet version=”1.0”

xmlns:xsl=”http://www.w3.org/1999/XSL/

Transform”

xmlns:fo=”http://www.w3.org/1999/XSL/

Format”>

<xsl:output method=”xml” indent=”yes”/>

<xsl:template match=”/”>

<fo:root>

<fo:layout-master-set>

<fo:simple-page-master master-name=”A4-

portrait”

page-height=”29.7cm” page-

width=”21.0cm” margin=”2cm”>

<fo:region-body/>

</fo:simple-page-master>

</fo:layout-master-set>

<fo:page-sequence master-reference=”A4-

portrait”>

<fo:flow flow-name=”xsl-region-body”

font-size=”12pt”>

<fo:block font-size=”16pt”>

Уважаемая компания <xsl:value-of select=”/

report/header/client”/> !

</fo:block>

<fo:block padding-top=”1cm”

padding-bottom=”1cm”>Напоминаем вам, что были

заказаны следующие товары:</fo:block>

<xsl:for-each select=”/report/

rows/row”>

<fo:block>

<xsl:value-of

select=”name”/> (стоимость единицы: $<xsl:value-

of select=”@price”/>,

заказанное количество:

<xsl:value-of select=”@quantity”/>,

всего: <xsl:value-of

select=”@total”/>).

</fo:block>

</xsl:for-each>

<fo:block>Всего <xsl:value-of

select=”sum(/report/rows/row/@quantity)”/> пред-

метов на сумму

$<xsl:value-of select=”sum(/

report/rows/row/@total)”/> </fo:block>

<fo:block font-size=”14pt”

padding-top=”1cm”>

Искренне ваши,

работники компании-поставщика <xsl:value-of

select=”/report/header/supplier”/>.

</fo:block>

</fo:flow>

</fo:page-sequence>

</fo:root>

</xsl:template>

</xsl:stylesheet>

Из тега header XML-документа берется название поставщика и клиента, которые находятся в тегах supplier и client соответственно. Данные для списка содержатся в тегах row (запись или строка), которые группируются в теге rows. Каждая строка содержит информацию о названии товара (в теле тега), его цене (атрибут price) и заказанном количестве (атрибут quantity).

Внешний вид документа, получаемого при запуске Apache FOP с ключом -awt

Кроме PDF Apache FOP в разной степени поддерживает следующие форматы: PostScript, простой текст, MIF (формат Adobe FrameMaker), PCL, RTF или SVG. Однако для промышленного использования рекомендуется применять именно PDF, так как он является основным для Apache FOP и вся функциональность реализуется и тестируется в основном именно для него.

Полезные советы

Создавать файлы xsl-fo можно при помощи визуальных редакторов, например StyleVisionНапоследок приведу несколько советов, которые будут полезны при использовании и изучении Apache FOP. Прежде всего для составления русскоязычных документов потребуется набор кириллических шрифтов. Можно взять любой шрифт TrueType, которым вы располагаете, и добавить к нему метрику в XML–формате с помощью следующей команды:

java org.apache.fop.fonts.apps.TTFReader arial.ttd arial.xml

Причем сделать это надо для всех имеющихся начертаний данного шрифта. Потом потребуется создать файл с конфигурацией, описывающей такой шрифт. Этот файл может содержать разные параметры конфигурации, но для выбранных шрифтов в теге fonts следует добавить элементы font для каждого начертания:

<font metrics-file=”Arev.xml” kerning=”yes” embed-file=”/usr/share/fonts/TTF/Arev/Arev.ttf”> <font-triplet name=”Arev Sans” style=”normal” weight=”normal”/></font>

Для того чтобы лучше понять, в чем состоит проблема при «падении» FOP, нужно запустить эту программу с ключом -d, т.е. разрешить вывод отладочной информации. Исключение в стандартном формате Java поможет вам найти проблемную строку в файле данных или преобразования.

Мне кажется, не стоит перекладывать какую-либо логику преобразования данных на FOP. Лучше выполнять весь объем вычислений непосредственно в базе данных или с помощью скрипта, который «выгружает» данные в XML-файл, в зависимости от того, где в вашей информационной системе реализована логика приложений.

07.11.2008г


Комментарии:


Для того, чтобы оставить комментарий авторизуйтесь или зарегистрируйтесь.

Новости ОСП-ТВ - 03.09.10


В номере

14/03/2002 №03

КОЛОНКА РЕДАКТОРА

Журналу «Мир ПК» — 20 лет!

Напрашивается сравнение «Мира ПК» с большим океанским лайнером — немало выдержать бурь и обойти опасных рифов довелось ему за эти 20 лет. Только на непросвещенный взгляд кажется, что первому (на рынке) жить проще, чем идти за кем-то следом.


Эта рубрика в архиве
Список номеров за



Инфозоны

DIRECTUM EVERYWHERE

УРАЛХИМ признал DIRECTUM

Система DIRECTUM стала корпоративным стандартом электронного документооборота в масштабах всего холдинга "Уралхим".

Уфа внедряет электронный муниципалитет

Платформа DIRECTUM стала центральным звеном в создаваемой информационной системе, направленной на повышение эффективности и открытости местных органов власти.

Цена вопроса

Кто и когда должен оценивать эффективность ECM-проектов? Как перейти от общих результатов к конкретным количественным характеристикам?

DIRECTUM во власти

Внедрение СЭД в Правительстве Астраханской области: система управления делами для 12 министерств и более 1300 сотрудников.

OSP.RU :: Написать письмо.