JasperReports: изменение размера шрифта по значению параметра
<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>
Я хочу уменьшить шрифт, когда адрес длина > 30...
но это не сработало....
3 ответов
вы забыли применить свой собственный стиль к 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>
вы также можете использовать стилизованный текст, чтобы размер текста в динамически изменяется. Установите разметку textElement в styled
а затем добавьте wrap a <style>
тег вокруг содержимого textFieldExpression.
<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>
вы можете видеть, что размер шрифта имен ниже изображений основан на длине имени:
Я использую iReport 2.0.2 и хотя я могу вырезать и вставить выше, и заставить его работать, когда я пытаюсь свою собственную версию с нуля он не работает.
в итоге я создал два поля, накладывающиеся друг на друга с противоположной печатью, когда выражения. Я определил, что, учитывая длину поля, 57 символов будут отображаться правильно при шрифте 10 pt.
моя результирующая печать, когда выражения заканчиваются как это:
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)
Я знаю, что это не элегантно, но это работает. После нескольких дней попыток заставить стиль работать и неудач, я посмотрел на другие варианты и остановился на этом.
Я надеюсь, что стиль работает на вас, но если нет, это может быть хороший план Б.