目前,当文本字段中的内容太长时,我使用属性 isStretchWithOverflow 来打破行。有用。但我想知道如何确定它打破线条的方式。
以下是 jrxml 文件的摘要:
<textField isStretchWithOverflow="true">
<reportElement positionType="Float" width="150" height="20"/>
<box leftPadding="15">
</box>
<textFieldExpression><![CDATA[$F{content}]]></textFieldExpression>
</textField>
对于像
这样的内容oh my god test="longstring" abcdefg hijk
我希望“longstring”被视为一个词。所以我的想象输出是
oh my god test=
"longstring" abcdefg
hijk
但实际输出是
oh my god test="
longstring" abcdefg
hijk
另一个问题是类似的
原始内容是
abc.def/hij/k.lmnopqrstu
我想要
abc.def/
hij/k.
lmnopqrstu
但实际输出是
abc.
def/hij/k.
lmnopqrstu
符合“/”
时不会破坏该行有什么方法可以做我想做的事吗?
答案 0 :(得分:1)
net.sf.jasperreports.engine.fill.TextMeasurer实现(net.sf.jasperreports.engine.fill.JRMeasuredText接口)类使用由私有RuleBasedBreakIterator类实现的java.text.BreakIterator接口。 RuleBasedBreakIterator读取随JDK提供的文件,该文件定义要在其上执行换行符的字符。由于RuleBasedBreakIterator类是私有的,我没有找到一种简单的方法来更改默认行为。通过修改以下属性,可以使用备用实现替换net.sf.jasperreports.engine.fill.TextMeasurer:
#Default text measurer
net.sf.jasperreports.text.measurer.factory=default
net.sf.jasperreports.text.measurer.factory.default=net.sf.jasperreports.engine.fill.TextMeasurerFactory
除非您可以使用自定义项在JDK中实现强大的分解逻辑,否则这在实践中可能是不可取的。
对某些人来说,另一种选择可能是使用不是ICU4J的IBM JDK,它提供了一个可自定义的RuleBasedBreakIterator实现,如下所述:
http://sujitpal.blogspot.com/2008/05/tokenizing-text-with-icu4js.html