Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Русификация FOP 0.95 
V
    Опции темы
ReFLeXive
Дата 17.3.2010, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 30.3.2009
Где: г. Уфа

Репутация: нет
Всего: 1



ПРивет всем!
ПРоблема с русификацией FOP 0.95. КОгда вывожу в RTF - показывает русские буквы, а когда в PDF - то показывает решетки!
Делал следующее: в каталоге conf в файле fop.xconf прописал шрифты в разделе <fonts>...</fonts> таким образом:
Код

        <font metrics-url="arial.xml" kerning="yes" embed-url="arial.ttf">
        <font-triplet name="Arial" style="normal" weight="normal"/>
        <font-triplet name="ArialMT" style="normal" weight="normal"/>
    </font>
    <font metrics-url="arialbold.xml" kerning="yes" embed-url="arialbold.ttf">
        <font-triplet name="Arial" style="normal" weight="bold"/>
        <font-triplet name="ArialMT" style="normal" weight="bold"/>
    </font>
    <font metrics-url="ariali.xml" kerning="yes" embed-url="ariali.ttf">
        <font-triplet name="Arial" style="italic" weight="normal"/>
        <font-triplet name="ArialMT" style="italic" weight="normal"/>
    </font>
    <font metrics-url="arialbi.xml" kerning="yes" embed-url="arialbi.ttf">
        <font-triplet name="Arial" style="italic" weight="bold"/>
        <font-triplet name="ArialMT" style="italic" weight="bold"/>
    </font>
    <font metrics-url="arialn.xml" kerning="yes" embed-url="arialn.ttf">
        <font-triplet name="Arialn" style="normal" weight="normal"/>
        <font-triplet name="ArialnMT" style="normal" weight="normal"/>
    </font>
    <font metrics-url="arialnbold.xml" kerning="yes" embed-url="arialnbold.ttf">
        <font-triplet name="Arialn" style="normal" weight="bold"/>
        <font-triplet name="ArialnMT" style="normal" weight="bold"/>
    </font>
    <font metrics-url="dejavulgcsansmono.xml" kerning="yes" embed-url="dejavulgcsansmono.ttf">
        <font-triplet name="DejaVuLGCSansMono" style="normal" weight="normal"/>
        <font-triplet name="DejaVuLGCSansMonoMT" style="normal" weight="normal"/>
    </font>
    <font metrics-url="dejavulgcsansmonobold.xml" kerning="yes" embed-url="dejavulgcsansmonobold.ttf">
           <font-triplet name="DejaVuLGCSansMono" style="normal" weight="bold"/>
           <font-triplet name="DejaVuLGCSansMonoMT" style="normal" weight="bold"/>
    </font>


В Java приложении использую вот такой код:
Код

FopFactory factory = FopFactory.newInstance();
        Source xmlSrc = new StreamSource( new File( "1.xml" ) );
        Source xslSrc = new StreamSource( new File( "1.xsl" ) );
        try
        {
            InputStream in = factory.getClass().getResourceAsStream( "/conf/fop.xconf" );
            DefaultConfigurationBuilder cfgBuilder = new DefaultConfigurationBuilder();
            Configuration cfg = cfgBuilder.build( in );
            factory.setUserConfig( cfg );
                
            OutputStream out = new BufferedOutputStream( new FileOutputStream( new File( "/rhome/artur/test.pdf" ) ) );
            Fop fop = factory.newFop( MimeConstants.MIME_PDF, out );
            TransformerFactory trFactory = TransformerFactory.newInstance();
            Transformer transformer = trFactory.newTransformer( xslSrc );
            
            Result result = new SAXResult( fop.getDefaultHandler() );
            transformer.transform( xmlSrc, result );
            out.close();
        }
        catch ( Exception e )
        {
        }


Как я понял по выводу в консоли IDE мое приложение этот конфиг считывает(задает размеры страницы), но с русскими шрифтами в PDF работать не хочет...
Что сделать с этим?

PS. Сайт http://www.openmechanics.net/rusfop/ никак не помог - там старая версия FOPa
PM MAIL   Вверх
ReFLeXive
Дата 18.3.2010, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 30.3.2009
Где: г. Уфа

