编程语言
首页 > 编程语言> > java-使用JasperReports打印arraylist内容

java-使用JasperReports打印arraylist内容

作者:互联网

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

实际上,我对Jasper Reporting知之甚少
我使用iReport创建Japser报告,然后使用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 Report是这样的,对于Level 1和学期1

Reg.No  CMIS1113   
132108    A
132145    D

对于第二级和第二学期,

Reg.No  IMGT2213  CMIS2213   
122110    A          -
122104    -          C

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

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

我对Jasper Reports知之甚少.因此,如果可以的话,请帮助我.谢谢.

解决方法:

您可以传递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>

我希望现在已经清楚了.

标签:jasper-reports,java
来源: https://codeday.me/bug/20191120/2046916.html