文档章节

jasperReport+iReport中conditionStyle的使用

漫天的沙
 漫天的沙
发布于 2015/10/23 19:24
字数 1091
阅读 1799
收藏 5

    在报表生成中,很经常会有这样的需求,比如状态为同意的,字体颜色为绿色,拒绝的字体颜色为红色。这时候如果想在表达式上通过edit Expression来控制是做不到的,目前探索到的有以下两种方式:

1、采用PrintWhenExpression的方式

    采用该方式,通过在同个位置重叠放置多个一样的元素(除了字体一样),然后通过PrintWhenExpression表达式来控制是否显示,比如$P{text}.equals( "运行" )字体颜色为绿色,$P{text}.equals( "停止" )字体颜色为红色,来根据文本值控制元素是否打印显示,XML如下:

<textField>
				<reportElement x="0" y="0" width="555" height="61" uuid="01553907-42d1-4a7b-9b59-c5d34affd2bf">
					<printWhenExpression><![CDATA[$P{text}.equals( "关闭" )]]></printWhenExpression>
				</reportElement>
				<textElement textAlignment="Center" verticalAlignment="Middle">
					<font size="15" pdfFontName="STSong-Light" pdfEncoding="UniGB-UCS2-H" isPdfEmbedded="true"/>
				</textElement>
				<textFieldExpression><![CDATA[$P{text}]]></textFieldExpression>
			</textField>
			<textField>
				<reportElement x="0" y="0" width="555" height="61" forecolor="#33CC00" uuid="7bbe7eb5-bd51-4683-b760-3b14835046f1">
					<printWhenExpression><![CDATA[$P{text}.equals( "运行" )]]></printWhenExpression>
				</reportElement>
				<textElement textAlignment="Center" verticalAlignment="Middle">
					<font size="15" pdfFontName="STSong-Light" pdfEncoding="UniGB-UCS2-H" isPdfEmbedded="true"/>
				</textElement>
				<textFieldExpression><![CDATA[$P{text}]]></textFieldExpression>
			</textField>

可以看到,两个元素的x,y和width,包括其他元素基本一致;

2、采用conditionStyle来控制

    采用conditionStyle,需要事先新建一个style,然后添加conditionStyle,具体的步骤为:

    a)新建style,并在该style下新建conditionStyle,conditionStyle可以设置Expression来控制,如下:

    b)点击新建的元素,在右边的属性,style选择刚新建的那个样式,保存。

    通过以上的步骤,生成报表,JasperReport会自动根据文本值和conditionStyle来给记录设置不通的样式。


    以上两种实现的运行结果如下:


最后附上Java代码和jrxml:

package com.zzq.test.myjasper;

import java.io.File;
import java.util.HashMap;
import java.util.Map;

import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.export.JRPdfExporter;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.export.SimpleExporterInput;
import net.sf.jasperreports.export.SimpleOutputStreamExporterOutput;

public class ConditionStyle {
    private static final String NAME = System.getProperty("java.class.path").split(";")[0] + File.separator
                                             + "conditionStyle";

    /**
     * 将jrxml编译成jasper的格式,并保存在classpath目录下
     * @return
     * @throws Exception
     */
    public static void compile() throws Exception {
        JasperCompileManager.compileReportToFile(NAME + ".jrxml");
    }

    /**
     * 将数据填充到编译后的jasper,重新生成一个jrprint的文件
     * @throws Exception
     */
    public static void fillData() throws Exception {
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("text", "运行");
        //此处不能直接用JasperFillManager.fillReportToFile(NAME + ".jasper", params)调用,需要多传一个JREmptyDataSource,否则导出的文件有问题,具体PDF空白,excel文件有问题
        JasperFillManager.fillReportToFile(NAME + ".jasper", params, new JREmptyDataSource());
    }

