【发布时间】:2015-04-20 13:47:33
【问题描述】:
我不使用 JasperServer,而是直接使用 JasperReport 4.0.2 创建了一个 webapp。
模板不在默认类加载器中,有添加,在调用 JasperReport 之前使用ContextClassLoader。
在 Jasper Report 的最新版本中,字体管理已更改,如 this document 所示。因此,我需要提供字体 JAR,当我将它们直接放在 WEB-INF/lib 目录中时,它可以工作。
但是,出于模块化原因,我想使用与模板相同的 ContextClassloader 将它们添加到类路径中,但在这种情况下,文本不会以正确的字体呈现。
我确实认为这与 JasperReport 加载字体的方式有关。
使用调试器,我可以将其追溯到不返回相同结果的 net.sf.jasperreports.engine.util.getFontInfo(...) 方法。
这是因为ExtensionsEnvironment.getExtensionsRegistry().getExtensions(FontFamily.class) 在这两种情况下都不会返回相同的家庭列表。仅当 JAR 位于 WEB-INF/lib 中时才会加载扩展。
有人知道net.sf.jasperreports.extensions.getExtensionsRegistry() 可以如何用于检索threadRegistry 实例吗? (我猜必须以某种方式初始化)。
【问题讨论】:
标签: jasper-reports