3

目前,当文本字段中的内容太长时,我使用属性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

遇到“/”不换行

有什么办法可以做我想做的事吗?

4

1 回答 1

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 中实现健壮的中断逻辑,否则这在实践中可能并不可取。

对于某些人来说,另一种选择可能是使用 IBM JDK,它不提供 ICU4J,它提供了 RuleBasedBreakIterator 的可定制实现,如下所述:

http://sujitpal.blogspot.com/2008/05/tokenizing-text-with-icu4js.html

于 2015-07-06T12:35:22.403 回答