JasperReport|JasperReportレポートグラフの高度なカスタマイズについて

11817 ワード

前言
JasperReportは強力で柔軟なレポート生成ツールで、豊富なページ内容を表示し、PDF、HTML、またはXML形式に変換することができます.このライブラリは完全にJavaによって書かれており、J 2 EEを含む様々なJavaアプリケーションで動的コンテンツを生成するために使用できます.
二.グラフの高度なカスタマイズの紹介
JasperReportでは、JRChartCustomizerインタフェースのcustomizerメソッドを上書きしてグラフ表示の高度なカスタマイズを拡張することができます.私はこの機能をJasperReportの拡張グラフ表示のプラグインと呼びます.レポートプロセスでは、このプラグインが実行される時間は、レポートが充填されると、リロードされたメソッドcustomizeが自動的に呼び出され、カスタムレポートの表示を実現します.
サンプルコード:
public class BESChartCustomizers extends JRAbstractChartCustomizer {

    public void customize(JFreeChart chart, JRChart jasperChart) {
        // TODO Auto-generated method stub

    }
}

注意:レポートでは、レポートテンプレートの「parameter」、「variable」、「field」もカスタマイズする必要がある場合、開発者はカスタムクラス継承クラス抽象クラスJRAbstractChartCustomizerを作成する必要があります.インタフェースJRChartCustomizerを実装方法でカスタマイズするのではなく、抽象クラスJRAbstractChartCustomizerがインタフェースJRChartCustomizerを実装し、一連の「parameter」、「variable」、「field」操作を提供するためである.
サンプルコード:
public class BESChartCustomizers extends JRAbstractChartCustomizer {

    public void customize(JFreeChart chart, JRChart jasperChart) {

        Object parameterValue = getParameterValue("ParameterXXX");

    }
}

3.customizeメソッド
Customizeメソッドは、インタフェースJRAbstractChartCustomizerで定義された抽象メソッドであり、すべての位置合わせを実現するメソッド構造は以下の通りである.
    public void customize(JFreeChart chart, JRChart jasperChart) {
        // TODO Auto-generated method stub

    }

パラメータについて:最初のパラメータはchartで、JFreeChart機能に対するすべてのサポートを提供して、私たちはそれに対していくつかのカスタマイズの修正を行って私たちが現実的な効果を必要とすることができます.実行時の実際のタイプはorg.jfree.chart.JFreeChartです.
2番目のパラメータはjasperChartです.グラフのバージョンタイプと、カスタマイズされたレポートで必要とされる一連のデータ(TitleExpression,TitleFont)を提供します.実行時の実際のタイプはnet.sf.jasperreports.engine.fill.JRFillChartです.
レンダリングレポートの表示効果をカスタマイズするだけであれば、グラフレンダリング制御のJFreeChartインスタンスであるため、最初のパラメータに注目します.
メソッド呼び出しタイミング:レポートが塗りつぶされたときに、グラフがレンダリングされる前に呼び出されます.
四.開発構想
まず、 により設計グラフの種類をフィルタリングし、実際のPlotオブジェクトに強く変換してから、レポート機能のカスタマイズを行う.
public class YvesChartCustomizer implements JRChartCustomizer {

    public void customize(JFreeChart chart, JRChart jasperChart) {
        if (chart.getPlot() instanceof CategoryPlot) {

            CategoryPlot plot = (CategoryPlot) chart.getPlot();
            if (plot != null) {
                if (plot.getRenderer() instanceof BarRenderer) {
                    BarRenderer renderer = (BarRenderer) plot.getRenderer();
                    renderer.setDrawBarOutline(true);
                    for (int i = 0; i < plot.getDataset().getRowKeys().size(); i++) {
                        renderer.setSeriesOutlinePaint(i, Color.BLACK);
                        renderer.setSeriesOutlineStroke(i, new BasicStroke(3.0f));
                    }
                }
            }

        }
    }

}

効果図
五.常用開発機能
1.テンプレートに定義されているparameter,variable,fieldを取得する
JRAbstractChartCustomizerでは、parameter、variable、fieldの値を取得するための一連のprotected修飾方法が提供する.
ここでgetParameterValueメソッドを選択する例として、variableとfieldの使用方法は同様である.
public class BESChartCustomizers extends JRAbstractChartCustomizer {

    public void customize(JFreeChart chart, JRChart jasperChart) {

        //          ,       ,          
        Object parameterValue = getParameterValue("ParameterName");

    }

}

リロード方法getParameterValueの使用規則について:次のソースコードが表示されます.
    protected final Object getParameterValue(String parameterName)
    {
        return getParameterValue(parameterName, false);
    }

    protected final Object getParameterValue(String parameterName, boolean fromInputDataset)
    {
        return (fromInputDataset ? chartDataset.getInputDataset() : filler.getMainDataset()).getParameterValue(parameterName);
    }

パラメータfromInputDatasetは、入力データセットからパラメータを取得するか、レポートデータセットからパラメータを取得するかを設定する.fromInputDatasetがfalseであるgetParameterValue(String parameterName)の場合、パラメータはレポートデータセットからパラメータを取得する.
サブデータセットをデータ入力として使用するように設計する場合にのみ、メソッドgetParameterValue(String parameterName,boolean fromInputDataset)を使用して、パラメータfromInputDatasetによって取得するパラメータのデータセットを指定する必要がある.fromInputDatasetがtrueの場合は、サブデータセットから取得するパラメータを表す.
2.実行時の実際のグラフの種類を判断する
方法1:2番目のパラメータJRChart jasperChartによってbyte chartType=jasperChart.getChartType()を判断する.
    public static final byte CHART_TYPE_AREA = 1;
    public static final byte CHART_TYPE_BAR3D = 2;
    public static final byte CHART_TYPE_BAR = 3;
    public static final byte CHART_TYPE_BUBBLE = 4;
    public static final byte CHART_TYPE_CANDLESTICK = 5;
    public static final byte CHART_TYPE_HIGHLOW = 6;
    public static final byte CHART_TYPE_LINE = 7;
    public static final byte CHART_TYPE_PIE3D = 8;
    public static final byte CHART_TYPE_PIE = 9;
    public static final byte CHART_TYPE_SCATTER = 10;
    public static final byte CHART_TYPE_STACKEDBAR3D = 11;
    public static final byte CHART_TYPE_STACKEDBAR = 12;
    public static final byte CHART_TYPE_XYAREA = 13;
    public static final byte CHART_TYPE_XYBAR = 14;
    public static final byte CHART_TYPE_XYLINE = 15;
    public static final byte CHART_TYPE_TIMESERIES = 16;
    public static final byte CHART_TYPE_METER = 17;
    public static final byte CHART_TYPE_THERMOMETER = 18;
    public static final byte CHART_TYPE_MULTI_AXIS = 19;
    public static final byte CHART_TYPE_STACKEDAREA = 20;
    public static final byte CHART_TYPE_GANTT = 21;

方式2:第1のパラメータJFreeChart chartによって判断する(原理はJFreeChartの中のPlotインスタンスタイプによって判断する)Plot plot=chart.getPlot();
CategoryPlot
     |_CombinedDomainCategoryPlot
     |_CombinedRangeCategoryPlot
CompassPlot
ContourPlot
DialPlot
FastScatterPlot
MeterPlot
MultiplePiePlot
PiePlot
     |_PiePlot3D
     |_RingPlot
PolarPlot  
SpiderWebPlot
ThermometerPlot
WaferMapPlot
XYPlot 
     |_CombinedDomainXYPlot 
     |_CombinedRangeXYPlot