使用JasperReports打印arraylist内容

时间:2015-01-21 09:14:29

标签: java jasper-reports

我想在Java中使用 JasperReports 打印ArrayList的内容

实际上我对贾斯珀报道知之甚少 我使用iReport创建Japser Reports并使用Java命令我将打印它。

现在我想使用 JasperReports 打印学生成绩。 这是我的样本结果表。

Reg.No  SubjectCode  Level  Semester  Grade  Marks
132108  CMIS 1113    1        1        A      77
132107  CMIS 1213    1        2        C      57
122101  IMGT 2112    2        1        A      87
122110  IMGT 2213    2        2        A      83
112123  STAT 3113    3        1        C      55
112135  MATH 3213    3        2        B      67
132145  CMIS 1113    1        1        D      17
122118  ELTN 2213    1        2        A      90
112100  CMIS 3213    3        2        A      89
112117  SATA 3113    1        1        A      87
122104  CMIS 2213    2        2        C      54
132104  CMIS 1213    1        2        A      84

所以根据我上面的表格,我需要打印“特定学期特定学生的成绩”。
在我的界面中,我有选择级别和学期的工具 然后自动生成相关查询,结果将从数据库中获取并使用Results对象(我创建名为'Results'的类来存储特定学生的结果)我将结果数据添加到ArrayList。 现在我的ArrayList有Results对象,它包含特定级别和特定学期的每个学生的结果。现在我想使用Jasper报告打印这个ArrayList。所以期望Jasper报告是这样的。
对于1级和第1学期,

Reg.No  CMIS1113   
132108    A
132145    D


对于第2级和第2学期,

Reg.No  IMGT2213  CMIS2213   
122110    A          -
122104    -          C


现在我有几个问题。

1)通常我之前做的是当我使用iReport创建Jasper模板时,我在创建它之前给出了相关的查询。但是这里查询将根据所选的Level和Semester进行更改。因此结果将根据查询更改。并且列标题也发生了变化,因为主题正在发生变化。(每个学期和每个级别的主题数量都不相似)所以我的问题是如何创建一个常见的Jasper模板来处理每种情况?(如果可能的话)

2)我如何使用Java代码打印ArrayList。我不知道使用Jasper Report打印ArrayList内容的java代码。

我对贾斯珀报告知之甚少。所以,如果你能帮助我,谢谢你。

1 个答案:

答案 0 :(得分:3)

您可以传递ArrayList作为参数报告。 然后在Report中创建一个具有相同参数名称和类型(ArrayList)的子数据集。 然后创建一个表组件。使用ConnectionExpression:

new net.sf.jasperreports.engine.JREmptyDataSource($P{IN_ARRAY_LIST}.size())

然后将报表参数映射到表参数。 然后在表组件的TextFields中,您可以使用如下表达式:

$P{IN_ARRAY_LIST}.get($V{REPORT_COUNT})

确保TextFields的EvaluationTime属性设置为now。

UPD: 显示ArrayList源如何工作的简短演示报告:

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="ArrayList" language="groovy" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="c67d12d3-80cd-46fb-8a79-5c4b0b7c76f9">
    <property name="ireport.zoom" value="1.0"/>
    <property name="ireport.x" value="0"/>
    <property name="ireport.y" value="0"/>
    <subDataset name="TableDataset" uuid="628eb9fb-e4f0-4f6c-b5b3-277a14fda6e2">
        <parameter name="IN_ARRAY_LIST" class="java.util.ArrayList" isForPrompting="false">
            <defaultValueExpression><![CDATA[new java.util.ArrayList()]]></defaultValueExpression>
        </parameter>
        <variable name="ROW_INDEX" class="java.lang.Integer" resetType="None">
            <variableExpression><![CDATA[$V{REPORT_COUNT} - 1]]></variableExpression>
        </variable>
    </subDataset>
    <!-- WHEN YOU CALL YOUR REPORT FROM JAVA, YOU SHOULD PUT YOUR ArrayList into IN_ARRAY_LIST PARAM-->
    <parameter name="IN_ARRAY_LIST" class="java.util.ArrayList" isForPrompting="false">
        <defaultValueExpression><![CDATA[new java.util.ArrayList()]]></defaultValueExpression>
    </parameter>
    <queryString>
        <![CDATA[]]>
    </queryString>
    <title>
        <band height="20" splitType="Stretch">
            <staticText>
                <reportElement x="0" y="0" width="555" height="20" uuid="d4548efc-5711-42b3-b08a-cb138c5d55cf">
                    <!-- THIS IS FOR DEMO ONLY - I PUT 2 ROWS INTO ARRAY LIST USING PrintWhenExpression -->
                    <printWhenExpression><![CDATA[$P{IN_ARRAY_LIST}.add("ROW_1") && $P{IN_ARRAY_LIST}.add("ROW_2")]]></printWhenExpression>
                </reportElement>
                <text><![CDATA[Report Title]]></text>
            </staticText>
        </band>
    </title>
    <pageHeader>
        <band height="20" splitType="Stretch"/>
    </pageHeader>
    <pageFooter>
        <band height="20" splitType="Stretch"/>
    </pageFooter>
    <summary>
        <band height="50" splitType="Stretch">
            <componentElement>
                <reportElement key="table" x="0" y="0" width="555" height="50" uuid="042cdee2-a56a-49af-8a1b-740825446ed5"/>
                <jr:table xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd">
                    <datasetRun subDataset="TableDataset" uuid="6f17f8a5-0bcc-4e2a-a900-cdb1e1261d24">
                        <datasetParameter name="IN_ARRAY_LIST">
                            <datasetParameterExpression><![CDATA[$P{IN_ARRAY_LIST}]]></datasetParameterExpression>
                        </datasetParameter>
                        <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.JREmptyDataSource($P{IN_ARRAY_LIST}.size())]]></dataSourceExpression>
                    </datasetRun>
                    <jr:column width="555" uuid="236aa389-6073-48fa-9b0f-02dcec80551e">
                        <jr:columnHeader height="30" rowSpan="1">
                            <staticText>
                                <reportElement x="0" y="0" width="555" height="30" uuid="18d3f3cc-13fa-4203-b239-45739b1839dc"/>
                                <text><![CDATA[ArrayList Field Value]]></text>
                            </staticText>
                        </jr:columnHeader>
                        <jr:detailCell height="20" rowSpan="1">
                            <textField>
                                <reportElement x="0" y="0" width="555" height="20" uuid="a5bd535e-091b-4eef-a0af-e70fc7d2cce2"/>
                                <textFieldExpression><![CDATA[$P{IN_ARRAY_LIST}.get($V{ROW_INDEX})]]></textFieldExpression>
                            </textField>
                        </jr:detailCell>
                    </jr:column>
                </jr:table>
            </componentElement>
        </band>
    </summary>
</jasperReport>

我希望现在很清楚。