2009年8月11日火曜日

jasperReports detailセクションのフォントを動的に変更

フォントを動的に変更する場合は、net.sf.jasperreports.engine.JasperReportオブジェクトのgetXxxSectionメソッド等で、任意の要素を抽出してフォントを変更すればよい。

JasperReport report = JasperCompileManager.compileReport("sample.jrxml");
report.getTitle().getElementByKey("target1").setForecolor(Color.red);

この場合のjrxmlファイル記述例

<title>
<band height="10">
<staticText>
<reportElement x="0" y="0" width="100" height="20" key="target1"/>
<textElement/>
<text><![CDATA[Hello, World!]]></text>
</staticText>
</band>
</title>

ただしdetailセクションの繰り返し項目については、この方法だと任意の項目だけフォントを変更することができない。これにはパターンの数だけフォントを定義しておき、条件により使い分けることで対応できる。

この場合のjrxmlファイル記述例

<detail>
<band height="20">
<textField>
<reportElement x="0" y="0" width="20" height="20" forecolor="#000000">
<printWhenExpression><![CDATA[new Boolean($F{color}.equals("black"))]]></printWhenExpression>
</reportElement>
<textElement />
<textFieldExpression class="java.lang.String"><![CDATA[$F{name}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="0" y="0" width="20" height="20" forecolor="#ff0000">
<printWhenExpression><![CDATA[new Boolean($F{color}.equals("red"))]]></printWhenExpression>
</reportElement>
<textElement><font fontName="Arial"/></textElement>
<textFieldExpression class="java.lang.String"><![CDATA[$F{name}]]></textFieldExpression>
</textField>
</band>
</detail>