gpt4 book ai didi

java - 使用 JasperReports 打印数组列表内容

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:45:28 24 4
gpt4 key购买 nike

我想在 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 有结果对象,它包含每个学生在特定级别和特定学期的结果。现在我想使用 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 模板时,我在创建它之前给出了相关查询。但是这里查询将根据选择的级别和学期进行更改。因此结果将根据查询进行更改。和列标题也随着科目的变化而改变。(每个学期和每个级别的科目数量都不相似)所以我的问题是如何创建一个通用的 Jasper 模板来处理每种情况?(如果可能的话)

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

我对 Jasper Reports 知之甚少。所以如果你能帮助我,谢谢。

最佳答案

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

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

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

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

确保您的 TextFields 的 EvaluationTime 属性设置为现在。

更新:显示 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>

我希望现在一切都清楚了。

关于java - 使用 JasperReports 打印数组列表内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28063386/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com