Я использую 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 есть несколько шрифтов, которые я могу загрузить правильно, если просто указать абсолютный путь, но это не работает с несколькими серверами, каждый из которых может иметь разные корневые каталоги экземпляра).
Как загрузить шрифт с программно определенным путем?
Спасибо!