Я использую Apache FOP 1.0. Код работает на разных серверах, поэтому я помещаю шрифты в корневую папку экземпляра каждого сервера. Мой план состоит в том, чтобы установить базу шрифтов программно (в корень экземпляра сервера плюс «/fonts/»), а в моем файле конфигурации fop установить пути к шрифтам относительно этой базы шрифтов. Вот фрагмент кода, который создает FopFactory:
private static final String FONT_BASE = System.getProperty("com.sun.aas.instanceRoot") + "/fonts/";
public FOPWrapperBean() throws Exception {
ClassLoader loader = this.getClass().getClassLoader();
InputStream fopStream = loader.getResourceAsStream("META-INF/fop.xconf");
logger.log(Level.FINE, "InputStream: {0}", fopStream.toString());
DefaultConfigurationBuilder cfgBuilder = new DefaultConfigurationBuilder();
Configuration cfg = cfgBuilder.build(fopStream);
this.fopFactory = FopFactory.newInstance();
this.fopFactory.setUserConfig(cfg);
fopFactory.getFontManager().setFontBaseURL("file://" + FONT_BASE);
logger.log(Level.FINE, "Font base url: {0}", fopFactory.getFontManager().getFontBaseURL());
fopStream.close();
}
fop.xconf почти полностью используется по умолчанию. Это содержит
<base>.</base>
и
<fonts>
<directory>DejaVuTtf</directory>
</fonts>
(В {instance-root}/fonts/DejaVuTtf есть несколько шрифтов, которые я могу правильно загрузить, если просто укажу абсолютный путь, но это не работает при наличии нескольких серверов, каждый из которых может иметь разные корневые каталоги экземпляров. ).
Как загрузить шрифт с программно определенным путем?
Спасибо!