Репутация: нет
Всего: 1



Никто не знает какой шрифт по умолчанию используется в FOP ?
PM MAIL   Вверх
serger
Дата 18.3.2010, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 19.6.2007
Где: Ижевск

Репутация: 1
Всего: 5



По-моему, надо свои шрифты пихать. Не помню как решал эту проблему - 3 года прошло.  smile

Добавлено через 2 минуты и 14 секунд
Ну, батенька,  smile ...
http://www.sql.ru/Forum/actualthread.aspx?...=491835&hl=
Да, надо свои шрифты, но пропускать через FOP/


--------------------
упс!
PM MAIL WWW Skype GTalk Jabber   Вверх
ReFLeXive
Дата 19.3.2010, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 30.3.2009
Где: г. Уфа

Репутация: нет
Всего: 1



Уважаемый serger, спасибо за ссылку! 
Однако мой код выше почти полностью идентичен по логике с тем, что вы привели по ссылке! 
я переписал по новой класс, скачал кириллические шрифты, сделал для них метрики командой:
Код

java -cp ./build/*:./lib/* org.apache.fop.fonts.apps.TTFReader times.ttf times.xml


Метрики успешно создались, я их вместе с файлом шрифта скопировал в каталог, с конфигом! И все равно - решетки вместо русских букв!
Также думал, что дело в кодировке, однако в xml прописана кодировка UTF-8, файлы создавались в кодировке UTF-8 и в RTF русские буквы очень хорошо отображаются!!!
PM MAIL   Вверх
ReFLeXive
Дата 22.3.2010, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 30.3.2009
Где: г. Уфа

Репутация: нет
Всего: 1



Есть какие нить мысли? )
PM MAIL   Вверх
Egik2
Дата 22.3.2010, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 302
Регистрация: 29.7.2008
Где: Агудзера

Репутация: нет
Всего: 11



Есть.
Давно на форум не заходил, а то бы помог.

Нужно ставить собственный FOP из сырцов.
Я уже сталкивался с такой же проблемой  smile.
Посмотри здесь, поможет Russian FOP


--------------------
Три великие добродетели программиста: лень, нетерпение и самомнение (Larry Wall)
a-nav.com
developer-blog.ru
world-poetry.org
PM MAIL WWW ICQ   Вверх
ReFLeXive
Дата 23.3.2010, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 30.3.2009
Где: г. Уфа

Репутация: нет
Всего: 1



Цитата(Egik2 @  22.3.2010,  17:27 Найти цитируемый пост)
Нужно ставить собственный FOP из сырцов.

Я как то пробовал, но что то сходу не получилось. Попробую еще разок.

Цитата(Egik2 @  22.3.2010,  17:27 Найти цитируемый пост)
Посмотри здесь, поможет Russian FOP 

К сожалению, данный ресурс не поможет, поскольку описанное там относиться к FOP версий 0.19.х - 0.20.
Работа с версиями 0.9х значительно изменилась по сравнению с предыдущими. К тому ж по сути я занимаюсь обновлением этой библиотеки в проекте, т.к. возникла реальная необходимость именно в версии 0.9х (рендеринг в формат RTF).

PM MAIL   Вверх
ReFLeXive
Дата 23.3.2010, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 30.3.2009
Где: г. Уфа

Репутация: нет
Всего: 1



На форуме SQL.ru посоветовали чуть-чуть видоизменить xsl файл, а именно: прописать в блоке <fo:block> название шрифта. Сделал вот таким образом:
Код

<fo:block font-size="14pt" font-family="arial"  text-align="center">
            Hello, <xsl:value-of select="/reg/name"/>!
</fo:block>

Однако ситуация не изменилась в лучшую сторону. Однако,  при этом сервер выдал в лог вот такое сообщение:
Код

23.03.2010 16:53:01 org.apache.fop.fonts.FontInfo notifyFontReplacement
WARNING: Font 'arial,normal,400' not found. Substituting with 'any,normal,400'.

Что бы это могло значить? Проблемы с метриками шрифта?
PM MAIL   Вверх
serger
Дата 24.3.2010, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 19.6.2007
Где: Ижевск

Репутация: 1
Всего: 5



У меня эта проблема точно лечилась. Помню, что генерил свои шрифты, увы более ничего. Увы не могу глянуть проект (было на прошлой работе).
Проверьте, мож всё-таки не ту шрифт в итоге используете.



--------------------
упс!
PM MAIL WWW Skype GTalk Jabber   Вверх
ReFLeXive
Дата 24.3.2010, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 30.3.2009
Где: г. Уфа

Репутация: нет
Всего: 1



Сегодня утром до меня дошло, что нужно писать не название файла шрифта, а его triplet-name из конфигурации, т.е. по сути псевдоним шрифта( написал не arial, а Arial, как указано в triplet-name )! Сделал так и... о чудо! Заработало! Заговорил FOP по-русски! Это не может не радовать меня! smile
Еще раз огромное спасибо за советы!
Но еще всплывает вот такой момент: тестирование я проводил на тестовом проекте ( извиняюсь за тавтологию), теперь нужно ввести эту библиотеку (fop-0.95) в рабочий проект. ДЛя того, чтобы у клиентов нашего ПО не было возни со шрифтами у нас в старых версиях FOP каталог со шрифтами, метриками и конфигурационным файлом лежали прямо в самой библиотеке. То же самое и я хочу сделать.
Делаю следующее: Создал каталог conf, в него поместил файл настроек fop.xconf, шрифты (arial, times) c их метриками. Затем этот каталог conf я поместил в jar-архив fop путем простого перетаскивания. Получилось что то вроде: fop.jar!/conf/ .
В своем Java-классе для определения font-base я делаю следующее:

Код

fopFactory.setFontBaseURL( fopFactory.getClass().getResource( "/conf/" ).getPath() );


Эта команда задает font-base вот таким:
Код

file:/rhome/artur/workspace/Test/lib/fop.jar!/conf/

Путь, в принципе, верный!
В конфигурации я поменял соответствующие пути до метрики и до самого файла со шрифтом таким образом:
Код

<font metrics-url="arial.xml" kerning="yes" embed-url="arial.ttf">
          <font-triplet name="arial" style="normal" weight="normal"/>
</font >

По идее, относительный путь до arial.xml и arial.ttf должен определяться через font-base:
<font-base>/arial.xml
<font-base>/arial.ttf

Однако, в консоли сервер выдает:
Код

org.apache.fop.apps.FOPException: Failed to resolve font with embed-url 'arial.ttf'


ПОдскажите пожалуйста, возможно ли обратиться к файлу шрифта внутри библиотеки?
PM MAIL   Вверх
ReFLeXive
Дата 25.3.2010, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 30.3.2009
Где: г. Уфа

Репутация: нет
Всего: 1



К счастью, на форуме SQL.ru мне подсказали как что сделать, поэтому проблема с русификацией FOP решена. Кому будет нужно, то можно нaйти ответ вот здесь:
Русификация FOP
Сейчас пока буду разруливать кучу ошибок в проекте.
PM MAIL   Вверх
chemtech
Дата 8.2.2013, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 8.2.2013

Репутация: нет
Всего: нет



ReFLeXive

Добрый день. Иду по вашим тропам в компиляции xml в FOP. Компилирую книгу Руководство по Ubuntu Server. У меня также появляются квадраты вместо русских букв. Можете помочь?

Цитата

C:\Users\Администратор\Downloads\fop-1.1>java -cp ./build/*:./lib/* org.apache.fop.fonts.apps.TTFReader arial.ttf arial.xml
Error: Could not find or load main class org.apache.fop.fonts.apps.TTFReader

C:\Users\Администратор\Downloads\fop-1.1>java -cp build\fop.jar;lib\avalon-framework.jar;lib\commons-logging.jar;lib\commons-io.jar org.apache.fop.fonts.apps.T
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
        at org.apache.fop.fonts.apps.TTFReader.main(TTFReader.java:126)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 1 more


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0757 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.