我有一个长字符串(150个字符)。我在报告中添加了text_1字符串参数,我希望在第50个字符处使用自动jasper breakline。
<textFieldExpression><![CDATA[$F{TEXT_1}]]></textFieldExpression>
示例:
我的字符串:012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
我想用JasperReports打印:
01234567890123456789012345678901234567890123456789
01234567890123456789012345678901234567890123456789
01234567890123456789012345678901234567890123456789
我想在Jasper中执行,而不是在Java中执行 请给我一个解决方案。
答案 0 :(得分:6)
有几种方法:
设置 textField 的宽度,并将 isStretchWithOverflow 属性设置为 true 。此解决方案取决于字体指标。
使用 Java 表达式。例如,您可以使用 Guava 库。在这种情况下,您应该将 import 语句添加到模板中。
在此示例中,仅使用标题频段来演示这两种解决方案。使用空数据源。
展示解决任务的两种变体。
第一个 textField 的宽度仅足以显示50个符号。借助 isStretchWithOverflow 属性,文本将被拆分为多行( textField 的高度将动态增加)。
第二个 textField 的表达式(查看 textFieldExpression )使用 Guava 库。
Joiner.on("\n").join(Splitter.fixedLength(50).split(value))
- Splitter.fixedLength(int) 方法允许我们按每个 50 字符和 Joiner.on(String) <分割字符串/ em>方法帮助我们使用换行符来连接字符串。
<?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="break_lines" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
<import value="com.google.common.base.*"/>
<parameter name="LONG_TEXT" class="java.lang.String">
<defaultValueExpression><![CDATA["012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"]]></defaultValueExpression>
</parameter>
<title>
<band height="347" splitType="Stretch">
<textField isStretchWithOverflow="true">
<reportElement x="110" y="10" width="280" height="30"/>
<textFieldExpression><![CDATA[$P{LONG_TEXT}]]></textFieldExpression>
</textField>
<textField isStretchWithOverflow="true">
<reportElement x="20" y="100" width="525" height="30"/>
<textFieldExpression><![CDATA[Joiner.on("\n").join(Splitter.fixedLength(50).split($P{LONG_TEXT}))]]></textFieldExpression>
</textField>
</band>
</title>
</jasperReport>
Jaspersoft Studio 中的输出结果将为:
150 - 字符串被分成 3 行,每行包含 50 个字符。