gpt4 book ai didi

java - 碧 Jade 报告 : How to add font not in the application classpath

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:11:33 25 4
gpt4 key购买 nike

我正在尝试使用一种字体,它没有安装在我的本地操作系统上,带有 JasperReports。 jasper报表是这样使用的:

<textField>  
<reportElement x="0" y="0" width="137" height="20"/>
<textElement>
<font fontName="Corbel" size="12"/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA[$F{something}]]></textFieldExpression>
</textField>

名为 Corbel 的字体被导出为字体扩展(使用 iReport),并包含在我系统的文件夹中的文件 (Corbel.jar) 中。我使用如下代码将此扩展添加到应用程序的类路径中:

ClassLoader cl = new URLClassLoader(new URL[] {new URL("file:///D:/path/to/Corbel_jar_folder/")});  
param = new HashMap();
param.put(JRParameter.REPORT_CLASS_LOADER, cl);
jasperReport = JasperCompileManager.compileReport("d:/path/to/Report_with_Corbel_font.jrxml");
jasperPrint = JasperFillManager.fillReport(jasperReport, param, new JREmptyDataSource());

填写报告后,我使用 JRPdfExporter 将其导出。但是,在结果 pdf 文件中,元素没有应用 Corbel 字体。我没有包括 pdf 导出,因为我认为问题出在填充的某个地方。我搜索并阅读了许多与在 JasperReports 中使用/包括字体(即字体扩展)相关的帖子和​​问题;我仍然不知道错误或问题出在哪里。任何帮助将不胜感激。

提前致谢! (对于糟糕的代码缩进感到抱歉,我希望我已经包含了足够的细节)

最佳答案

问题是字体扩展 jar 的加载是从线程上下文类加载器和 JRParameter.REPORT_CLASS_LOADERJRExporterParameter.CLASS_LOADER 完成的。

因此,在我的例子中,必须保存当前(初始)线程类加载器,我们必须执行类似 Thread.currentThread().setContextClassLoader(cl) 的操作,其中 cl 是基于 JasperReports 的应用程序的上下文,然后线程上下文类加载器恢复为原始类加载器。

问题已回答,详情可见here .

我希望这个答案能帮助其他面临类似(字体)问题的人。

关于java - 碧 Jade 报告 : How to add font not in the application classpath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3151562/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com