How to stretch textfield in a JasperReport as per

2019-01-23 06:25发布

问题:

<?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>

回答1:

Got the solution. Modified all the static text fields and all the elements properties to positionType="Float".



回答2:

  1. click on the particular textfield in ireport.
  2. on the right side, see TextField properties.
  3. Check the option "STRETCH WITH OVERFLOW. it worked in my case.


回答3:

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>


回答4:

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.