当前位置: 首页 > 知识库问答 >
问题:

JasperReports字体+RMI应用程序与轻客户端应用程序一起使用jaspers

高溪叠
2023-03-14

我正在与学术应用程序有两个部分,服务器和客户端...

今天,我需要创建一个新的报告,该报告使用一种特定的字体(如证书字体),并且我只在JVM服务器计算机上(/usr/lib/JVM/jdk-1.7.0/jre/lib/fonts/)安装了这种字体,而不是在客户机上。

当客户端用户调用此报告时,客户端应用程序抛出一个jasper font not found异常...引用此字体。

我相信JasperPrint在添加到JFrame时可以尝试使用客户端可用的字体..就这个字体。

ReportsManager rm = FacadeFactoryLocal.newInstance(ReportsManager.class);
JasperPrint jasperPrint = rm.geraRelatorio(reportFile, parameters);

// ...
JFrame viewer = new JFrame("Report content");
viewer.setPreferredSize(new Dimension(800, 600));
viewer.setLocationRelativeTo(null);

JasperViewer jrViewer = new JasperViewer(print, true);
viewer.getContentPane().add(jrViewer.getContentPane());
new FrameConfig(viewer); // show the frame with validations.

共有1个答案

鲁霄
2023-03-14

我找到了解决这个问题的办法。昨天,我使用Jasper字体扩展XML将前面提到的字体打包到一个jar文件中,描述字体属性。这个jar被添加到客户机应用程序类路径中,JasperPrint通常在客户机中呈现相应的报表,而不需要在它们的机器上安装所需的字体。

在这里与主架构师交谈,这个解决方案可以使用used,因为最终的jar有一个小尺寸,不影响视觉或任何应用程序的逻辑。

基于Jasper规范,我在Eclipse上创建了一个简单的Java项目,其结构如下:

project-fonts/
src/
diploma.ttf
Arial Narrow.ttf
irfonts.xml
jasperreports_extension.properties
<?xml version="1.0" encoding="UTF-8"?>
<fontFamilies>
    <fontFamily name="Diploma">
        <normal><![CDATA[diploma.ttf]]></normal>
        <bold><![CDATA[diploma.ttf]]></bold>
        <pdfEmbedded><![CDATA[true]]></pdfEmbedded>
    </fontFamily>

    <fontFamily name="Arial Narrow">
        <normal><![CDATA[Arial Narrow.ttf]]></normal>
        <bold><![CDATA[Arial Narrow.ttf]]></bold>
        <boldItalic><![CDATA[Arial Narrow.ttf]]></boldItalic>
        <pdfEmbedded><![CDATA[true]]></pdfEmbedded>
    </fontFamily>
</fontFamilies>

net.sf.jasperReports.extension.registry.factory.fonts=net.sf.jasperReports.engine.fonts.simple.font.familes.ireport=irfonts.xml

为了将这个项目打包到jar文件中,在将这个jar添加到客户端应用程序BuildPath之后,我使用了Eclipse。

参考资料(亚历克斯提供)

http://jasperreports.sourceforge.net/sample.reference/fonts/index.html#fontextensions

谢谢你的支持,祝你有美好的一天。

 类似资料:
  • 要编写RMI Java应用程序,您必须按照以下步骤操作 - 定义远程接口 开发实现类(远程对象) 开发服务器程序 开发客户端程序 编译应用程序 执行应用程序 定义远程接口 远程接口提供特定远程对象的所有方法的描述。 客户端与此远程接口通信。 要创建远程接口 - 创建一个扩展属于该包的预定义接口Remote的接口。 声明此接口中客户端可以调用的所有业务方法。 由于远程调用期间可能存在网络问题,因此可

  • 我想创建一个服务,可以拒绝\撤销对用户的移动邮件应用程序的访问。 具体来说,我想暂时撤销使用office365在线交换邮件对移动邮件客户端应用程序(如Nine)的访问,该应用程序被认证为Azure Active Directory应用程序。 到目前为止,我想出了如何执行类似或部分操作: > 我可以使用此链接手动撤消azure AD应用:https://account.activedirectory

  • 我需要一个用于java spring应用程序的graphQL客户端,以与另一个基于graphQL API的微服务通信。我知道Apollo Android,但它似乎没有用maven实现(也许你知道maven的一些链接或示例等)。有什么想法和建议吗?提前感谢!

  • 我正在尝试让一个简单的HTTP控制台应用程序作为Azure服务应用程序运行。它所做的只是在连接时返回OK。它在我的笔记本电脑上运行良好,我可以使用VS2019发布到Azure ok。问题是用于监听的前缀。 在我的笔记本电脑上,我可以使用超文本传输协议://: 80/; https://: 443/,但在Azure中,我得到一个错误:[例外]访问被拒绝。 本文https://github.com/p

  • 我是Spring Framework的新手。试图制作一个基于Java的Spring MVC项目。这是我的主要应用程序类 当我运行项目时,我得到了错误 为什么Spring不能显示JSP文件?

  • 我需要编写一个基于桌面的客户端应用程序,它在进行基于SAML的SSO身份验证后对SharePoint服务器进行一些Web服务方法调用。 我发现SAML SSO主要用于处理所有细节的浏览器。根据这个问题,SAML 2.0中似乎有一种技术称为ECP,专门用于启用非基于浏览器的客户端。 然而,SharePoint 2010/2013等一些应用程序仅支持SAML 1.1;在这种情况下可以使用什么?