    /**
     * 将报表导出成pdf
     * @throws Exception
     */
    public static void printPDF() throws Exception {
        JasperPrint jasperPrint = (JasperPrint) JRLoader.loadObject(new File(NAME + ".jrprint"));
        File destFile = new File(NAME + ".pdf");
        JRPdfExporter exporter = new JRPdfExporter();
        exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
        exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(destFile));
        exporter.exportReport();
    }

    public static void main(String[] args) throws Exception {
        compile();
        fillData();
        printPDF();
    }
}
<?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="conditionStyle" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="3cca5dad-fa4c-46a2-ad12-603ef6a0190b">
	<property name="ireport.zoom" value="1.0"/>
	<property name="ireport.x" value="0"/>
	<property name="ireport.y" value="0"/>
	<style name="colorStyle">
		<conditionalStyle>
			<conditionExpression><![CDATA[$P{text}.equals( "关闭" )]]></conditionExpression>
			<style forecolor="#000000"/>
		</conditionalStyle>
		<conditionalStyle>
			<conditionExpression><![CDATA[$P{text}.equals( "运行" )]]></conditionExpression>
			<style forecolor="#33CC00"/>
		</conditionalStyle>
		<conditionalStyle>
			<conditionExpression><![CDATA[$P{text}.equals( "停止" )]]></conditionExpression>
			<style forecolor="#CC3300"/>
		</conditionalStyle>
	</style>
	<parameter name="text" class="java.lang.String"/>
	<background>
		<band splitType="Stretch"/>
	</background>
	<title>
		<band height="59" splitType="Stretch">
			<staticText>
				<reportElement x="0" y="0" width="555" height="59" uuid="e27c138d-f95d-413e-8ed5-89a339791456"/>
				<textElement textAlignment="Center" verticalAlignment="Middle">
					<font size="20" pdfFontName="STSong-Light" pdfEncoding="UniGB-UCS2-H" isPdfEmbedded="true"/>
				</textElement>
				<text><![CDATA[通过ConditionStyle来控制显示的文字颜色]]></text>
			</staticText>
		</band>
	</title>
	<pageHeader>
		<band height="35" splitType="Stretch"/>
	</pageHeader>
	<columnHeader>
		<band height="61" splitType="Stretch">
			<textField>
				<reportElement x="0" y="0" width="555" height="61" uuid="01553907-42d1-4a7b-9b59-c5d34affd2bf">
					<printWhenExpression><![CDATA[$P{text}.equals( "关闭" )]]></printWhenExpression>
				</reportElement>
				<textElement textAlignment="Center" verticalAlignment="Middle">
					<font size="15" pdfFontName="STSong-Light" pdfEncoding="UniGB-UCS2-H" isPdfEmbedded="true"/>
				</textElement>
				<textFieldExpression><![CDATA[$P{text}]]></textFieldExpression>
			</textField>
			<textField>
				<reportElement x="0" y="0" width="555" height="61" forecolor="#33CC00" uuid="7bbe7eb5-bd51-4683-b760-3b14835046f1">
					<printWhenExpression><![CDATA[$P{text}.equals( "运行" )]]></printWhenExpression>
				</reportElement>
				<textElement textAlignment="Center" verticalAlignment="Middle">
					<font size="15" pdfFontName="STSong-Light" pdfEncoding="UniGB-UCS2-H" isPdfEmbedded="true"/>
				</textElement>
				<textFieldExpression><![CDATA[$P{text}]]></textFieldExpression>
			</textField>
			<textField>
				<reportElement x="0" y="0" width="555" height="61" forecolor="#CC0033" uuid="7bbe7eb5-bd51-4683-b760-3b14835046f1">
					<printWhenExpression><![CDATA[$P{text}.equals( "停止" )]]></printWhenExpression>
				</reportElement>
				<textElement textAlignment="Center" verticalAlignment="Middle">
					<font size="15" pdfFontName="STSong-Light" pdfEncoding="UniGB-UCS2-H" isPdfEmbedded="true"/>
				</textElement>
				<textFieldExpression><![CDATA[$P{text}]]></textFieldExpression>
			</textField>
		</band>
	</columnHeader>
	<detail>
		<band height="125" splitType="Stretch">
			<textField>
				<reportElement style="colorStyle" x="0" y="41" width="555" height="44" uuid="b510ee7c-eba6-42fd-bce7-30638772dea4"/>
				<textElement textAlignment="Center" verticalAlignment="Middle">
					<font size="15" pdfFontName="STSong-Light" pdfEncoding="UniGB-UCS2-H" isPdfEmbedded="true"/>
				</textElement>
				<textFieldExpression><![CDATA[$P{text}]]></textFieldExpression>
			</textField>
		</band>
	</detail>
	<columnFooter>
		<band height="45" splitType="Stretch"/>
	</columnFooter>
	<pageFooter>
		<band height="54" splitType="Stretch"/>
	</pageFooter>
	<summary>
		<band height="42" splitType="Stretch"/>
	</summary>
</jasperReport>


© 著作权归作者所有

漫天的沙
粉丝 10
博文 22
码字总数 18549
作品 0
厦门
高级程序员
私信 提问
simple4+jasperreport+树形图

@simplesns 你好,想跟你请教个问题:最近在用simple4开发,需要做几张报表,我用jasperreport+ireport,做成了报表,在simple4中要如何引进来,要的效果是页面是分为左右两部分,左边是树形...

yangyek517
2013/06/08
445
2
jasperreport html 显示图片

jasperreport+ireport做报表处理logo(处理图片显示的问题) 我为用ireport做报表要把公司的logo加在报表里,我图片加在报表里用ireport(html和其他的方式)预览能都能看到图片,但是.jasp...

wilsonchen
2013/01/26
1K
2
jasperReport+iReport的国际化(I18N)

JasperReport中,也可以根据不通的Locale来将个别信息进行国际化处理。根据我的整理,应该有以下的三种方式: (1)采用PrintWhenExpression的方式:PrintWhenExpression属性,是指在打印的时...

漫天的沙
2015/10/23
564
0
ireport conditionStyle条件的使用

在做报表时,如何根据后天传入参数判断不同style,我使用参数parameters和fields时,编译不通过$P{contentType}.booleanValue(),此时编译不通过,如何处理呢?...

java一份子
2016/01/23
308
0

没有更多内容

加载失败,请刷新页面

加载更多

没有更多内容

Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
5
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
6
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
7
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
6
0
【技术分享】TestFlight测试的流程文档

上架基本需求资料 1、苹果开发者账号(如还没账号先申请-苹果开发者账号申请教程) 2、开发好的APP 通过本篇教程,可以学习到ios证书申请和打包ipa上传到appstoreconnect.apple.com进行TestF...

qtb999
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部