JasperReports textField's textAdjust
last modified February 21, 2024
In this article we cover textField's textAdjust attribute in JasperReports library.
JasperReports is an open-source reporting library. It can create reports in various formats including PDF, HTML, XLS, or CSV. JasperReports creates page-oriented, ready-to-print documents.
The textAdjust attribute in JasperReports is used to control the
behavior of a text field when the content is too large for the defined
dimensions. It was introduced in JasperReports Library 7.5.0, replacing the
deprecated isStretchWithOverflow attribute.
It can take the following values:
StretchHeight- allows the text field to expand vertically if the content overflowsCutText- cuts off the text if it's longer than the width of the fieldScaleFont- scales the font size to fit the text within the field
Example
The next example demonstrates all three options.
<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN"
"http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
<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" topMargin="20" bottomMargin="20">
<style name="defFont" isDefault="true" vAlign="Top" hAlign="Left"/>
<parameter name="text"/>
<detail>
<band height="330">
<rectangle>
<reportElement x="3" y="3" width="490" height="85"/>
</rectangle>
<textField textAdjust="CutText">
<reportElement x="5" y="5" width="490" height="80"/>
<textFieldExpression>
<![CDATA[$P{text}]]>
</textFieldExpression>
</textField>
<rectangle>
<reportElement x="3" y="90" width="490" height="105"/>
</rectangle>
<textField textAdjust="StretchHeight">
<reportElement x="5" y="95" width="490" height="80"/>
<textFieldExpression>
<![CDATA[$P{text}]]>
</textFieldExpression>
</textField>
<rectangle>
<reportElement x="3" y="200" width="490" height="85"/>
</rectangle>
<textField textAdjust="ScaleFont">
<reportElement x="5" y="205" width="490" height="80"/>
<textFieldExpression>
<![CDATA[$P{text}]]>
</textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
We have three text fields in the report.
<parameter name="text"/>
The larger text is passed to the report via the name parameter.
<textField textAdjust="CutText">
<reportElement x="5" y="5" width="490" height="80"/>
<textFieldExpression>
<![CDATA[$P{text}]]>
</textFieldExpression>
</textField>
In this textField, we set the textAdjust property
to CutText value.
<rectangle>
<reportElement x="3" y="90" width="490" height="105"/>
</rectangle>
To understand where the text fields begin and end, we place rectangles around them.
package com.zetcode
@Grab(group='net.sf.jasperreports', module='jasperreports', version='6.21.0')
@Grab(group='com.github.librepdf', module='openpdf', version='1.3.39')
import net.sf.jasperreports.engine.JasperCompileManager
import net.sf.jasperreports.engine.JasperFillManager
import net.sf.jasperreports.engine.JasperExportManager
import net.sf.jasperreports.engine.JREmptyDataSource
def text = '''
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse id justo
lacus. Nullam semper sed nulla finibus semper. Sed tristique ipsum et
ullamcorper ullamcorper. In interdum sapien eu scelerisque faucibus. Sed nec ex
at tortor varius aliquet. Donec cursus lorem massa, faucibus auctor neque
dignissim id. Quisque eu ultrices nisl, et commodo ligula. Phasellus neque nunc,
interdum quis lectus a, cursus egestas tellus. Fusce dictum ligula sed porta
scelerisque.
'''
def xmlFile = 'report.xml'
def jreport = JasperCompileManager.compileReport(xmlFile)
def params = ['text': text]
def jrPrint = JasperFillManager.fillReport(jreport, params,
new JREmptyDataSource())
JasperExportManager.exportReportToPdfFile(jrPrint, 'report.pdf')
This Groovy file builds the report. We define the text and passed it via a
text parameter to the report.
In this article we have worked with the textField's textAdjust
attribute.