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

「ロングストリング」を言葉にしたいと思います。だから私の想像の出力は

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 で堅牢な破壊ロジックをカスタマイズして実装できない限り、これは実際にはお勧めできません。

一部の代替手段は、ここで説明されているように、RuleBasedBreakIterator のカスタマイズ可能な実装を提供する ICU4J ではない IBM JDK を使用することです。

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

于 2015-07-06T12:35:22.403 に答える