There is definitely no direct way to achieve it, at least with the available version of the available Jasper libraries. However, here is a very rude workaround that worked for us in a similar requirement. Today, I have highlighted only part of the code footer management as a sample project, and it works great.
Notes:
- Not sure if this works with complex reports (especially if the footer needs to be printed, since we manually change the value of columnFooterOffsetY). We had to create a simple report with only headers, parts, and footers.
- It is important to note that I do not recommend using this solution for complex requirements, as this can cause maintainability problems in the long run (especially if you switch to a later version of the jasperreports library in the future, which could change the logic of filling out the report).
- I used the JasperReports library version 5.0.0 for testing.
How an example is created:
- Created JRXML with iReport, with the expression printwhenexpression, the new Boolean ($ V {PAGE_NUMBER} .intValue () == 1 for the page range below.
- A custom instance of the report instance has been created that extends the JRVerticalFiller class.
The XML sample used: (add additional lines to the XML so that the report wraps over several pages)
<?xml version="1.0" encoding="UTF-8"?> <employees> <employee id="1001" name="AAA" email=" aaa@somecorp.com " salary="20500.125"/> <employee id="1002" name="BBB" email=" bbb@somecorp.com " salary="10000.500"/> <employee id="1003" name="CCC" email=" ccc@somecorp.com " salary="12275.750"/> <employee id="1004" name="DDD" email=" ddd@somecorp.com " salary="10750.750"/> </employees>
JRXML created using iReport (with print for footer):
<?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="jr_footer_display_test" pageWidth="792" pageHeight="288" orientation="Landscape" columnWidth="752" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="27ac3ae2-27da-484b-b088-b4d79aa973cc"> <property name="ireport.zoom" value="1.0"/> <property name="ireport.x" value="0"/> <property name="ireport.y" value="0"/> <queryString language="xPath"> <![CDATA[//employee]]> </queryString> <field name="email" class="java.lang.String"> <fieldDescription><![CDATA[./@email]]></fieldDescription> </field> <field name="id" class="java.lang.String"> <fieldDescription><![CDATA[./@id]]></fieldDescription> </field> <field name="name" class="java.lang.String"> <fieldDescription><![CDATA[./@name]]></fieldDescription> </field> <field name="salary" class="java.lang.String"> <fieldDescription><![CDATA[./@salary]]></fieldDescription> </field> <background> <band splitType="Stretch"/> </background> <columnHeader> <band height="50"> <staticText> <reportElement uuid="c3d42e71-672e-402f-9fbb-4889be2a269b" x="29" y="2" width="100" height="20"/> <textElement/> <text><![CDATA[ID]]></text> </staticText> <staticText> <reportElement uuid="a4c42dc4-4276-485a-b5a6-b4e6bd2bc217" x="136" y="2" width="100" height="20"/> <textElement/> <text><![CDATA[Name]]></text> </staticText> <staticText> <reportElement uuid="157e527b-7ad5-46bf-a06d-2fa0a2686b1e" x="253" y="2" width="100" height="20"/> <textElement/> <text><![CDATA[Email]]></text> </staticText> <staticText> <reportElement uuid="4d87c542-7057-4bc1-9a7e-fbd6a554f33a" x="386" y="2" width="100" height="20"/> <textElement/> <text><![CDATA[Salary]]></text> </staticText> </band> </columnHeader> <detail> <band height="21" splitType="Stretch"> <textField> <reportElement uuid="31d09543-a128-469a-be38-3d8987ba781b" x="29" y="0" width="100" height="20"/> <textElement/> <textFieldExpression><![CDATA[$F{id}]]></textFieldExpression> </textField> <textField> <reportElement uuid="ce5c11f8-68da-4efd-93fa-e1f1b5ce407f" x="136" y="0" width="100" height="20"/> <textElement/> <textFieldExpression><![CDATA[$F{name}]]></textFieldExpression> </textField> <textField> <reportElement uuid="300dcc3b-8a2a-489d-8518-7283c95b2f88" x="253" y="0" width="100" height="20"/> <textElement/> <textFieldExpression><![CDATA[$F{email}]]></textFieldExpression> </textField> <textField> <reportElement uuid="a37f2df9-2459-446d-bc47-488a336aa60e" x="386" y="0" width="100" height="20"/> <textElement/> <textFieldExpression><![CDATA[$F{salary}]]></textFieldExpression> </textField> </band> </detail> <pageFooter> <band height="40" splitType="Stretch"> <printWhenExpression><![CDATA[new Boolean($V{PAGE_NUMBER}.intValue() == 1)]]></printWhenExpression> <textField> <reportElement uuid="3d9beff7-69b8-44d9-af80-2962b9262368" x="29" y="12" width="80" height="20"/> <textElement textAlignment="Left"/> <textFieldExpression><![CDATA["Page: "+$V{PAGE_NUMBER}]]></textFieldExpression> </textField> </band> </pageFooter> </jasperReport>
Implementing a custom placeholder report: (This procedure controls the height reset logic to provide a longer range of parts from page 2)
public class CustomVerticalFiller extends JRVerticalFiller { private JRFillBand detailBand = null; private int pageNumber = -1; protected CustomVerticalFiller(JasperReportsContext jasperReportsContext, JasperReport jasperReport) throws JRException { super(jasperReportsContext, jasperReport); detailBand = detailSection.getFillBands()[0]; }
And the Java code that actually uses custom filler to export the PDF:
InputStream inputStream = new FileInputStream(new File(<my jrxml file path>)); JRDataSource dataSource = new JRXmlDataSource(new File(<my source xml file path>), "//employee"); Map parameters = new HashMap(); JasperDesign jasperDesign = JRXmlLoader.load(inputStream); JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign); CustomVerticalFiller customVerticalFiller = new CustomVerticalFiller(DefaultJasperReportsContext.getInstance(), jasperReport); JasperPrint jasperPrint = customVerticalFiller.fill(parameters, dataSource); JasperExportManager.exportReportToPdfFile(jasperPrint, <target pdf file path>);
mahahegde
source share