如何在JasperReports中使用参数设置lineColor属性
解决JasperReports中用参数/变量统一管理十六进制颜色的问题
你的问题核心在于JasperReports的lineColor属性要求值为java.awt.Color对象,而非字符串类型,直接传入十六进制字符串参数会被识别为无效值,导致颜色不生效。下面给出两种可行的解决方案:
方案1:定义Color类型的参数(推荐)
把参数类型改为java.awt.Color,通过Color.decode()方法将十六进制字符串转为Color对象:
<parameter name="COMPANY_BRANDED_COLOUR_DARK_MAIN_BLUE" class="java.awt.Color"> <defaultValueExpression><![CDATA[java.awt.Color.decode("#215995")]]></defaultValueExpression> </parameter>
然后直接在lineColor中引用参数:
<box> <pen lineWidth="0.25" lineColor="$P{COMPANY_BRANDED_COLOUR_DARK_MAIN_BLUE}"/> <topPen lineWidth="0.25" lineStyle="Solid" lineColor="$P{COMPANY_BRANDED_COLOUR_DARK_MAIN_BLUE}"/> <leftPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/> <bottomPen lineWidth="0.25" lineStyle="Solid" lineColor="$P{COMPANY_BRANDED_COLOUR_DARK_MAIN_BLUE}"/> <rightPen lineWidth="0.25" lineStyle="Solid" lineColor="$P{COMPANY_BRANDED_COLOUR_DARK_MAIN_BLUE}"/> </box>
方案2:保留字符串参数,在属性中使用表达式转换
如果必须保留字符串类型的参数,可以在lineColor属性中直接写转换表达式:
首先参数定义不变:
<parameter name="COMPANY_BRANDED_COLOUR_DARK_MAIN_BLUE" class="java.lang.String"> <defaultValueExpression><![CDATA["#215995"]]></defaultValueExpression> </parameter>
然后修改lineColor的写法:
<box> <pen lineWidth="0.25" lineColor="java.awt.Color.decode($P{COMPANY_BRANDED_COLOUR_DARK_MAIN_BLUE})"/> <topPen lineWidth="0.25" lineStyle="Solid" lineColor="java.awt.Color.decode($P{COMPANY_BRANDED_COLOUR_DARK_MAIN_BLUE})"/> <leftPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/> <bottomPen lineWidth="0.25" lineStyle="Solid" lineColor="java.awt.Color.decode($P{COMPANY_BRANDED_COLOUR_DARK_MAIN_BLUE})"/> <rightPen lineWidth="0.25" lineStyle="Solid" lineColor="java.awt.Color.decode($P{COMPANY_BRANDED_COLOUR_DARK_MAIN_BLUE})"/> </box>
这种方式会在渲染时动态把字符串转为Color对象,但可读性和性能略逊于方案1。
另外注意:如果使用JasperStudio设计报表,确保参数的类路径正确加载,避免因找不到java.awt.Color类导致的报错。
内容的提问来源于stack exchange,提问作者Erhan
相关产品推荐
相关产品推荐

