【问题标题】:iReport issue with isStretchWithOverflowisStretchWithOverflow 的 iReport 问题
【发布时间】:2012-08-29 09:28:34
【问题描述】:

目前我使用 isStretchWithOverflow 属性在文本字段中的内容太长时换行。有用。但我想知道如何确定它断线的方式。

下面是我的jrxml文件的sn-p:

<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

遇到“/”不换行

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

【问题讨论】:

  • 在我看来,net.sf.jasperreports.engine.fill.TextMeasurer 实现(net .sf.jasperreports.engine.fill.JRMeasuredText 接口)类确定此行为。你可以看一下它的源码

标签: jasper-reports ireport


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-26
    相关资源
    最近更新 更多