java - 在 Apache FOP 中,如何将自定义目录中的字体优先于系统字体?

标签 java fonts apache-fop

我有一个启用系统字体自动检测的 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);
// ...

关于java - 在 Apache FOP 中,如何将自定义目录中的字体优先于系统字体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71649680/

相关文章:

java - 在循环中执行 SQL 查询

java - Android 阻止整个应用程序使用后退键功能

java - 显示文本字段中的文本,但在组合框中选择时不会更改字体

xslt - XSL FO 表中的粗边框线问题 - 使用 Apache FOP 创建 PDF

java - 将完整的 PDF 文件附加到 FOP PDF

java - PDFBox设置A5页面大小

java - 数独 - 循环扫描器

java - 无法弄清楚为什么 Mongo 数据库应用程序在创建 jar 可执行文件后无法正常工作

html - 如何保存渲染的字体?

java - matlab中有什么办法可以放大菜单栏和提示窗口的字体