'How to stretch textfield in a JasperReport as per dynamic 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="tree-template" pageWidth="595" pageHeight="842" columnWidth="481" leftMargin="57" rightMargin="57" topMargin="72" bottomMargin="72">
<style name="Title" forecolor="#000000" fontName="Times New Roman" fontSize="50" isBold="false" pdfFontName="Times-Bold"/>
<style name="SubTitle" forecolor="#666666" fontName="Times New Roman" fontSize="18" isBold="false" pdfFontName="Times-Roman"/>
<style name="Column header" forecolor="#666666" fontName="Times New Roman" fontSize="14" isBold="true" pdfFontName="Times-Roman"/>
<style name="Detail" mode="Transparent" fontName="Times New Roman" pdfFontName="Times-Roman"/>
<style name="Row" mode="Transparent" fontName="Times New Roman" pdfFontName="Times-Roman">
<conditionalStyle>
<conditionExpression><![CDATA[$V{REPORT_COUNT}%2 == 0]]></conditionExpression>
<style mode="Opaque" backcolor="#F0EFEF"/>
</conditionalStyle>
</style>
<parameter name="JasperCustomSubReportLocation" class="net.sf.jasperreports.engine.JasperReport"/>
<parameter name="JasperCustomSubReportDatasource" class="net.sf.jasperreports.engine.data.JRBeanCollectionDataSource"/>
<field name="name" class="java.lang.String"/>
<field name="notes" class="java.lang.String"/>
<field name="state" class="java.lang.String"/>
<field name="project" class="com.pearson.ltg.qmo.dashboard.domain.QDashProject">
<fieldDescription><![CDATA[project]]></fieldDescription>
</field>
<field name="theme" class="java.lang.String"/>
<field name="goals" class="java.lang.String"/>
<field name="statusDetails" class="java.lang.String"/>
<field name="mitigation" class="java.lang.String"/>
<field name="status" class="java.lang.String"/>
<field name="releaseDate" class="java.util.Calendar"/>
<group name="Group1">
<groupExpression><![CDATA[(int)($V{REPORT_COUNT}/15)]]></groupExpression>
</group>
<group name="Group2">
<groupExpression><![CDATA[(int)($V{REPORT_COUNT}/5)]]></groupExpression>
<groupHeader>
<band height="10"/>
</groupHeader>
</group>
<title>
<band height="58" splitType="Stretch">
<staticText>
<reportElement style="Title" x="4" y="0" width="477" height="56"/>
<textElement>
<font size="48" isBold="false"/>
</textElement>
<text><![CDATA[Release Details]]></text>
</staticText>
</band>
</title>
<detail>
<band height="189" splitType="Stretch">
<frame>
<reportElement mode="Opaque" x="0" y="7" width="481" height="13" forecolor="#D0B48E" backcolor="#9DB1B8"/>
</frame>
<textField>
<reportElement x="279" y="7" width="202" height="13"/>
<textElement/>
<textFieldExpression class="java.lang.String"><![CDATA[$F{name}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="79" y="7" width="100" height="13"/>
<textElement/>
<textFieldExpression class="java.lang.String"><![CDATA[$F{project}.getName()]]></textFieldExpression>
</textField>
<staticText>
<reportElement x="2" y="7" width="79" height="13"/>
<textElement>
<font isBold="true"/>
</textElement>
<text><![CDATA[Platform : ]]></text>
</staticText>
<staticText>
<reportElement x="179" y="7" width="100" height="13"/>
<textElement>
<font size="10" isBold="true" isItalic="false"/>
</textElement>
<text><![CDATA[Release Name :]]></text>
</staticText>
<staticText>
<reportElement x="0" y="20" width="47" height="20"/>
<textElement>
<font isBold="true"/>
</textElement>
<text><![CDATA[Status : ]]></text>
</staticText>
<textField>
<reportElement x="79" y="20" width="100" height="20"/>
<textElement/>
<textFieldExpression class="java.lang.String"><![CDATA[$F{status}]]></textFieldExpression>
</textField>
<staticText>
<reportElement x="0" y="40" width="79" height="20"/>
<textElement>
<font isBold="true"/>
</textElement>
<text><![CDATA[Release Date: ]]></text>
</staticText>
<staticText>
<reportElement x="0" y="60" width="181" height="20"/>
<textElement>
<font isBold="true"/>
</textElement>
<text><![CDATA[Release Goals]]></text>
</staticText>
##want this field to auto stretch as per content##
<textField isStretchWithOverflow="true" isBlankWhenNull="true">
<reportElement positionType="Float" stretchType="RelativeToTallestObject" x="0" y="80" width="463" height="20"/>
<textElement>
<font size="10"/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA[$F{goals}==null ? "Not Defined":$F{goals}]]></textFieldExpression>
</textField>
##want this field to auto stretch as per content##
<staticText>
<reportElement stretchType="RelativeToTallestObject" x="0" y="100" width="98" height="20"/>
<textElement>
<font isBold="true"/>
</textElement>
<text><![CDATA[Status Details]]></text>
</staticText>
<textField isStretchWithOverflow="true">
<reportElement stretchType="RelativeToTallestObject" x="2" y="120" width="463" height="20"/>
<textElement/>
<textFieldExpression class="java.lang.String"><![CDATA[$F{statusDetails}==null ? "Not Defined":$F{statusDetails}]]></textFieldExpression>
</textField>
<staticText>
<reportElement stretchType="RelativeToTallestObject" x="0" y="140" width="98" height="20"/>
<textElement>
<font isBold="true"/>
</textElement>
<text><![CDATA[Risk Mitigation]]></text>
</staticText>
<textField>
<reportElement stretchType="RelativeToTallestObject" x="18" y="160" width="463" height="20"/>
<textElement/>
<textFieldExpression class="java.lang.String"><![CDATA[$F{mitigation}==null?"Not Defined":$F{mitigation}]]></textFieldExpression>
</textField>
<textField>
<reportElement stretchType="RelativeToTallestObject" x="79" y="40" width="100" height="20"/>
<textElement/>
<textFieldExpression class="java.lang.String"><![CDATA[new SimpleDateFormat("MMM dd,yyyy").format($F{releaseDate}.getTime())]]></textFieldExpression>
</textField>
<line>
<reportElement x="0" y="180" width="481" height="1"/>
</line>
</band>
</detail>
<columnFooter>
<band height="12" splitType="Stretch"/>
</columnFooter>
<pageFooter>
<band height="13" splitType="Stretch">
<frame>
<reportElement mode="Opaque" x="0" y="0" width="477" height="13" forecolor="#D0B48E" backcolor="#9DB1B8"/>
<textField pattern="EEEEE dd MMMMM yyyy">
<reportElement style="Column header" x="2" y="0" width="197" height="13" forecolor="#FFFFFF"/>
<textElement verticalAlignment="Middle">
<font size="10" isBold="false"/>
</textElement>
<textFieldExpression class="java.util.Date"><![CDATA[new java.util.Date()]]></textFieldExpression>
</textField>
<textField evaluationTime="Report">
<reportElement style="Column header" x="450" y="0" width="27" height="13" forecolor="#FFFFFF"/>
<textElement verticalAlignment="Middle">
<font size="10" isBold="false"/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA[" " + $V{PAGE_NUMBER}]]></textFieldExpression>
</textField>
<textField>
<reportElement style="Column header" x="370" y="0" width="80" height="13" forecolor="#FFFFFF"/>
<textElement textAlignment="Right" verticalAlignment="Middle">
<font size="10" isBold="false"/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA["Page "+$V{PAGE_NUMBER}+" of"]]></textFieldExpression>
</textField>
</frame>
</band>
</pageFooter>
</jasperReport>
Solution 1:[1]
Just add the isStretchWithOverflow="true"
to the textField that you want as an element.
<textField isStretchWithOverflow="true">
<reportElement x="279" y="7" width="202" height="13"/>
<textElement/>
<textFieldExpression class="java.lang.String"><![CDATA[$F{name}]]></textFieldExpression>
</textField>
Solution 2:[2]
- Click on the particular textfield in iReport.
- On the right side, see TextField properties.
- Check the option "STRETCH WITH OVERFLOW".
It worked in my case.
Solution 3:[3]
Got the solution. Modified all the static text fields and all the elements properties to positionType="Float"
.
Solution 4:[4]
If you are using Jaspersoft Studio, click on the text field you want to change, navigate to its properties, enter the Text Field tab and change Text Adjust to StretchHeight
(default is CutText
). Also, if your text field is in the frame, you should set its Position Type to Float
Solution 5:[5]
The textAdjust="StretchHeight"
with positionType="Float"
solves the growth problem inside a field, but in a list-like layout (but you don't want to make a list) the neighboring fields stay in place.
I found a solution with frames by trial and error.
Create a frame with <frame><reportElement positionType="Float" .../> ... </frame>
around the 2 fields and the static text. You can also use the drag and drop functition in Jaspersoft Studio.
Solution 6:[6]
The field can auto stretch with overflow, but it goes down (kinda word wrap) instead of increasing width. In PDF documents that option you look out for, would be of little or no use.
Check this other thread for further info Dynamic column cell width
EDIT Also check and include jasperreports fonts extension. Maybe it could help on a flawless deploy without OS fonts' issues.
Solution 7:[7]
You can add attribute isStretchWithOverflow set is true
<textField isStretchWithOverflow="true">
Solution 8:[8]
[Applicable only to Jasper Table] select the Text Field present inside a column and select 1. Position Type: Fix relative to Top 2. Stretch Type: Relative to Band Height 3. Stretch with Overflow: true Apply the same to all other columns Now, when one of the columns grow vertically, then other fields will be aligned center automatically!! Result below
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow