isStretchWithOverflow的iReport问题

时间:2012-08-29 09:28:34

标签: jasper-reports ireport

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

符合“/”

时不会破坏该行

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

1 个答案:

答案 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