I am working on a grails project that use jasper plugin for downloading a document in pdf and doc format.
I have several jasper subreports and using these subreports in dynamic jasper to download the document in pdf and docx format. I am using dynamic jasper report because the positions of jasper subreport may vary.
My jasper sub report have a title and a detail band.
output is
Now my problem is a border. A border is required like:
I tried to set rectangle, frame but all failed because two bands did not share one palate(component).
My requirement is a border via jasper report or via dynamic jasper. I have no idea how to set the border.
EDIT........................................................................
I also tried to set the border using a frame and rectangle via dynamic jasper code and the output is:
frame and rectangle not covering whole subreport. Here is my code:
JRDesignRectangle rectangle = new JRDesignRectangle();
//JRDesignFrame rectangle = new JRDesignFrame();
rectangle.setX(subReport.getX());
rectangle.setY(subReport.getY());
rectangle.setHeight(subReport.getHeight());
rectangle.setWidth(subReport.getWidth());
rectangle.setPositionType(PositionTypeEnum.FLOAT);
band.addElement(rectangle);
If you are using jasper report plugin, you can open the JRXML file and say something like
<box>
<topPen lineWidth="1.0"/>
<leftPen lineWidth="1.0"/>
<bottomPen lineWidth="1.0"/>
<rightPen lineWidth="1.0"/>
</box>
Jasper reports come with an excellent designer called 'IReport Designer
'. You can use concept
of frames
in IReport designer and put your sub-report inside the frame and then apply the border
properties on the frame itself. You can also find BorderAroundTable useful. I would
definitely recommend these links as well.
How to add border to a subreport
Frame Around Two Subreports
Border In Jasper Report
Let us know if this solution works for you.
If it can work for subreport having summary and page header, then it can help your case as well.
Editing and adding master report and subreport code having border
Master Report Source 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="testborder" 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"/>
<background>
<band splitType="Stretch"/>
</background>
<detail>
<band height="421" splitType="Stretch">
<subreport>
<reportElement x="25" y="148" width="200" height="100"/>
<dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.JREmptyDataSource()]]></dataSourceExpression>
<subreportExpression><![CDATA["C:\\jaspersamples\\testborder_subreport1.jasper"]]></subreportExpression>
</subreport>
<frame>
<reportElement x="45" y="119" width="390" height="176"/>
<box>
<topPen lineWidth="2.0" lineStyle="Solid"/>
<leftPen lineWidth="2.0" lineStyle="Solid"/>
<bottomPen lineWidth="2.0" lineStyle="Solid"/>
<rightPen lineWidth="2.0" lineStyle="Solid"/>
</box>
</frame>
</band>
</detail>
</jasperReport>
Subreport source 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="testborder_subreport1" language="groovy" pageWidth="802" pageHeight="555" orientation="Landscape" whenNoDataType="AllSectionsNoDetail" columnWidth="802" 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="0"/>
<background>
<band splitType="Stretch"/>
</background>
<pageHeader>
<band height="29" splitType="Stretch">
<staticText>
<reportElement x="317" y="5" width="100" height="20"/>
<textElement/>
<text><![CDATA[HELLO TEST]]></text>
</staticText>
</band>
</pageHeader>
<summary>
<band height="29" splitType="Stretch">
<staticText>
<reportElement x="317" y="0" width="100" height="20"/>
<textElement/>
<text><![CDATA[i am testing BORDER]]></text>
</staticText>
</band>
</summary>
</jasperReport>
The output is somewhat like this
You may enclose your subreport into a frame using IReport or Jaspersoft Studio.
The steps of Jaspersoft Studio:
- Select main report and open Outline View
- Find subreport element and right click it.
- Select Enclose into Frame.
- Open Frame element's Properties.
- Go to Borders Tab and select the border choice that you want.