我有一个长字符串(150 个字符)。我将 text_1 字符串参数放在报告中,我希望在第 50 个字符处自动 jasper 分界线。
<textFieldExpression><![CDATA[$F{TEXT_1}]]></textFieldExpression>
例子:
My string: 012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
我想用 JasperReports 打印:
01234567890123456789012345678901234567890123456789
01234567890123456789012345678901234567890123456789
01234567890123456789012345678901234567890123456789
我想在Jasper中执行,而不是在Java中执行 请给我一个解决方案。
最佳答案
方法
有几种方法:
设置 textField 的宽度并将 isStretchWithOverflow 属性设置为 true。此解决方案取决于字体指标。
使用 Java 表达式。例如,您可以使用 Guava 库。在这种情况下,您应该向模板添加 import 语句。
例子
在这个例子中,只有Title band 用于演示这两种解决方案。使用空数据源。
报告模板
演示解决任务的两种变体。
第一个 textField 的宽度只够显示 50 个符号。借助 isStretchWithOverflow 属性,文本将被分成几行(textField 的高度将动态增加)。
第二个 textField 的表达式(查看 textFieldExpression)使用 Guava 库。
Joiner.on("\n").join(Splitter.fixedLength(50).split(value))
- Splitter.fixedLength(int) 方法允许我们拆分字符串每 50 个字符和 Joiner.on(String) 方法帮助我们用换行符连接字符串。
<?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 个字符。
关于java - 碧 Jade 报告 : How to break lines base on a character count,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40134318/