I was able to start with MultiAxis Chart with Jasper report using Link : create MultiAxis Chart with Jasper report.
I was able to creat the chart as well but not completely formatted. I was having Axis Problem. Both X-axis are coming on left side. How do I move one Axis of bar chart on right side. Following is the picture of my current problem:
Following is my jrxml content.
<?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="cutting_indicator_cutter" 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="48"/>
<subDataset name="chart1">
<queryString language="SQL">
<![CDATA[select Q.proddate,NVL(Q.m2NetReel,0)
,case when Q.HMO <> 0 then
NVL((Q.m2NetReel/Q.HMO),0)
end as m2NETBYHMO,
Q.Objectif_HMOBY1000
from (
SELECT
PROD_DATE as proddate,
case when CUTTING_PRODUCTIVITY.REMAKE_CUT_SQM is null then CUTTING_PRODUCTIVITY.CUTTER_NET_SQM
else
CUTTING_PRODUCTIVITY.CUTTER_NET_SQM + CUTTING_PRODUCTIVITY.REMAKE_CUT_SQM
end as m2NetReel,
(CUTTING_PRODUCTIVITY.MACHINE_WORKING_HOURS_NORM * CUTTING_PRODUCTIVITY.USER_QUANTITY ) as HMO,
1000/(CUTTING_MACHINE.CADENCY*19.26) as Objectif_HMOBY1000
FROM CUTTING_PRODUCTIVITY CUTTING_PRODUCTIVITY
INNER JOIN CUTTING_MACHINE CUTTING_MACHINE
ON CUTTING_MACHINE_ID=CUTTING_MACHINE.CUTTING_ID where trunc(CUTTING_PRODUCTIVITY.PROD_DATE) >= '1-May-15' and trunc( CUTTING_PRODUCTIVITY.PROD_DATE ) <='31-May-15'
ORDER BY CUTTER) Q]]>
</queryString>
<field name="PRODDATE" class="java.sql.Timestamp"/>
<field name="NVL(Q.M2NETREEL,0)" class="java.math.BigDecimal"/>
<field name="M2NETBYHMO" class="java.math.BigDecimal"/>
<field name="OBJECTIF_HMOBY1000" class="java.math.BigDecimal"/>
</subDataset>
<queryString>
<![CDATA[SELECT EST_CUTTER_GLASSES_QTY,
CUTTER_NET_SQM,
REMAKE_CUT_QTY,
PROD_DATE,
REMAKE_CUT_SQM,
CUTTING_MACHINE.CADENCY,
USER_QUANTITY,
CUTTER,
MACHINE_WORKING_HOURS_NORM
FROM CUTTING_PRODUCTIVITY CUTTING_PRODUCTIVITY
INNER JOIN CUTTING_MACHINE CUTTING_MACHINE
ON CUTTING_MACHINE_ID=CUTTING_MACHINE.CUTTING_ID
where trunc(CUTTING_PRODUCTIVITY.PROD_DATE) >= '1-May-15' and trunc( CUTTING_PRODUCTIVITY.PROD_DATE ) <='31-May-15'
ORDER BY CUTTER]]>
</queryString>
<field name="EST_CUTTER_GLASSES_QTY" class="java.math.BigDecimal"/>
<field name="CUTTER_NET_SQM" class="java.math.BigDecimal"/>
<field name="REMAKE_CUT_QTY" class="java.math.BigDecimal"/>
<field name="PROD_DATE" class="java.sql.Timestamp"/>
<field name="REMAKE_CUT_SQM" class="java.math.BigDecimal"/>
<field name="CADENCY" class="java.math.BigDecimal"/>
<field name="USER_QUANTITY" class="java.math.BigDecimal"/>
<field name="CUTTER" class="java.lang.String"/>
<field name="MACHINE_WORKING_HOURS_NORM" class="java.math.BigDecimal"/>
<group name="CUTTER">
<groupExpression><![CDATA[$F{CUTTER}]]></groupExpression>
<groupHeader>
<band height="325">
<frame>
<reportElement x="0" y="0" width="555" height="325" printWhenGroupChanges="CUTTER"/>
<multiAxisChart>
<chart renderType="svg" theme="generic">
<reportElement x="24" y="0" width="486" height="325">
<property name="net.sf.jasperreports.chart.range.axis.tick.interval" value="2"/>
</reportElement>
<chartTitle/>
<chartSubtitle/>
<chartLegend position="Bottom"/>
</chart>
<multiAxisPlot>
<plot/>
<axis>
<lineChart>
<chart renderType="svg">
<reportElement x="0" y="0" width="0" height="0" backcolor="#FFFFFF"/>
<chartTitle color="#000000"/>
<chartSubtitle color="#000000"/>
<chartLegend textColor="#000000" backgroundColor="#FFFFFF" position="Bottom"/>
</chart>
<categoryDataset>
<dataset>
<datasetRun subDataset="chart1">
<connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
</datasetRun>
</dataset>
<categorySeries>
<seriesExpression><![CDATA["WEIGHTAVG"]]></seriesExpression>
<categoryExpression><![CDATA[$F{PRODDATE}]]></categoryExpression>
<valueExpression><![CDATA[$F{NVL(Q.M2NETREEL,0)}]]></valueExpression>
</categorySeries>
<categorySeries>
<seriesExpression><![CDATA["OBJECTIF"]]></seriesExpression>
<categoryExpression><![CDATA[$F{PRODDATE}]]></categoryExpression>
<valueExpression><![CDATA[$F{OBJECTIF_HMOBY1000}]]></valueExpression>
</categorySeries>
</categoryDataset>
<linePlot isShowLines="true" isShowShapes="true">
<plot labelRotation="-45.0"/>
</linePlot>
</lineChart>
</axis>
<axis>
<barChart>
<chart renderType="svg">
<reportElement x="0" y="0" width="0" height="0" backcolor="#FFFFFF"/>
<chartTitle color="#000000"/>
<chartSubtitle color="#000000"/>
<chartLegend textColor="#000000" backgroundColor="#FFFFFF" position="Bottom"/>
</chart>
<categoryDataset>
<dataset>
<datasetRun subDataset="chart1">
<connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
</datasetRun>
</dataset>
<categorySeries>
<seriesExpression><![CDATA["M2NetHMO"]]></seriesExpression>
<categoryExpression><![CDATA[$F{PRODDATE}]]></categoryExpression>
<valueExpression><![CDATA[$F{M2NETBYHMO}]]></valueExpression>
</categorySeries>
</categoryDataset>
<barPlot>
<plot/>
<itemLabel/>
</barPlot>
</barChart>
</axis>
</multiAxisPlot>
</multiAxisChart>
</frame>
</band>
</groupHeader>
</group>
<background>
<band splitType="Stretch"/>
</background>
<title>
<band height="50"/>
</title>
</jasperReport>
How do I move my bar chart axis to right?
To move an axis to the right side of the chart in jasper reports, you'll need to create a Customizer for your chart. Once you do that, the following commands in your customizer will move your axis to the right side of the chart:
// get plot from chart object
CategoryPlot plot = (CategoryPlot) chart.getPlot();
// move axis to right side of chart
plot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);
Related
Trying to make a Jasper Report and I'm having troubles using Java's Date class. I am working with a .CSV file so unfortunately can't use SQL to solve my issues.
I've narrowed it down to this statement:
new Long( 1L * $V{Date2Long} - 1L * $V{Date1Long})
Where Date2Long and Date1Long are: (both variable classes are Date)
new Long($V{Date2}.getTime())
new Long($V{Date1}.getTime())
Where Date2 and Date1 are: (both variable classes are Long)
new SimpleDateFormat("MM/dd/yyyy HH:mm").parse($F{Date2CSVColumnName})
new SimpleDateFormat("MM/dd/yyyy HH:mm").parse($F{Date1CSVColumnName})
Using the date examples:
Date2 = "05/05/2015 13:22"
Date1 = "04/28/2015 16:54"
Difference should be = 6 days, 20 hours, 28 minutes
Using java's .getTime() I get:
Date2 = "1430850120000"
Date1 = "1430258040000"
ProductionDateInMilliseconds - CreateDateInMilliseconds:
My java equation above = 58860000 (0.68125 Days) <---- ERROR
Difference should be = 592080000 (6.85 Days)
The only assumption I can make is that I made an overflow error somewhere. But I don't see how that is possible when all I used was longs. Are longs just broken in IReport?
I have tried this and nothing wrong with the iReport. Here is my JRXML file-
<?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" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="322b2351-0f86-4ebd-9c51-905d97f5d8f8">
<property name="ireport.zoom" value="1.0"/>
<property name="ireport.x" value="0"/>
<property name="ireport.y" value="0"/>
<parameter name="Date2CSVColumnName" class="java.lang.String" isForPrompting="false">
<defaultValueExpression><![CDATA["05/05/2015 13:22"]]></defaultValueExpression>
</parameter>
<parameter name="Date1CSVColumnName" class="java.lang.String" isForPrompting="false">
<defaultValueExpression><![CDATA["04/28/2015 16:54"]]></defaultValueExpression>
</parameter>
<variable name="Date2" class="java.util.Date">
<initialValueExpression><![CDATA[new SimpleDateFormat("MM/dd/yyyy HH:mm").parse($P{Date2CSVColumnName})]]></initialValueExpression>
</variable>
<variable name="Date1" class="java.util.Date">
<initialValueExpression><![CDATA[new SimpleDateFormat("MM/dd/yyyy HH:mm").parse($P{Date1CSVColumnName})]]></initialValueExpression>
</variable>
<variable name="Date2Long" class="java.lang.Long">
<variableExpression><![CDATA[]]></variableExpression>
<initialValueExpression><![CDATA[new Long($V{Date2}.getTime())]]></initialValueExpression>
</variable>
<variable name="Date1Long" class="java.lang.Long">
<variableExpression><![CDATA[]]></variableExpression>
<initialValueExpression><![CDATA[new Long($V{Date1}.getTime())]]></initialValueExpression>
</variable>
<title>
<band height="138" splitType="Stretch">
<textField>
<reportElement x="101" y="0" width="358" height="22" uuid="16e461b2-4c7a-49c6-802e-9bd66b818ce1"/>
<textFieldExpression><![CDATA[$V{Date2}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="101" y="22" width="358" height="22" uuid="5609ffc9-354c-48ba-bbda-4ef8753875a7"/>
<textFieldExpression><![CDATA[$V{Date1}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="101" y="58" width="358" height="22" uuid="70582d8a-2c68-463a-ad73-6068bd2c58fd"/>
<textFieldExpression><![CDATA[$V{Date2Long}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="101" y="80" width="358" height="22" uuid="e48af180-0bb1-4d19-b908-fa7b1a962f45"/>
<textFieldExpression><![CDATA[$V{Date1Long}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="101" y="116" width="358" height="22" uuid="71ffab1a-f70d-4601-978c-96b73ae0f268"/>
<textFieldExpression><![CDATA[new Long( 1L * $V{Date2Long} - 1L * $V{Date1Long})]]></textFieldExpression>
</textField>
</band>
</title>
</jasperReport>
Have a look.
I am able to create a Master report using JasperReports API. However stuck in designing a sub report using JasperReports API and add it into Master report design.
Master Report 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>
Sub Report 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>
These Stand alone XML's getting compiled and will generate report.
However i want to create these using Jasper Report API.
I have Just started. But stuck without any example available.
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>
This can be done as following
Put the sub report inside a band and then append the band to main report
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);
I have a Java class with two attribute id (integer) and name (string). I have created a list of objects and I want to use the JasperReports to make a pdf file.
JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(conceptsList,true);
Map jasperParameters = new HashMap();
jasperParameters.put("Concepts", ds);
String input = "C:/report.jasper";
JasperPrint jp = JasperFillManager.fillReport(input, jasperParameters, new JREmptyDataSource());
JasperExportManager.exportReportToPdfFile(jp, "C:/report.pdf");
In iReport Designer I have one parameter (Concepts) and set net.sf.jasperreports.engine.data.JRBeanCollectionDataSource as a parameter class. I also define two fields id and name and put them in the details band. but my pdf file does not show anything. I think somewhere I have to define datasource for id and name but I cannot find anything. It would be great if anyone can help me.
<?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="report22" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="313d6b25-bcea-43a0-80db-2c7733499ca2">
<property name="ireport.zoom" value="1.0"/>
<property name="ireport.x" value="0"/>
<property name="ireport.y" value="0"/>
<parameter name="Concepts" class="net.sf.jasperreports.engine.data.JRBeanCollectionDataSource"/>
<queryString>
<![CDATA[]]>
</queryString>
<field name="id" class="java.lang.Integer"/>
<field name="name" class="java.lang.String"/>
<title>
<band height="50" splitType="Stretch"/>
</title>
<detail>
<band height="200" splitType="Stretch">
<textField>
<reportElement x="0" y="0" width="100" height="20" uuid="b6c2dc20-ebaa-4dfe-8d42-b8318bf05d33"/>
<textFieldExpression><![CDATA[$F{id}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="100" y="0" width="100" height="20" uuid="fbc83087-e178-4210-a9f0-a8e1d86a5f71"/>
<textFieldExpression><![CDATA[$F{name}]]></textFieldExpression>
</textField>
</band>
</detail>
You can send the object data as a datasource to JRXML. Additionally, if the List should also be sent as a datasource to JRXML.
First design the iReport to accept Object as datasource:
1) Add the project "src" in class-path in iReport.
2) Specify the object package.className in JRXML report datasource.
3) Map the TextFields with the Object parameters.
Now in source code, use "JRBeanCollectionDataSource" Class for sending the List of Object in "JasperFillManager.fillReport()", for Connection.
Hope this helps.
A simple report with only a png in it.
Png's dpi is 96, which looks pretty sharp. However, every time i export the report, be it to .docx or to pdf, only an awfully blurry image appears.
i've tried setting
net.sf.jasperreports.image.dpi
to 300, and to 96
both in ireports and directly on the report's jrxml as a property.
Nothing works.
exception
I've lost many days googling this matter but still no answers.
Update 1
I've been able to trace the cause of this strange behavior to itext. It seems that it has to do something with it.
Update 2
Here's the jrxml code
<?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="carta_policia" pageWidth="612" pageHeight="792" columnWidth="572" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="fbda9a68-7549-438c-a8ad-b3aedaf0b2d4">
<property name="ireport.zoom" value="1.0"/>
<property name="ireport.x" value="0"/>
<property name="ireport.y" value="0"/>
<property name="ireport.background.image" value="C:\Users\thou\workspace\cujillo\WebContent\resources\reports\fondo.png"/>
<property name="ireport.background.image.properties" value="false,true,0.25,0,0,0,0,0,0"/>
<property name="net.sf.jasperreports.image.dpi" value="96"/>
<parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false">
<defaultValueExpression><![CDATA["C:/Users/thou/workspace/cujillo/WebContent/resources/reports/"]]></defaultValueExpression>
</parameter>
<parameter name="R_RADICADO" class="java.lang.String"/>
<parameter name="SUBREPORT_DATA_SOURCE" class="net.sf.jasperreports.engine.JRDataSource"/>
<parameter name="R_ASUNTO" class="java.lang.String"/>
<parameter name="R_LOCALIDAD" class="java.lang.String"/>
<parameter name="R_IMAGE_RENDERER" class="net.sf.jasperreports.engine.JRRenderable" isForPrompting="false"/>
<parameter name="R_PRINT_BACKGROUND" class="java.lang.String"/>
<background>
<band height="752"/>
</background>
<title>
<band height="371" splitType="Stretch">
<image scaleImage="RealSize">
<reportElement uuid="dbadb500-4011-415b-bd98-4236532783c4" x="234" y="147" width="75" height="63"/>
<imageExpression><![CDATA["C:\\Users\\thou\\workspace\\cujillo\\WebContent\\resources\\reports\\alcaldia mayor.png"]]></imageExpression>
</image>
<image scaleImage="Clip">
<reportElement uuid="ecf7dbe3-4369-41a8-ba49-db98ba5ef478" x="309" y="151" width="75" height="63"/>
<imageExpression><![CDATA["C:\\Users\\thou\\workspace\\cujillo\\WebContent\\resources\\reports\\alcaldia mayor.jpg"]]></imageExpression>
</image>
</band>
</title>
<pageHeader>
<band splitType="Stretch"/>
</pageHeader>
<columnHeader>
<band splitType="Stretch"/>
</columnHeader>
<detail>
<band height="104" splitType="Stretch"/>
</detail>
<columnFooter>
<band splitType="Stretch"/>
</columnFooter>
<pageFooter>
<band height="11" splitType="Stretch"/>
</pageFooter>
<summary>
<band height="209" splitType="Stretch"/>
</summary>
</jasperReport>
Although we've raised the DPI setting in our presentations, I've implemented a custom exporter, which exports charts as powerpoint shapes and not as raster images.
At least for .docx it's feasible to implement something similar.
Before I've started the shape export classes, I've tried to use EMF (1,2) as an image format, but this is quite limited, e.g. it doesn't embed fonts.
I haven't searched further in the direction, but maybe you can transform an intermediate SVG image to something (raster/vector) which can be embedded into .docx/.pdf.
Have you checked the images inside .docx-Zip-file? ... are the plain images also blurry or just when they are displayed by Word/LibreOffice. And of course the images should change after you changed the DPI setting - if not, try to put a jasperreports.properties in the classpath
hi i am very new to Xml parsing
i want to change following attribute values frequently ...........
columnCount, width and height
After that i need to rewrite xml file with modified data
in following xml file by using java(sax ,Dom or jaxB parser) please any one can give some suggestion on it...............
=======================================================================================
<?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="Hello_subreport1_subreport1" language="groovy" columnCount="2" printOrder="Horizontal" pageWidth="520" pageHeight="802" columnWidth="260" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0" uuid="ac19d62f-eac8-428e-8e0a-9011534189ed">
<property name="ireport.zoom" value="1.0"/>
<property name="ireport.x" value="0"/>
<property name="ireport.y" value="0"/>
<queryString>
<![CDATA[]]>
</queryString>
<field name="subjectName" class="java.lang.String">
<fieldDescription><![CDATA[subjectName]]></fieldDescription>
</field>
<field name="subjectID" class="java.lang.Integer">
<fieldDescription><![CDATA[subjectID]]></fieldDescription>
</field>
<field name="maxMarks" class="java.lang.Integer">
<fieldDescription><![CDATA[maxMarks]]></fieldDescription>
</field>
<field name="redMarks" class="java.lang.Float">
<fieldDescription><![CDATA[redMarks]]></fieldDescription>
</field>
<field name="passMarks" class="java.lang.Integer">
<fieldDescription><![CDATA[passMarks]]></fieldDescription>
</field>
<field name="marks" class="java.lang.Float">
<fieldDescription><![CDATA[marks]]></fieldDescription>
</field>
<background>
<band splitType="Stretch"/>
</background>
<detail>
<band height="52">
<textField isStretchWithOverflow="true">
<reportElement uuid="5f7665fb-9218-4434-a9e5-5eff306499b3" x="0" y="33" width="100" height="20"/>
<box>
<pen lineWidth="0.0"/>
<topPen lineWidth="0.0"/>
<leftPen lineWidth="0.0"/>
<bottomPen lineWidth="0.0"/>
<rightPen lineWidth="0.0"/>
</box>
<textElement>
<font size="12"/>
</textElement>
<textFieldExpression><![CDATA[$F{marks}]]></textFieldExpression>
</textField>
<textField>
<reportElement uuid="6b999cb1-600e-4634-be8f-7ac99e225f49" x="0" y="13" width="100" height="20"/>
<box>
<topPen lineWidth="0.25"/>
</box>
<textElement/>
<textFieldExpression><![CDATA[$F{subjectName}]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
========================================================================
If you want to modify the document them use a DOM parser. This will transform the xml file into a datastructure where you can find the attributes and change their values. Have a look at jdom or dom4j, they are really easy to use.
A sax parser is a good choice if you only want to read the document. That parser just creates events while parsing the document.
Answering to your comment: I do not get a NPE but the rootNode.getChild("detail")) return null. That is because the element is associated with a namespace. Replace the last line in your sample code with
System.out.println(rootNode.getChild("detail", rootNode.getNamespace()));
That works.
there are tons of documents on web detailing editing of an XML. Explore them and then try something out. If you are stuck then post it here.
some ref: http://www.w3schools.com/dom/default.asp
How to modify XML data in Dom parser
http://www.mkyong.com/java/how-to-modify-xml-file-in-java-dom-parser/
http://www.drdobbs.com/jvm/easy-dom-parsing-in-java/231002580
Maybe you could use avc-binding-dom, which binds DOM nodes to your custom Java interface via annotations:
import org.w3c.dom.Node;
import net.avcompris.binding.annotation.XPath;
import net.avcompris.binding.dom.impl.DefaultDomBinder;
#Namespaces("xmlns:jr=http://jasperreports.sourceforge.net/jasperreports")
#XPath("/jr:jasperReport")
interface MyJasperReport {
#XPath("#columnCount")
int getColumnCount();
void setColumnCount(int columnCount);
#XPath("#pageWidth")
int getPageWidth();
void setPageWidth(int pageWidth);
#XPath("jr:property[#name = 'ireport.zoom']/#value")
String getZoom();
void setZoom(String zoom);
}
Node node = ... // You have to load the XML file into a DOM node.
MyJasperReport jr = new DefaultDomBinder().bind(node, MyJasperReport.class);
jr.setColumnCount(4); // previously: 2
jr.setPageWidth(1024); // previously: 520
jr.setZoom("1.45"); // previously: "1.0"
... // then save the DOM node into a XML file.