2009-04-09 24 views
1

表示用に生成しているレポートの一部を強調したいと思います。
レポート定義を変更したくありません。私は実行時に出力を強調したい。Jasper Reportsビューアの一部のテキストをハイライト表示

しかし、私が使っているJRViewerには、実際にはあまりAPIはありません。
JasperPrintオブジェクトを表示する前にsetForecolor/setBackcolorでJasperPrintオブジェクトを操作しても、出力が変更されていないようです。

アイデア?または、ビューアをオーバーロード/再実装する必要がありますか?それはオープンソースなので大した問題ではないでしょうが、私は車輪の再発明を防ぎたいと思います。

答えて

0

私は自分自身の質問に自分自身で答える必要があるように見えます。

私はJRViewerクラスをオーバーロードされた(興味深いパネルのどれもがアクセス可能ではなかったので、実際にJRViewerのコードをコピー)し、次の操作を行うためにいくつかのハイライトする方法を追加しました:

テンプレートベースのJasperPrintデータを使用しています - 名前が示すように - テンプレート。つまり、テキストオブジェクトは独自のスタイルを持たず、テンプレートのスタイルを使用します。
これが、setForecolorが何もしなかった理由です.JRTemplatePrintElementの実装は単純空です。

しかし、テキストテンプレートでハイライトを設定すると、テンプレートインスタンスを共有するので、ハイライトされたテキストの完全な列になります。
代わりに、ハイライトされたオリジナルのコピーとして新しいテンプレートを作成し、強調表示されたプリント要素でそのテンプレートを使用します。 Btwでは、これらのジャスパー要素は実際にはclone()メソッドを使用できます。
ハッキングのような気分ですが、より良い方法はありません。

更新:
ただし、これはファイルベースの(仮想化された)レポートには厄介な副作用があります。 これらは、ページを歩いている間、要素に加えた変更を保存しているように見えます。 その間に視聴者が参照している要素(たとえば、ページを反転させるなど)をバーチャライザーで破棄すると、それ以上の変更は保存されません...

それで私は再考しました。 JasperのPageRendererによって描画されたGraphicsオブジェクトの上にハイライトを描画するだけです。
はるかに簡単で清潔です。背景を強調表示するだけではこのようには動作しません。

関連する問題