Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JasperReport - wrap text to show long text in textfield

I am using jasper report as reporting tool in my application. And I am wondering how can i wrap the long text by expanding the reportElement dynamically into vertical direction ( expanding the row size, not column width). Or Is there any way to achieve this? My approach below is truncating the long text "Some very long name". Can you please give me some suggestions?

Output :

enter image description here

import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;  import net.sf.jasperreports.engine.JasperCompileManager; import net.sf.jasperreports.engine.JasperFillManager; import net.sf.jasperreports.engine.JasperPrint; import net.sf.jasperreports.engine.JasperReport; import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; import net.sf.jasperreports.engine.design.JasperDesign; import net.sf.jasperreports.engine.xml.JRXmlLoader; import net.sf.jasperreports.view.JasperViewer;  public class JrUtils {     public static void showJrReport(List objectList, String fileName, String title, Map parameters) {         try {              File f = new File(fileName);             JasperDesign jasperDesign = JRXmlLoader.load(f.getAbsolutePath());             JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(objectList);             JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);             JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, ds);             JasperViewer jv = new JasperViewer(jasperPrint, false);             jv.setTitle(title);             jv.setVisible(true);          } catch (Exception e) {             e.printStackTrace();          }     }      public static void main(String[] args) {         List<Person> pList = new ArrayList<Person>();          Person p1 = new Person();         p1.setPersonName("Some Name ");         p1.setAddress("Nepal - Address Fits Here");          Person p2 = new Person();         p2.setPersonName("Some very long name");         p2.setAddress("Nepal - Address Fits Here");          pList.add(p1);         pList.add(p2);          showJrReport(pList, "testReport.jrxml", "Test Report", new HashMap<Object, Object>());     }  } 

Jasper Report JrXML file - testReport.jrxml :

<?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="report name" pageWidth="250" pageHeight="400" columnWidth="210" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">     <property name="ireport.zoom" value="2.0"/>     <property name="ireport.x" value="0"/>     <property name="ireport.y" value="0"/>     <field name="personName" class="java.lang.String"/>     <field name="address" class="java.lang.String"/>     <columnHeader>         <band height="23" splitType="Stretch">             <rectangle>                 <reportElement x="0" y="0" width="88" height="23"/>             </rectangle>             <rectangle>                 <reportElement x="88" y="0" width="122" height="23"/>             </rectangle>             <staticText>                 <reportElement x="0" y="0" width="88" height="23"/>                 <textElement textAlignment="Center" verticalAlignment="Middle"/>                 <text><![CDATA[Name]]></text>             </staticText>             <staticText>                 <reportElement x="88" y="0" width="122" height="23"/>                 <textElement textAlignment="Center" verticalAlignment="Middle"/>                 <text><![CDATA[Address]]></text>             </staticText>         </band>     </columnHeader>     <detail>         <band height="21" splitType="Stretch">             <rectangle>                 <reportElement x="0" y="0" width="88" height="21"/>             </rectangle>             <textField>                 <reportElement x="0" y="0" width="88" height="21"/>                 <textElement verticalAlignment="Middle"/>                 <textFieldExpression><![CDATA[$F{personName}]]></textFieldExpression>             </textField>             <rectangle>                 <reportElement x="88" y="0" width="122" height="21"/>             </rectangle>             <textField>                 <reportElement x="88" y="0" width="122" height="21"/>                 <textElement verticalAlignment="Middle"/>                 <textFieldExpression><![CDATA[$F{address}]]></textFieldExpression>             </textField>         </band>     </detail> </jasperReport> 
like image 968
gtiwari333 Avatar asked May 17 '12 07:05

gtiwari333


People also ask

How do you stretch a text field in a Jasper report as per dynamic content?

Click on the particular textfield in iReport. On the right side, see TextField properties. Check the option "STRETCH WITH OVERFLOW".

How do I wrap text in Jasper report?

Go to the Text Field Properties then set Text Adjust to StretchHeight . Highly active question.

How do you make TextField bold for certain words?

Make sure that 'Styled text' is enabled for the text field and put this in the field expression. The pdfFontName can be whatever you like. If you are making text bold that is already in a string be sure to escape the above quotes with a backslash or use single quotes.


1 Answers

I found the answer myself :

I did some extra research about the properties of textField and rectangle components. And found that I need to set the following properties.

For rectangle :

        <rectangle>             <reportElement stretchType="RelativeToBandHeight" ... />         </rectangle> 

For textField :

        <textField isStretchWithOverflow="true">             ...         </textField> 

Output as expected :

enter image description here

The <detail> ...</detail> section after correction :

<detail>         <band height="21" splitType="Stretch">             <rectangle>                 <reportElement stretchType="RelativeToBandHeight" x="0" y="0" width="88" height="21"/>             </rectangle>             <textField isStretchWithOverflow="true">                 <reportElement x="2" y="0" width="84" height="21"/>                 <textElement verticalAlignment="Middle"/>                 <textFieldExpression><![CDATA[$F{personName}]]></textFieldExpression>             </textField>             <rectangle>                 <reportElement stretchType="RelativeToBandHeight" x="88" y="0" width="122" height="21"/>             </rectangle>             <textField isStretchWithOverflow="true">                 <reportElement x="90" y="0" width="118" height="21"/>                 <textElement verticalAlignment="Middle"/>                 <textFieldExpression><![CDATA[$F{address}]]></textFieldExpression>             </textField>         </band>     </detail> 

UPDATE

You can also set property net.sf.jasperreports.print.keep.full.text to true to achieve that across your all reports.

like image 116
gtiwari333 Avatar answered Sep 21 '22 03:09

gtiwari333