Jasper Sub Report Sizing Issue - jasper-reports

Looking for the best way to solve my dilemma. I am building a report and the data source that is being used is JSON <- Not much experience with JSON.
This is how data looks coming across to me via JSON
Parent
Child
Child (NEED SOME FIELDS HERE FOR HEADER)
FINAL CHILD (Need Fields In Here) (Setup as array bc multiple of Final Child)
FINAL CHILD
FINAL CHILD and so on (FINAL CHILD will be repeating in the Detail section.)
ALSO FINAL CHILD IS SETUP IN ARRAY FOR EACH FINAL CHILD
Currently, I have built a master and subreport. I do not need to pass any data because of the parent only has children... but could not get it working where the detail section of the master report would cycle through all the Final Children.
Master Report PreView:
SubReport PreView:
No matter what I do to the sizing, I cannot get it to shrink down in size and compactness...
Master Report Code
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.4.0.final using JasperReports Library version 6.4.1 -->
<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="Test4BD" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="65794bef-41ec-4ebe-9237-6c5db5cb403c">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="BD JSON Data Adapter"/>
<queryString language="json">
<![CDATA[tXML.Message.InboundReportXML.MESSAGEDATA.ASNDATA.INBOUNDHEADER]]>
</queryString>
<field name="ASNID" class="java.lang.String">
<fieldDescription><![CDATA[ASNID]]></fieldDescription>
</field>
<field name="ASN" class="java.lang.String">
<fieldDescription><![CDATA[ASN]]></fieldDescription>
</field>
<background>
<band splitType="Stretch"/>
</background>
<title>
<band height="7" splitType="Stretch"/>
</title>
<pageHeader>
<band height="14" splitType="Stretch"/>
</pageHeader>
<columnHeader>
<band height="62" splitType="Stretch">
<textField>
<reportElement x="70" y="0" width="100" height="30" uuid="0f247a53-6ea3-462d-a655-0e3f02f2b611"/>
<textFieldExpression><![CDATA[$F{ASNID}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="330" y="0" width="100" height="30" uuid="2c72da14-4800-4d2c-af67-58d27232133d"/>
<textFieldExpression><![CDATA[$F{ASN}]]></textFieldExpression>
</textField>
</band>
</columnHeader>
<detail>
<band height="75" splitType="Stretch">
<subreport>
<reportElement x="40" y="0" width="460" height="70" uuid="684434fc-a528-4e65-b7e8-6192048ae611"/>
<parametersMapExpression><![CDATA[$P{REPORT_PARAMETERS_MAP}]]></parametersMapExpression>
<subreportExpression><![CDATA["SubReport2.jasper"]]></subreportExpression>
</subreport>
</band>
</detail>
<columnFooter>
<band height="45" splitType="Stretch"/>
</columnFooter>
<pageFooter>
<band height="54" splitType="Stretch"/>
</pageFooter>
<summary>
<band height="42" splitType="Stretch"/>
</summary>
</jasperReport>
SubReport:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.4.0.final using JasperReports Library version 6.4.1 -->
<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="SubReport2" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="2d15bbaf-6da1-4158-83b1-6a069fa6144b">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="BD JSON Data Adapter"/>
<queryString language="json">
<![CDATA[tXML.Message.InboundReportXML.MESSAGEDATA.ASNDATA.INBOUNDHEADER.INBOUNDDETAILS]]>
</queryString>
<field name="ASNDETAILID" class="java.lang.String">
<fieldDescription><![CDATA[ASNDETAILID]]></fieldDescription>
</field>
<field name="LINENBR" class="java.lang.String">
<fieldDescription><![CDATA[LINENBR]]></fieldDescription>
</field>
<background>
<band splitType="Stretch"/>
</background>
<title>
<band height="8" splitType="Stretch"/>
</title>
<pageHeader>
<band height="9" splitType="Stretch"/>
</pageHeader>
<columnHeader>
<band height="32" splitType="Stretch">
<staticText>
<reportElement x="84" y="0" width="100" height="30" uuid="3b17e526-5b45-45db-b75f-4a86a1608bec"/>
<text><![CDATA[ASNDETAILID]]></text>
</staticText>
<staticText>
<reportElement x="310" y="0" width="100" height="30" uuid="cd6e9ad5-60a5-4041-894d-970faa1d4bd5"/>
<text><![CDATA[LINENBR]]></text>
</staticText>
</band>
</columnHeader>
<detail>
<band height="33" splitType="Stretch">
<textField>
<reportElement x="70" y="0" width="100" height="30" uuid="e8036cc3-bddc-47d7-9686-bbea50bc7f1c"/>
<textFieldExpression><![CDATA[$F{ASNDETAILID}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="210" y="0" width="100" height="30" uuid="5f3a97c2-6f8e-4458-8f9e-c13890a6b308"/>
<textFieldExpression><![CDATA[$F{LINENBR}]]></textFieldExpression>
</textField>
</band>
</detail>
<columnFooter>
<band height="10" splitType="Stretch"/>
</columnFooter>
<pageFooter>
<band height="7" splitType="Stretch"/>
</pageFooter>
<summary>
<band height="8" splitType="Stretch"/>
</summary>
</jasperReport>
I am open to all suggestions... again, very little experience with JSON and Jasper... especially around subreports... I was hoping I would not even need a subreport.

In Subreport, delete all bands except column header and detail .
from properties, make all the margins to zero.
In main report, make column header height = field height
and delete all other bands.
This is all basic alignment.

Related

Results of 2 groups through eachother

I have 2 groups, both will show the same 2 records (from the sql output) but grouped differently and shows different fields.
Output:
The 2nd result of group 1 is between the results of group 2. This is how Jaspersoft works.
But does someone have an idea how to keep the group results with eachother?
Group 1: result 1
Group 1: result 2
Group 2: result 1
Group 2: result 2
Any help or tips are appreciated.
[1]https://i.stack.imgur.com/509cP.jpg
Jrxml
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.2.2.final using JasperReports Library version 4.7.0 -->
<!-- 2017-08-11T16:19:29 -->
<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="Blank_A4_3" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="a75576f0-e223-4e8a-8d52-67936178ea31">
<property name="com.jaspersoft.studio.data.sql.tables" value=""/>
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="test"/>
<queryString>
<![CDATA[]]>
</queryString>
<field name="from_name" class="java.lang.String"/>
<field name="from_name2" class="java.lang.String"/>
<field name="undgcode" class="java.lang.String"/>
<field name="product_item_id" class="java.lang.String"/>
<group name="Group1">
<groupExpression><![CDATA[$F{product_item_id}]]></groupExpression>
<groupHeader>
<band height="50" splitType="Prevent">
<textField>
<reportElement isPrintRepeatedValues="false" x="40" y="10" width="220" height="30" uuid="ce52a200-b3dd-4b9b-bee4-30cc9db15aa5"/>
<textFieldExpression><![CDATA[$F{from_name}]]></textFieldExpression>
</textField>
</band>
</groupHeader>
</group>
<group name="Group2" keepTogether="true">
<groupExpression><![CDATA[$F{undgcode}]]></groupExpression>
<groupHeader>
<band height="64">
<staticText>
<reportElement x="140" y="10" width="100" height="30" uuid="28d2e565-98d6-4714-8420-81a3819ab46a"/>
<text><![CDATA[Static Text]]></text>
</staticText>
</band>
</groupHeader>
<groupFooter>
<band height="50" splitType="Prevent">
<textField>
<reportElement isPrintRepeatedValues="false" x="40" y="10" width="220" height="30" uuid="857197bd-e4b6-404b-a527-19e63dd02a94">
<property name="com.jaspersoft.studio.unit.x" value="pixel"/>
</reportElement>
<textFieldExpression><![CDATA[$F{from_name2}]]></textFieldExpression>
</textField>
</band>
</groupFooter>
</group>
<background>
<band splitType="Stretch"/>
</background>
<title>
<band height="79" splitType="Stretch"/>
</title>
<pageHeader>
<band height="35" splitType="Stretch"/>
</pageHeader>
<columnHeader>
<band height="61" splitType="Stretch"/>
</columnHeader>
<columnFooter>
<band height="45" splitType="Stretch"/>
</columnFooter>
<pageFooter>
<band height="54" splitType="Stretch"/>
</pageFooter>
<summary>
<band height="42" splitType="Stretch"/>
</summary>
</jasperReport>

net.sf.jasperreports.engine.JRException:Resource not found

I try to use subreport using JasperSoft Studio but I get the exception below. It cannot find the subreport file although it is there.
net.sf.jasperreports.engine.JRException:Resource not found at: D:\\JASPERREPORTS\\MyReports
Below is the configuration of main report
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version last-->
<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="Blank_A4" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="0a6d6643-1d79-4e5e-b39d-a773bba37c12">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="kai3_adapter"/>
<queryString>
<![CDATA[select * from cm_crew]]>
</queryString>
<field name="OID" class="java.math.BigDecimal"/>
<field name="CREW_OID" class="java.lang.String"/>
<field name="CONTACT_OID" class="java.math.BigDecimal"/>
<field name="ACTIVE" class="java.lang.String"/>
<field name="ONSHIFT" class="java.lang.String"/>
<field name="SHIFT_ID" class="java.lang.String"/>
<field name="SHIFT_START" class="java.sql.Timestamp"/>
<field name="CREW_STATUS" class="java.lang.String"/>
<group name="CREW_OID">
<groupExpression><![CDATA[$F{CREW_OID}]]></groupExpression>
</group>
<background>
<band splitType="Stretch"/>
</background>
<title>
<band height="79" splitType="Stretch"/>
</title>
<pageHeader>
<band height="35" splitType="Stretch"/>
</pageHeader>
<columnHeader>
<band height="61" splitType="Stretch">
<staticText>
<reportElement x="0" y="0" width="141" height="20" uuid="fc7cf2eb-2922-42e3-b446-fa1cba3239d6"/>
<text><![CDATA[CREW_OID]]></text>
</staticText>
<staticText>
<reportElement x="141" y="0" width="138" height="20" uuid="1fb08aed-592e-437d-9c3c-87e763dc81f8"/>
<text><![CDATA[ACTIVE]]></text>
</staticText>
<staticText>
<reportElement x="279" y="0" width="138" height="20" uuid="76eaa47f-6f18-4210-a607-a6456b1cc4ed"/>
<text><![CDATA[ONSHIFT]]></text>
</staticText>
<staticText>
<reportElement x="417" y="0" width="138" height="20" uuid="273fca2c-2b50-4157-ab3b-8545d94855f3"/>
<text><![CDATA[CREW_STATUS]]></text>
</staticText>
</band>
</columnHeader>
<detail>
<band height="257" splitType="Stretch">
<textField>
<reportElement x="0" y="13" width="141" height="20" uuid="ef3acaa1-b11a-4b3d-b90d-7da18fc15dfa"/>
<textFieldExpression><![CDATA[$F{CREW_OID}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="141" y="13" width="138" height="20" uuid="2c29e96a-d712-4aff-9449-46f523ebbad8"/>
<textFieldExpression><![CDATA[$F{ACTIVE}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="279" y="13" width="81" height="20" uuid="70df46c9-e63a-45a0-8c6e-82e38c260681"/>
<textFieldExpression><![CDATA[$F{ONSHIFT}]]></textFieldExpression>
</textField>
<subreport>
<reportElement x="380" y="20" width="165" height="170" uuid="3c312fc6-a389-4e46-af09-ddb1bfaa353f"/>
<connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
<subreportExpression><![CDATA["D:\\JASPERREPORTS\\MyReports\\"]]></subreportExpression>
</subreport>
</band>
</detail>
<columnFooter>
<band height="45" splitType="Stretch"/>
</columnFooter>
<pageFooter>
<band height="54" splitType="Stretch"/>
</pageFooter>
<summary>
<band height="42" splitType="Stretch"/>
</summary>
</jasperReport>
Following Sharad's answer, if it still doesn't generate the file (which happened to me), you can try this:
Before previewing the report, you can try to compile it first. If you open your jrxml file (the one that includes the subreport), you may notice a little icon (a little file with some binary string) on the upper bar of your editor. Clicking this button should generate the file you're expecting.
I created a new answer because I wanted to add an image showing the button:
Notice that this may also work: clean the projects that contain the reports using "Project > Clean...". And then right click your project in the "Project Explorer" (usually on your left), and then click "Build Project".
Send the "SUBREPORT_DIR" parameter from the application that calls the report.
For example, in Java:
params.put("SUBREPORT_DIR", "reports/folder/");
Just point to the directory, not the file.
If you use Maven, set Maven resource tags properly in pom.xml
Try to give the subreport name in the subreport path like this :-
"D:\\JASPERREPORTS\\MyReports\\subreport.jasper"
Even .jasper file is not there just give the subreport.jasper it will automatically compile the subreport.jrxml file and generate the .jasper file.

JasperReports: generation error from java with external fonts

My program generates an error for arabic letter :
cannot assign instance of net.sf.jasperreports.engine.base.JRBaseStaticText to field
net.sf.jasperreports.engine.base.JRBaseParagraph.paragraphContainer of type
net.sf.jasperreports.engine.JRParagraphContainer in instance of
net.sf.jasperreports.engine.base.JRBaseParagraph
I am using:
iReport 4.0.2
Windows XP
jasperreports-fonts-4.0.2.jar
jasperreports 4.0.2.jar
jasperreports-extensions-3.5.3
My .jrxml file is:
<?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="report1" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
<parameter name="strTitle" class="java.lang.String"/>
<field name="vchDhirams" class="java.lang.String"/>
<background>
<band splitType="Stretch"/>
</background>
<title>
<band height="21" splitType="Stretch">
<staticText>
<reportElement x="221" y="1" width="100" height="20"/>
<textElement markup="none"/>
<text><![CDATA[$P{strTitle}]]></text>
</staticText>
</band>
</title>
<pageHeader>
<band height="35" splitType="Stretch"/>
</pageHeader>
<columnHeader>
<band height="37" splitType="Stretch">
<staticText>
<reportElement x="294" y="17" width="135" height="20"/>
<textElement>
<font pdfEncoding="Identity-H" isPdfEmbedded="true"/>
</textElement>
<text><![CDATA[ستلام قسيمة]]></text>
</staticText>
</band>
</columnHeader>
<detail>
<band height="125" splitType="Stretch"/>
</detail>
<columnFooter>
<band height="45" splitType="Stretch"/>
</columnFooter>
<pageFooter>
<band height="54" splitType="Stretch"/>
</pageFooter>
<summary>
<band height="42" splitType="Stretch"/>
</summary>
</jasperReport>
Where is my fault? Please suggest me.
Thanks in advance.

Returning a value from Sub Report to Main Report in iReport

Hi every one I am using iReports for generating one of the reports and stuck at one place.
The situation is like this:
I am using one sub report in my main report and i want to return a variable (float) back to the main report from sub report after the query has been executed. And i'm just getting null values back to main report i have wasted 2 days googling and searching but problem is still there..
bellow is my dummy code of my JRXMLS (perfectly same) and snaps...
Main Report JRXML
<?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="anuj" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
<property name="ireport.zoom" value="1.0"/>
<property name="ireport.x" value="0"/>
<property name="ireport.y" value="0"/>
<parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false">
<defaultValueExpression><![CDATA["/home/anuj/Reports/"]]></defaultValueExpression>
</parameter>
<queryString language="SQL">
<![CDATA[select * from "SensorType"]]>
</queryString>
<field name="SensorTypeId" class="java.lang.Integer"/>
<field name="SensorTypeName" class="java.lang.String"/>
<variable name="A" class="java.lang.Integer" resetType="None" calculation="System"/>
<background>
<band splitType="Stretch"/>
</background>
<title>
<band splitType="Stretch"/>
</title>
<pageHeader>
<band splitType="Stretch"/>
</pageHeader>
<columnHeader>
<band splitType="Stretch"/>
</columnHeader>
<detail>
<band height="23" splitType="Stretch">
<textField>
<reportElement x="71" y="3" width="100" height="20"/>
<textElement/>
<textFieldExpression><![CDATA[$F{SensorTypeId}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="202" y="3" width="112" height="20"/>
<textElement/>
<textFieldExpression><![CDATA[$F{SensorTypeName}]]></textFieldExpression>
</textField>
</band>
</detail>
<columnFooter>
<band height="5" splitType="Stretch"/>
</columnFooter>
<pageFooter>
<band height="1" splitType="Stretch"/>
</pageFooter>
<summary>
<band height="42" splitType="Stretch">
<subreport>
<reportElement x="183" y="16" width="257" height="26"/>
<connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
<returnValue subreportVariable="A" toVariable="A"/>
<subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "anuj_subreport1.jasper"]]></subreportExpression>
</subreport>
<textField>
<reportElement x="71" y="22" width="100" height="20"/>
<textElement/>
<textFieldExpression><![CDATA[$V{A}]]></textFieldExpression>
</textField>
</band>
</summary>
</jasperReport>
Sub Report JRXML
<?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="anuj_subreport1" language="groovy" pageWidth="555" pageHeight="802" columnWidth="555" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0">
<property name="ireport.zoom" value="1.0"/>
<property name="ireport.x" value="0"/>
<property name="ireport.y" value="149"/>
<queryString>
<![CDATA[select Sum("SensorTypeId") from "SensorType";]]>
</queryString>
<field name="sum" class="java.lang.Long"/>
<variable name="A" class="java.lang.Integer" resetType="None" calculation="System">
<variableExpression><![CDATA[$F{sum}]]></variableExpression>
</variable>
<background>
<band splitType="Stretch"/>
</background>
<title>
<band height="79" splitType="Stretch">
<staticText>
<reportElement x="169" y="59" width="100" height="20"/>
<textElement/>
<text><![CDATA[sum]]></text>
</staticText>
<textField>
<reportElement x="216" y="59" width="100" height="20"/>
<textElement/>
<textFieldExpression><![CDATA[$F{sum}]]></textFieldExpression>
</textField>
</band>
</title>
<pageHeader>
<band height="35" splitType="Stretch"/>
</pageHeader>
<columnHeader>
<band height="61" splitType="Stretch"/>
</columnHeader>
<detail>
<band height="125" splitType="Stretch"/>
</detail>
<columnFooter>
<band height="45" splitType="Stretch"/>
</columnFooter>
<pageFooter>
<band height="54" splitType="Stretch"/>
</pageFooter>
<summary>
<band height="42" splitType="Stretch"/>
</summary>
</jasperReport>
Thanks in advance..
Although the question is already answered, I would like to highlight the importance of having calculation="System" on the variable in the Main Report (the report calling the SubReport).
I wasted a lot of time before figuring this out...
In the dummy-code for Main Report JRXML above, the variable "A" correctly has calculation="System". NB: The answer by #GenericJon covers the variable in the SubReport.
In the subreport variable, you have calculation=System. This should be used when you are calculating the variable yourself using a scriptlet. You do not have an appropriate scriptlet attached to the report, so the variable is never being calculated.
You probably want to change the variable definition so that it is calculated at the start of the subreport, something like this:
<variable name="A" class="java.lang.Integer" resetType="Report" calculation="Nothing">
<variableExpression><![CDATA[$F{sum}]]></variableExpression>
</variable>
resetType="Report" will never reset the variable while the report is running.
calculation="Nothing" will evaluate the variableExpression for every row in the dataset.
These attributes could be omitted though, as they are the default values used. You should then find that the variable is initialised correctly.
From the JasperReports Ultimate Guide:
The value coming from the subreport is available only when the whole band containing the subreport is printed. If you need to print this value using a textfield placed in the same band as your subreport, set the evaluation time of the textfield to Band
i am agree with #bubba_hego99, the calculation type as below:
system no caculation, just set as system, or valued as other operator.
nothing no calulation, just set the variable.
sum execute sum($Feild("A")).
....
The detail you want to know other caculation, you should be to see the ireport document.
Note, in earlier versions of JasperReports:
When using a subreport returnValue, the variable returned must not be in the same band as the subreport itself.
The affectation is done I think at the end of the rendering of the band.
So add another band and use your variable inside.

JasperReports collection as datasource?

I'm trying to find out how to use a string collection as a datasource in JasperReports.
I guess I found the solution, but I can't get this to work, can anyone assist me?
set as datasource the special data source JREmptyDatasource( $F{my_collection}.size() )
This creates an empty data set with the same size of records as the collection.
Pass the $F{my_collection} as parameter to the sub dataset (using the data set run of the List).
To print the current element of the collection:
$P{my_collection_param}.get( $V{REPORT_COUNT} )
<?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="report1" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
<property name="ireport.zoom" value="1.0"/>
<property name="ireport.x" value="0"/>
<property name="ireport.y" value="0"/>
<subDataset name="dataset1">
<parameter name="my_collection_param" class="java.util.Collection" isForPrompting="false">
<defaultValueExpression><![CDATA[$P{my_collection}]]></defaultValueExpression>
</parameter>
</subDataset>
<parameter name="my_collection" class="java.util.Collection">
<defaultValueExpression><![CDATA["anna"]]></defaultValueExpression>
</parameter>
<field name="my_collection" class="java.util.Collection">
<fieldDescription><![CDATA[]]></fieldDescription>
</field>
<background>
<band splitType="Stretch"/>
</background>
<title>
<band height="79" splitType="Stretch"/>
</title>
<pageHeader>
<band height="35" splitType="Stretch"/>
</pageHeader>
<columnHeader>
<band height="61" splitType="Stretch"/>
</columnHeader>
<detail>
<band height="125" splitType="Stretch">
<componentElement>
<reportElement x="51" y="30" width="400" height="50"/>
<jr:list xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd" printOrder="Vertical">
<datasetRun subDataset="dataset1">
<dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.JREmptyDataSource($F{my_collection}.size())]]></dataSourceExpression>
</datasetRun>
<jr:listContents height="50" width="0">
<textField>
<reportElement x="159" y="24" width="100" height="20"/>
<textElement/>
<textFieldExpression class="java.lang.String"><![CDATA[$P{my_collection_param}.get( $V{REPORT_COUNT} )]]></textFieldExpression>
</textField>
</jr:listContents>
</jr:list>
</componentElement>
</band>
</detail>
<columnFooter>
<band height="45" splitType="Stretch"/>
</columnFooter>
<pageFooter>
<band height="54" splitType="Stretch"/>
</pageFooter>
<summary>
<band height="42" splitType="Stretch"/>
</summary>
I guess your hack of using JREmptyDataSource is good by definition, if it works.
But you'll find that things are lot easier if you use this instead:
new net.sf.jasperreports.engine.data.JRMapCollectionDataSource($P{my_collection_param})