Я не использую JasperServer, вместо этого я создал веб-приложение, используя JasperReport 4.0.2 напрямую.
Шаблоны не находятся в загрузчике классов по умолчанию, они добавляются с использованием ContextClassLoader
перед вызовом JasperReport.
В последней версии Jasper Report управление шрифтами изменилось, как указано в этого документа .Поэтому мне нужно предоставить JAR-файлы Font, которые работают, когда я помещаю их в каталог WEB-INF / lib напрямую.
Однако по соображениям модульности я хотел бы добавить их вclasspath использует тот же ContextClassloader
, что и с шаблонами, но в этом случае тексты не отображаются с правильным шрифтом.
Я думаю, это как-то связано с тем, как JasperReport загружает шрифт.Используя отладчик, я мог отследить его до метода net.sf.jasperreports.engine.util.getFontInfo(...)
, который не возвращает тот же результат.
Это связано с тем, что ExtensionsEnvironment.getExtensionsRegistry().getExtensions(FontFamily.class)
не возвращает один и тот же список семейства в обоих случаях.Расширения загружаются только тогда, когда JAR-файлы помещены в WEB-INF / lib .
Кто-нибудь знает, как net.sf.jasperreports.extensions.getExtensionsRegistry()
может быть адаптирован для получения экземпляра threadRegistry?(должен быть как-то инициализирован, я думаю).