Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JasperReports字体+;RMI应用程序与轻型客户端应用程序一起使用jaspers_Java_Jasper Reports_Rmi - Fatal编程技术网

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

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.

我正在使用由服务器和客户端两部分组成的学术应用程序

在客户端,用户使用表单进行交互(CRUD),并将报告请求调用到服务器(报告类似于日销售额)

客户端应用程序向服务器应用程序发送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.

致以最诚挚的问候。

我找到了解决这个问题的方法。昨天,我使用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,请参阅下面问题答案的最终解决方案;)