在 Apache FOP 中,如何将自定义目录中的字体优先于系统字体?
In Apache FOP, how to prioritize fonts from custom directory over system fonts?
我有一个 XML 配置可以自动检测系统字体:
<fop version="1.0">
<fonts>
<auto-detect/>
</fonts>
<!-- ... -->
</fop>
然后我以编程方式配置自定义字体目录:
// ...
FopConfParser fopConfParser = new FopConfParser(configFileStream, environmentProfile);
FopFactoryBuilder fopFactoryBuilder = fopConfParser.getFopFactoryBuilder()
fopFactoryBuilder.getFontManager().setResourceResolver(ResourceResolverFactory.createDefaultInternalResourceResolver(fontDir.toURI()));
原则上,这是可行的。但是,如果字体存在于系统字体目录以及我的自定义目录中,则使用系统字体。这似乎将行为从 FOP 1.x 更改为 2.x.
有没有办法让自定义目录中的字体优先于系统字体?我知道这可以用 embed-url
解决,但我理想情况下不想为每种字体显式配置它。
Documentation 状态:
Fonts found as a result of a "directory" tag configuration override fonts found as a result of the "auto-detect" tag being specified.
因此,可以将 <directory>
标记添加到您的配置文件中。为了以编程方式设置它,您可以将其指定为占位符:
<fop version="1.0">
<fonts>
<directory>DYNAMIC_FONTDIR</directory>
<auto-detect/>
</fonts>
<!-- ... -->
</fop>
为了扩展占位符,更改您提供的代码如下:
String originalConfig = new String(configFileStream.readAllBytes(), StandardCharsets.UTF_8);
String adaptedConfig = originalConfig.replace("DYNAMIC_FONTDIR", fontDir.getAbsolutePath());
InputStream adaptedConfigStream = new ByteArrayInputStream(adaptedConfig.getBytes(StandardCharsets.UTF_8));
FopConfParser fopConfParser = new FopConfParser(adaptedConfigStream, environmentProfile);
// ...
我有一个 XML 配置可以自动检测系统字体:
<fop version="1.0">
<fonts>
<auto-detect/>
</fonts>
<!-- ... -->
</fop>
然后我以编程方式配置自定义字体目录:
// ...
FopConfParser fopConfParser = new FopConfParser(configFileStream, environmentProfile);
FopFactoryBuilder fopFactoryBuilder = fopConfParser.getFopFactoryBuilder()
fopFactoryBuilder.getFontManager().setResourceResolver(ResourceResolverFactory.createDefaultInternalResourceResolver(fontDir.toURI()));
原则上,这是可行的。但是,如果字体存在于系统字体目录以及我的自定义目录中,则使用系统字体。这似乎将行为从 FOP 1.x 更改为 2.x.
有没有办法让自定义目录中的字体优先于系统字体?我知道这可以用 embed-url
解决,但我理想情况下不想为每种字体显式配置它。
Documentation 状态:
Fonts found as a result of a "directory" tag configuration override fonts found as a result of the "auto-detect" tag being specified.
因此,可以将 <directory>
标记添加到您的配置文件中。为了以编程方式设置它,您可以将其指定为占位符:
<fop version="1.0">
<fonts>
<directory>DYNAMIC_FONTDIR</directory>
<auto-detect/>
</fonts>
<!-- ... -->
</fop>
为了扩展占位符,更改您提供的代码如下:
String originalConfig = new String(configFileStream.readAllBytes(), StandardCharsets.UTF_8);
String adaptedConfig = originalConfig.replace("DYNAMIC_FONTDIR", fontDir.getAbsolutePath());
InputStream adaptedConfigStream = new ByteArrayInputStream(adaptedConfig.getBytes(StandardCharsets.UTF_8));
FopConfParser fopConfParser = new FopConfParser(adaptedConfigStream, environmentProfile);
// ...