Java JasperReports字体+;RMI应用程序与轻型客户端应用程序一起使用jaspers
我正在使用由服务器和客户端两部分组成的学术应用程序 在客户端,用户使用表单进行交互(CRUD),并将报告请求调用到服务器(报告类似于日销售额) 客户端应用程序向服务器应用程序发送RMI请求,服务器通过RMI请求(响应)向该客户端返回JasperPrint对象 有一次,在客户端应用程序中,此JasperPrint将附加到显示给用户的JFrame上 ……好的 今天,我需要创建一个新的报告,该报告使用一种特定的字体(如证书字体),并且我已经在JVM服务器机器(/usr/lib/JVM/jdk-1.7.0/jre/lib/fonts/)上安装了这种字体,但不在客户端上 当客户端用户调用此报告时,客户端应用程序抛出jasper字体未找到异常…引用此字体 我相信JasperPrint在附加到JFrame上时,可以尝试使用客户端可用的字体。仅此字体 问题是:我怎样才能让客户端不需要安装这种字体来查看这份报告,而且,我不会在我的所有应用程序中将JasperPrint视图转换为PDF视图 FacadeRMI调用的示例代码:Java JasperReports字体+;RMI应用程序与轻型客户端应用程序一起使用jaspers,java,jasper-reports,rmi,Java,Jasper Reports,Rmi,我正在使用由服务器和客户端两部分组成的学术应用程序 在客户端,用户使用表单进行交互(CRUD),并将报告请求调用到服务器(报告类似于日销售额) 客户端应用程序向服务器应用程序发送RMI请求,服务器通过RMI请求(响应)向该客户端返回JasperPrint对象 有一次,在客户端应用程序中,此JasperPrint将附加到显示给用户的JFrame上 ……好的 今天,我需要创建一个新的报告,该报告使用一种特定的字体(如证书字体),并且我已经在JVM服务器机器(/usr/lib/JVM/jdk-1.7.
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.
致以最诚挚的问候。我找到了解决这个问题的方法。昨天,我使用Jasper字体扩展XML将提到的字体打包到一个jar文件中,描述了字体属性。这个jar被添加到客户端应用程序类路径中,JasperPrint通常在客户端中呈现相应的报告,而这些客户端上没有安装所需的字体 在这里与主架构师交谈,这个解决方案可以使用,因为最终的jar大小很小,不会影响视觉或任何应用程序的逻辑 基于Jasper规范,我使用以下结构在Eclipse上创建了一个简单的Java项目:
project-fonts/
src/
diploma.ttf
Arial Narrow.ttf
irfonts.xml
jasperreports_extension.properties
irfonts.xml文件:
<?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>
jasperreports_extension.properties:
net.sf.jasperreports.extension.registry.factory.fonts=net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory
net.sf.jasperreports.extension.simple.font.families.irport=irfonts.xml
为了将这个项目打包到jar文件,在将这个jar添加到客户端应用程序构建路径之后,我使用了Eclipse
推荐人(亚历克斯提供)
感谢您的支持,祝您度过愉快的一天。您可以尝试使用属性忽略JRFontNotFoundException异常。您可以查看postHi Alex,感谢您的回复。但我已经在服务器JVM上安装了字体,但没有安装在客户端,因为这个应用程序在Linux/Mac/Windows工作站上有+-4.000个用户:/。昨天我更新了应用程序服务器和客户端(客户端由JNLP…),我将这个字体打包在一个jar文件中,并添加到客户端应用程序类路径中。”“每小时”对我来说很好,但我不喜欢这种方式。现在,我的问题是:在jar文件(比如Jasper扩展名)上打包字体并添加到客户端应用程序类路径是正确的吗?我想是的,这是正确的。您可以在iReport的帮助下打包字体-使用mechanismAlex,请参阅下面问题答案的最终解决方案;)