JasperReports:如何基于字符数来打破行

时间:2016-10-19 14:29:25

标签: java jasper-reports line-breaks

我有一个长字符串(150个字符)。我在报告中添加了text_1字符串参数,我希望在第50个字符处使用自动jasper breakline。

<textFieldExpression><![CDATA[$F{TEXT_1}]]></textFieldExpression>

示例:

我的字符串:012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789

我想用JasperReports打印:

01234567890123456789012345678901234567890123456789
01234567890123456789012345678901234567890123456789
01234567890123456789012345678901234567890123456789

我想在Jasper中执行,而不是在Java中执行 请给我一个解决方案。

1 个答案:

答案 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 中的输出结果将为:

The result in JSS

150 - 字符串被分成 3 行,每行包含 50 个字符。