Използвам 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, които мога да заредя правилно, ако просто дам абсолютен път -- но това не работи при наличието на множество сървъри, всеки от които може да има различни главни директории на екземпляри ).
Как да заредя шрифт с програмно определен път?
Благодаря!