我正在使用学术应用程序,包括2个部分,服务器和客户端......
在客户端,用户使用表单进行交互(CRUD)并向服务器调用报告请求(报告类似于Day销售) .
客户端应用程序向服务器应用程序发送RMI请求,服务器通过RMI请求(响应)向此客户端返回JasperPrint对象 .
有一次在客户端应用程序中,这个JasperPrint将附加在JFrame上,并向用户显示 .
...好...
今天我需要创建一个新的报告,这个报告使用特定的字体(比如证书字体),我已经在JVM服务器机器上安装了这个字体(/usr/lib/jvm/jdk-1.7.0/jre/lib/fonts /)只...在客户端没有 .
当客户端用户调用此报告时,客户端应用程序将引发一个jasper字体未找到异常...引用此字体 .
我相信JasperPrint附加在JFrame上时尝试使用客户端可用的字体 . 只需要这个字体 .
问题是:我如何能够客户端不需要安装此字体来查看此报告,并且,我不是在我的所有应用程序中将JasperPrint视图转换为PDF视图?
FacadeRMI调用的示例代码:
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 回答
我找到了解决这个问题的方法 . 昨天我使用Jasper Font Extension XML将提到的字体打包在一个jar文件中,描述了字体属性 . 这个jar被添加到客户端应用程序类路径中,而JasperPrint通常会在客户端中呈现相应的报告,而不会在其计算机上安装必需的字体 .
在这里与主建筑师交谈,这个解决方案可以使用,因为最终的jar有一个小的尺寸,不会影响视觉或任何应用程序的逻辑 .
基于Jasper规范,我在Eclipse上创建了一个简单的Java项目,具有以下结构:
irfonts.xml:
jasperreports_extension.properties:
net.sf.jasperreports.extension.registry.factory.fonts = net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory net.sf.jasperreports.extension.simple.font.families.ireport = irfonts.xml
要将此项目打包到jar文件,我将此jar添加到客户端应用程序buildpath之后使用了Eclipse .
参考(由Alex提供)
http://jasperreports.sourceforge.net/sample.reference/fonts/index.html#fontextensions
感谢您的支持,祝您度过愉快的一天 .