2

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

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

客户端应用程序向服务器应用程序发送一个 RMI 请求,服务器通过 RMI 请求(响应)返回一个 JasperPrint 对象给这个客户端。

有一次在客户端应用程序中,此 JasperPrint 将附加在 JFrame 上并显示给用户。

...好的...

今天我需要创建一个新报告,该报告使用特定字体(如证书字体)并且我已经在 J​​VM 服务器机器上安装了这个字体(/usr/lib/jvm/jdk-1.7.0/jre/lib/fonts /) 仅...在客户端不是。

当客户端用户调用此报告时,客户端应用程序抛出未找到碧玉字体异常...引用此字体。

我相信在 JFrame 上附加 JasperPrint 时尝试使用客户端可用的字体..只是这个字体。

问题是:我如何才能让客户不需要安装此字体来查看此报告,并且,我不会在我的所有应用程序中将 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.

最好的祝福。

4

1 回答 1

1

我找到了解决这个问题的方法。昨天我使用 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.ireport=irfonts.xml

为了将此项目打包到 jar 文件中,我使用了 Eclipse,将此 jar 添加到客户端应用程序构建路径后。

参考资料(由 Alex 提供)

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

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

于 2012-10-17T11:36:05.403 回答