【问题标题】:Create sub report using JasperReports API使用 JasperReports API 创建子报告
【发布时间】:2014-05-09 04:06:16
【问题描述】:

我能够使用 JasperReports API 创建主报告。然而,卡在使用 JasperReports API 设计子报表并将其添加到主报表设计中。

主报告 JRXML

    <band height="250" splitType="Stretch">
        <subreport>
        <reportElement isPrintRepeatedValues="false" x="0" y="0" width="550" height="233" isRemoveLineWhenBlank="true" backcolor="#000000">
        </reportElement>
        <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{time})]]>   
</dataSourceExpression>
        <subreportExpression><![CDATA["subreport.jasper"]]></subreportExpression>
    </subreport>
   </band>

子报表JRXML

<field name="count" class="java.lang.String"/>
<field name="timeStamp" class="java.lang.String"/>
<group name="ProductGroup">
    <groupExpression><![CDATA[$F{count}]]></groupExpression>
    <groupHeader>
        <band height="250">
            <timeSeriesChart>
                <chart evaluationTime="Report">
                    <reportElement x="0" y="25" width="550" height="175"/>
                    <chartTitle/>
                    <chartSubtitle/>
                    <chartLegend/>
                </chart>
                <timeSeriesDataset timePeriod="Minute">
                    <dataset incrementType="None"/>
                    <timeSeries>
                        <seriesExpression><![CDATA["Count"]]></seriesExpression>
                        <timePeriodExpression><![CDATA[new Date(Long.valueOf($F{timeStamp})*1000)]]></timePeriodExpression>
                        <valueExpression><![CDATA[Integer.valueOf($F{count})]]></valueExpression>
                    </timeSeries>
                </timeSeriesDataset>
                <timeSeriesPlot isShowLines="true" isShowShapes="false">
                    <plot/>
                    <timeAxisFormat>
                        <axisFormat>
                            <labelFont/>
                            <tickLabelFont/>
                        </axisFormat>
                    </timeAxisFormat>
                    <valueAxisFormat>
                        <axisFormat>
                            <labelFont/>
                            <tickLabelFont/>
                        </axisFormat>
                    </valueAxisFormat>
                </timeSeriesPlot>
            </timeSeriesChart> 
        </band>
    </groupHeader>
</group>

这些独立的 XML 被编译并将生成报告。

但是我想使用 Jasper Report API 创建这些。 我刚开始。但是没有任何示例可用。

JRDesignSubreport jSubreport = new JRDesignSubreport(jasperDesign); 
jSubreport.setUsingCache(false); 
jSubreport.setRemoveLineWhenBlank(true);

JRDesignExpression subReportDataSourceExpr = new JRDesignExpression();
subReportDataSourceExpr.addResourceChunk("");
//How to set List Data Source?
JRDesignSubreportParameter subReportDataSource = new JRDesignSubreportParameter();
subReportDataSource.setExpression(subReportDataSourceExpr);
jSubreport.setDataSourceExpression(subReportDataSourceExpr);

//How to Add <subreportExpression><![CDATA["subreport.jasper"]]></subreportExpression>

【问题讨论】:

    标签: java jasper-reports


    【解决方案1】:

    这可以通过以下方式完成 将子报表放在带区中,然后将带区附加到主报表

    band = new JRDesignBand();
    band.setHeight(250);
    band.setSplitType(SplitTypeEnum.STRETCH);
    
    JRDesignSubreport jSubreport = new JRDesignSubreport(jasperDesign); 
    jSubreport.setUsingCache(false); 
    jSubreport.setRemoveLineWhenBlank(true); 
    jSubreport.setPrintRepeatedValues(false);
    
    JRDesignExpression expression = new JRDesignExpression();
    expression.setText("new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{time})");
    jSubreport.setDataSourceExpression(expression);
    
    expression = new JRDesignExpression(); 
    expression.setText("\"/path/to/sub.jasper\"");
    
    jSubreport.setExpression(expression);
    band.addElement(jSubreport);
    

    【讨论】:

    • 太棒了!为我工作。
    猜你喜欢
    • 1970-01-01
    • 2013-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-13
    相关资源
    最近更新 更多