jasperReport+iReport中conditionStyle的使用

    在报表生成中,很经常会有这样的需求,比如状态为同意的,字体颜色为绿色,拒绝的字体颜色为红色。这时候如果想在表达式上通过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来控制,如下:

192146_KE09_2373894.png

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

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


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

192407_nla6_2373894.png


最后附上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>


转载于:https://my.oschina.net/zzq350623/blog/521356

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 JSP 页面使用 JasperReport,可以按照以下步骤: 1. 在你的项目导入 JasperReport 的相关库文件。 2. 创建一个 JasperReport 报表模板文件,可以使用 JasperReport 的设计工具 iReport 进行创建。 3. 在 JSP 页面编写代码,创建一个 JasperReport 报表,并填充数据。 4. 将 JasperReport 报表输出到指定的输出流。 下面是一个简单的示例代码,演示如何在 JSP 页面使用 JasperReport: ```java <%@ page import="java.util.*" %> <%@ page import="java.io.*" %> <%@ page import="net.sf.jasperreports.engine.*" %> <%@ page import="net.sf.jasperreports.engine.export.*" %> <%@ page contentType="application/pdf" %> <% // 创建一个 JasperReport 报表 JasperReport jasperReport = JasperCompileManager.compileReport("report_template.jrxml"); // 填充数据 Map<String, Object> params = new HashMap<String, Object>(); params.put("parameter1", "value1"); params.put("parameter2", "value2"); JRDataSource dataSource = new JREmptyDataSource(); JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, dataSource); // 输出 JasperReport 报表到指定的输出流 OutputStream out = response.getOutputStream(); JasperExportManager.exportReportToPdfStream(jasperPrint, out); %> ``` 在这个示例代码,我们首先创建了一个 JasperReport 报表,并填充了一些数据。然后,我们将 JasperReport 报表输出到一个 PDF 文件。在这个例子,我们将 PDF 文件直接输出到了 JSP 页面的输出流,因此最后生成的 PDF 文件将直接在浏览器显示出来。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值