на главную обучение сертификация статьи литература ссылки гостевая книга
  Список статей Оглавление Текст статьи  

Java: Русские буквы и не только...

Автор:Астахов Сергей
Создан:03.06.2003


12. FOP

   Пакет FOP предназначен для обработки документов по стандарту XSL FO (Formating Objects). В частности он позволяет создавать PDF-документы на базе документов XML. Для преобразования из исходного XML в FO пакет FOP по умолчанию использует XSLT-процессор Xalan в паре с Xerces. Для создания итогового изображения в FOP необходимо подключить шрифты, поддерживающие русские буквы. Вот как можно проделать это для версии 0.20.1:
  1. В подкаталог conf/fonts (например, в c:\fop-0.20.1\conf\fonts\) скопировать файлы ttf из системного каталога Windows. Для Arial normal/normal, normal/bold, italic/normal и italic/bold нужны файлы arial.ttf, arialbd.ttf, ariali.ttf и arialbi.ttf

  2. Сгенерировать файлы описаний шрифтов (типа arial.xml). Для этого для каждого шрифта нужно выполнить команду (это для Arial normal/normal, всё в одну строку):
      java -cp .;c:\fop-0.20.1\build\fop.jar;c:\fop-0.20.1\lib\batik.jar;
        c:\fop-0.20.1\lib\xalan-2.0.0.jar;c:\fop-0.20.1\lib\xerces.jar;
        c:\fop-0.20.1\lib\jimi-1.0.jar
        org.apache.fop.fonts.apps.TTFReader fonts\arial.ttf fonts\arial.xml
    	
  3. В FOP добавить в conf/userconfig.xml описание шрифта с русскими буквами, типа:
      <font metrics-file="c:\fop-0.20.1\conf\fonts\arial.xml" kerning="yes"
        embed-file="c:\fop-0.20.1\conf\fonts\arial.ttf">
        <font-triplet name="Arial" style="normal" weight="normal"/>
        <font-triplet name="ArialMT" style="normal" weight="normal"/>
      </font>
    	
    Аналогично добавляются Arial normal/bold, italic/normal и italic/bold

  4. При вызове FOP из командной строки после org.apache.fop.apps.Fop писать -c c:\fop-0.20.1\conf\userconfig.xml Если нужно использовать FOP из сервлета, то нужно в сервлете после строчки:
      Driver driver=new Driver();
    	
    добавить строчки:
      // Каталог fonts (c:\weblogic\fonts) был
      // создан исключительно для удобства.
      String userConfig="fonts/userconfig.xml";
      File userConfigFile=new File(userConfig);
      Options options=new Options(userConfigFile);
    	
    Тогда расположение файлов ttf в файле userconfig.xml можно указать относительно корня сервера приложения, без указания абсолютного пути:
      <font metrics-file="fonts/arial.xml" kerning="yes"
        embed-file="fonts/arial.ttf">
        <font-triplet name="Arial" style="normal" weight="normal"/>
        <font-triplet name="ArialMT" style="normal" weight="normal"/>
      </font>
    	
  5. В файле FO (или XML и XSL) перед использованием шрифта писать:
      font-family="Arial"
      font-weight="bold" (Если используется Arial bold)
      font-style="italic" (Если используется Arial italic)
    	
   Данный алгоритм прислал Алексей Тюрин, за что ему отдельное спасибо.

   Если Вы используете встроенный в FOP просмотрщик, то необходимо учесть его особенности. В частности, хотя предполагается, что надписи в нём русифицированы, на самом деле сделано это с ошибкой (в версии 0.19.0). Для загрузки надписей из файлов ресурсов в пакете org.apache.fop.viewer.resources используется собственный загрузчик (класс org.apache.fop.viewer.LoadableProperties). Кодировка чтения там жёстко зафиксирована (8859_1, как и в случае Properties.load()), однако поддержка записи вида "\uXXXX" не реализована. Я сообщил об этой ошибке разработчикам, они включили её исправление в свои планы.

   Кроме всего прочего существует сайт посвящённый русификации FOP (http://www.openmechanics.net/rusfop/). Там Вы сможете найти дистрибутив FOP с уже исправленными ошибками и подключенными русскими шрифтами.


назад оглавление дальше