![]() © 2001-2003 |
Russian FOP HOWTO:Установка и конфигурацияЭтот документ описывает методику установки и конфигурации Apache FOP (Formatting Objects Processor) для работы с пользовательскими шрифтами. Данная методика опробована при конфигурировании FOP версий 0.19.x и до 0.20.5 включительно. 1 Приборы и материалыЧто нам понадобится:
2 Установка и запуск FOPУстановка FOP проста и обычно, не вызывает особых проблем. Просто распакуйте дистрибутив (файл fop-0.x.x.tar.gz) куда-нибудь по своему усмотрению. Проверьте, включен ли каталог с исполняемыми файлами java-машины в системный PATH (наберите "java -version" в командной строке). На UNIX можно вместо PATH определить переменную окружения JAVA_HOME, содержащую путь к каталогу установки java. Каталог установки FOP также рекомендуется включить в системный PATH. В этом случае, скрипт запуска FOP (fop.bat или fop.sh) будет доступен из любого текущего каталога системы. С этой же целью на Windows рекомендуется отредактировать fop.bat, указав абсолютные пути для библиотек вместо относительных. Для fop.sh (UNIX) можно задать переменную окружения FOP_HOME. Править скрипт для удобного запуска FOP можно множеством способов. Я например, использую переменную окружения FOP_HOME и под Windows. Делайте, как вам удобнее. Теперь можно попробовать запустить FOP для преобразования вашего тестового XSL-FO файла в PDF: fop -fo foo.fo -pdf foo.pdf или просто: fop foo.fo foo.pdf Для преобразования XML+XSLT в PDF вызовите: fop -xml foo.xml -xsl foo.xsl -pdf foo.pdf Полный список всех доступных опций запуска FOP можно увидеть, запустив fop.bat/fop.sh без параметров. По умолчанию FOP скомпилирован с 14 шрифтами (Times, Helvetica и Courier в разных вариациях начертания, Symbol и ZapfDingbats. К сожалению, эти шрифты не включают кириллицу, поэтому русского текста в PDF не получится. Для этого нужно подключить пользовательские Unicode-шрифты, чем мы с вами, собственно, и занимаемся. 3 Генерация метрик шрифтовДля того, чтобы подключить пользовательские шрифты, для каждого шрифта необходимо создать файл метрик -- XML-файл с параметрами глифов. Для этого в состав FOP входит утилита TTFReader (org.apache.fop.fonts.apps.TTFReader). Для Type1-шрифтов существует аналогичная утилита PFMReader, но для нас это не актуально. Для генерации метрик TTF-шрифта вызовите TTFReader: java -cp build/fop.jar;lib/avalon-framework.jar;lib/xml-apis.jar; lib/xercesImpl.jar;lib/xalan.jar org.apache.fop.fonts.apps.TTFReader fontfile.ttf fontmetrics.xml Пути для библиотек в этом примере заданы относительно каталога установки FOP. Само собой, можно написать скрипт для удобного запуска TTFReader. 4 Регистрация новых шрифтовПосле того, как для шрифтов сгенерированы метрики, нужно указать эти шрифты и метрики в конфигурационном файле FOP -- userconfig.xml, находящемся в подкаталоге conf каталога FOP. Откройте этот файл и найдите в нем секцию /configuration/fonts. В комментарии к этой секции вы должны увидеть примеры XML-элементов font, определяющих параметры каждого шрифта: <font metrics-file="arial.xml" kerning="yes" embed-file="arial.ttf"> <font-triplet name="Arial" style="normal" weight="normal"/> <font-triplet name="ArialMT" style="normal" weight="normal"/> </font> <font metrics-file="arialb.xml" kerning="yes" embed-file="arialb.ttf"> <font-triplet name="Arial" style="normal" weight="bold"/> <font-triplet name="ArialMT" style="normal" weight="bold"/> </font> <font metrics-file="ariali.xml" kerning="yes" embed-file="ariali.ttf"> <font-triplet name="Arial" style="italic" weight="normal"/> <font-triplet name="ArialMT" style="italic" weight="normal"/> </font> <font metrics-file="arialbi.xml" kerning="yes" embed-file="arialbi.ttf"> <font-triplet name="Arial" style="italic" weight="bold"/> <font-triplet name="ArialMT" style="italic" weight="bold"/> </font> Каждый элемент font содержит один или более элементов font-triplet, с помощью которых определяется множество синонимов-алиасов имени данного шрифта (в данном примере шрифту присваиваются имена-синонимы Arial и ArialMT, ссылающиеся на один и тот же шрифтовый файл). Эти имена будут использоваться для адресации шрифтовой гарнитуры в атрибуте XSL "font-family". Полезно сразу же присвоить стандартные алиасы serif, sans-serif и monospace шрифтам, которые вы хотите использовать как дефолтные "шрифт с засечками", "шрифт без засечек" и "моноширинный". Заметьте, что sans-serif -- это шрифт FOP по умолчанию, то есть тот, который используется при отсутствии атрибута font-family. Атрибуты style и weight определяют начертание шрифта, то есть значения атрибутов XSL "font-style" и "font-weight", которые вместе адресуют данное начертание. Так, в приведенном примере определяются четыре начертания шрифта Arial - нормальное(style="normal", weight="normal"), полужирное (style="normal", weight="bold"), курсивное (style="italic", weight="normal") и полужирное курсивное (style="italic", weight="bold"). Таким образом, нам необходимо создать для каждого начертания шрифта по одному элементу font, ссылающегося на шрифтовый файл и файл метрик: <font metrics-file="file:///C:/java/fop-0.20.5/font-metrics/cour.xml" kerning="yes" embed-file="C:/WINNT/Fonts/cour.ttf"> <font-triplet name="Courier" style="normal" weight="normal"/> <font-triplet name="Courier New" style="normal" weight="normal"/> <font-triplet name="monospace" style="normal" weight="normal"/> </font> Обратите внимание, что для файла метрик нужно указывать путь в формате URI (с префиксом протокола "file:"), в то время как путь к шрифтовому файлу указывается в обычном формате ОС. 5 Запуск с пользовательской конфигурациейПосле того как шрифты зарегистрированы в userconfig.xml, необходимо добавить параметр "-с PATH_TO_USERCONFIG" в опции запуска FOP (в скриптах fop.bat/fop.sh): org.apache.fop.apps.Fop -c C:/java/fop-0.20.5/conf/userconfig.xml ... Это все. Теперь можете попробовать указать имена ваших шрифтов в атрибутах FO "font-family", снова обработать ваш тестовый FO-файл и посмотреть на результат. 6 Запуск встроенного FOP с пользовательской конфигурациейВыше был рассмотрен случай запуска FOP из командной строки (с помощью класса org.apache.fop.apps.Fop). Но в ряде случаев требуется запуск FOP из другого java-приложения (в частности, сервлета) -- с помощью класса org.apache.fop.apps.Driver. Для того, чтобы FOP нашел и использовал наш конфигурационный файл, нужно инстанцировать класс org.apache.fop.apps.Options с этим файлом до вызова Driver.run(). Все это, в общем случае, выглядит следующим образом: Driver driver = new Driver(new InputSource(input), new FileOutputStream(output)); driver.setRenderer(Driver.RENDER_PDF); Options options = new Options(new File("path/to/userconfig.xml")); driver.run(); Комментарии, замечания и пожелания по поводу данного текста приветствуются. |