2

サーバーとクライアントの2つの部分からなるアカデミックアプリを使用しています...

クライアント側では、ユーザーはフォームを使用して対話(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.

よろしくお願いします。

4

1 に答える 1

1

この問題の解決策を見つけました。昨日、Jasper Font Extension XML を使用して、前述のフォントを jar ファイルにパックし、フォントのプロパティを記述しました。この jar はクライアント アプリのクラスパスに追加され、JasperPrint は、必要なフォントがマシンにインストールされていなくても、クライアントでそれぞれのレポートを正常にレンダリングします。

ここで主なアーキテクトと話をすると、最終的な jar のサイズが小さく、ビジュアルやアプリのロジックに影響を与えないため、このソリューションは使用できます。

Jasper 仕様に基づいて、次の構造を持つ単純な Java プロジェクトを Eclipse 上に作成しました。

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 ファイルにパックするには、この jar をクライアント アプリのビルドパスに追加した後、Eclipse を使用しました。

参照 (Alex 提供)

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

サポートをありがとう、良い一日を。

于 2012-10-17T11:36:05.403 に答える