当前位置: 首页 > 面试题库 >

JasperReports:如何不在应用程序类路径中添加字体

蔡辰钊
2023-03-14
问题内容

我正在尝试使用未安装在本地操作系统上的字体JasperReports。碧玉报告以这种方式使用:

<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_LOADER或从进行的JRExporterParameter.CLASS_LOADER

因此,在我的情况下,必须保存当前的(初始)线程类加载器,我们必须做类似的操作Thread.currentThread().setContextClassLoader(cl),其中基于应用程序cl的上下文在其中JasperReports,然后将线程上下文类加载器还原为原始的。

问题已得到解答,详细信息请点击此处。

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



 类似资料:
  • 我需要将sqljdbc42.jar库添加到类路径中,以便连接到Azure SQL数据库。如何(如果可能的话)在Azure Web Service-Web App(Java with Tomcat server)中做到这一点。添加JDBC库还有其他方法吗? 连接字符串: 复制自门户:jdbc:sqlserver://testnabaza.database.windows.net:1433;datab

  • 根据我所知道的,我知道我需要在我的中包含驱动程序,我只是不知道如何从中做到这一点?

  • 问题内容: 如何在netbeans项目的类路径中添加文件夹(例如,包含arts的资源文件夹)?我设法通过编辑项目的NB生成的jar文件(即其MANIFEST.MF文件+手动复制资源)来手动完成此操作,但是应该有一种方法可以告诉netbeans并注意资源,不是吗? 文件夹结构如下所示: 我不想将艺术品包装到罐子里,因为我希望艺术品可以轻松更换。如果我将art文件夹添加到src文件夹,则NB可以正常编

  • 我正在尝试以编程方式设置一个spring boot应用程序上下文根。上下文根的原因是我们希望从访问应用程序,并将所有控制器路径附加到它。 下面是Web-App的应用程序配置文件。 这是主页面的索引控制器。 应用程序的新根应该位于,但它仍然位于。 我错过了什么导致spring boot没有在请求映射之前添加上下文根?

  • 问题内容: 我正在尝试向PYTHONPATH环境变量添加路径,该路径仅在特定的virtualenv环境中可见。 我在virtualenv命令提示符下进行了尝试,但这为整个环境设置了变量。 我该如何实现? 问题答案: 通常,您可以通过使用files来避免对PYTHONPATH做任何事情。只需在您的virtualenv的site- packages文件夹中放入一个扩展名为.pth的文件(任何基本名称均

  • 问题内容: 我希望Gradle构建脚本将完整的Classpath添加到构建后创建的JAR文件中包含的清单文件中。 例: 我的构建脚本已经通过这种方式向清单添加了一些信息: 如何获取要添加到清单的依赖项列表? Java教程的此页面详细描述了如何以及为什么向清单中添加类路径:将类添加到JAR文件的类路径中 问题答案: 在Gradle的论坛上找到了一个解决方案: 来源:子项目的Jar任务中带有类路径的清