8
<style name="blueStyle" >
    <conditionalStyle>
        <conditionExpression><![CDATA[($P{INDIRIZZO}).length()>30 ?  Boolean.TRUE : Boolean.FALSE]]></conditionExpression>
        <style  style="blueStyle"  fontSize="3"/>
    </conditionalStyle>
</style>
<parameter name="INDIRIZZO" class="java.lang.String"/>

[...]

<textField>
    <reportElement x="178" y="94" width="157" height="17"/>
    <textElement>
        <font fontName="Arial" size="9"/>
    </textElement>
    <textFieldExpression class="java.lang.String"><![CDATA[$P{INDIRIZZO}]]></textFieldExpression>
</textField>

INDIRIZZOの長さが30を超える場合にフォントを縮小したい...

しかし、これはうまくいきませんでした...。

4

3 に答える 3

12

カスタムスタイルをtextFieldに適用するのを忘れました。

正しいスニペットは次のようになります。

    <textField>
        <reportElement style="blueStyle" x="178" y="94" width="157" height="17"/>
        <textElement>
            <font fontName="Arial" size="9"/>
        </textElement>
        <textFieldExpression class="java.lang.String"><![CDATA[$P{INDIRIZZO}]]></textFieldExpression>
    </textField>

私の作業サンプル:

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="conditional_styl" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
    <style name="style1" forecolor="#66FF66" backcolor="#009966">
        <conditionalStyle>
            <conditionExpression><![CDATA[$P{parameter1}.length() < 2]]></conditionExpression>
            <style forecolor="#FFCC00"/>
        </conditionalStyle>
    </style>
    <parameter name="parameter1" class="java.lang.String"/>
    <queryString>
        <![CDATA[SELECT DOCUMENTID FROM POSITIONS]]>
    </queryString>
    <field name="DOCUMENTID" class="java.lang.Integer"/>
    <detail>
        <band height="20" splitType="Stretch">
            <textField>
                <reportElement style="style1" x="0" y="0" width="100" height="20"/>
                <textElement/>
                <textFieldExpression><![CDATA[$F{DOCUMENTID}]]></textFieldExpression>
            </textField>
        </band>
    </detail>
</jasperReport>

fontSizeを変更した別の作業サンプル:

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="conditional_styl" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
    <style name="style1" fontSize="6">
        <conditionalStyle>
            <conditionExpression><![CDATA[$F{DOCUMENTID} % 2 == 0]]></conditionExpression>
            <style fontSize="8"/>
        </conditionalStyle>
        <conditionalStyle>
            <conditionExpression><![CDATA[$F{DOCUMENTID} % 3 == 0]]></conditionExpression>
            <style fontSize="10"/>
        </conditionalStyle>
        <conditionalStyle>
            <conditionExpression><![CDATA[$F{DOCUMENTID} % 5 ==0]]></conditionExpression>
            <style fontSize="12"/>
        </conditionalStyle>
        <conditionalStyle>
            <conditionExpression><![CDATA[$F{DOCUMENTID} % 7 ==0]]></conditionExpression>
            <style fontSize="14"/>
        </conditionalStyle>
        <conditionalStyle>
            <conditionExpression><![CDATA[$F{DOCUMENTID} % 11 ==0]]></conditionExpression>
            <style fontSize="16"/>
        </conditionalStyle>
        <conditionalStyle>
            <conditionExpression><![CDATA[$F{DOCUMENTID} % 13 ==0]]></conditionExpression>
            <style fontSize="18"/>
        </conditionalStyle>
    </style>
    <queryString>
        <![CDATA[SELECT distinct DOCUMENTID FROM POSITIONS]]>
    </queryString>
    <field name="DOCUMENTID" class="java.lang.Integer"/>
    <detail>
        <band height="34" splitType="Stretch">
            <textField>
                <reportElement style="style1" x="0" y="0" width="100" height="34"/>
                <textElement/>
                <textFieldExpression><![CDATA[$F{DOCUMENTID}]]></textFieldExpression>
            </textField>
        </band>
    </detail>
</jasperReport>
于 2012-05-24T13:38:14.310 に答える
5

スタイル付きテキストを使用して、テキストサイズを動的に変更できるようにすることもできます。textElementマークアップをに設定してから、textFieldExpressionのコンテンツをstyledラップする<style>タグを追加します。

<textField>
    <reportElement x="10" y="10" width="150" height="13" />
    <textElement markup="styled"/>
    <textFieldExpression>
        <![CDATA["<style size=\"" + $V{fontSize} + "\">" + $F{name} + "</style>"]]>
    </textFieldExpression>
</textField>

この場合、テキストサイズはIntegerレポートで定義されている変数によって指定されますが、別のフィールドまたはレポートパラメータからも同様に取得できます。

<variable name="fontSize" class="java.lang.Integer">
    <variableExpression><![CDATA[12]]></variableExpression>
</variable>

これにより、フィールドの長さに応じてテキストサイズを変更するなど、いくつかの巧妙なことができます。

<variable name="fontSize" class="java.lang.Integer">
    <variableExpression><![CDATA[$F{firstName}.length()]]></variableExpression>
</variable>

画像の下にある名前のフォントサイズは、名前の長さに基づいていることがわかります。

動的テキストサイズ

于 2018-06-12T08:00:15.200 に答える
0

私はiReport2.0.2を使用しており、上記を切り取って貼り付けて機能させることはできますが、自分のバージョンを最初から試しても機能しません。

私がやったことは、式のときに反対の印刷で互いにオーバーレイする2つのフィールドを作成することです。ボックスの長さを考えると、57文字が10ポイントのフォントで正しく表示されると判断しました。

式が次のようになってしまったときの私の結果の印刷:

Box 1 ($F{DATA1}.length() >= 58 ? Boolean.TRUE : Boolean.FALSE)  (font size is lowered)
Box 2 ($F{DATA1}.length() < 58 ? Boolean.TRUE : Boolean.FALSE)   (10 pt font size)

これはエレガントではないことは知っていますが、機能します。スタイルを機能させようとして失敗した数日後、私は他のオプションを検討し、これに落ち着きました。

スタイルがあなたのために働くことを願っていますが、そうでなければこれは良い計画Bかもしれません。

于 2012-08-22T15:33:52.610 に答える