我正在使用 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 中有几种字体,如果我只给出一个绝对路径,我可以正确加载它们——但这不适用于拥有多个服务器,每个服务器可能有不同的实例根目录)。
如何加载具有编程确定路径的字体?
谢谢!