iReport+jasperreport的第一个报表

      jasperreport的开发,有两种方式,第一种为动态的创建报表,所谓动态,即在程序运行过程中,根据需要由程序定义出相应的模板,该种方式为更灵活,需要什么就创建什么,具有动态性和不确定性;第二种则是根据事先准备好的模板,根据之前的设定,忘模板中填充数据,该种方式具有确定性,在处理上速度也会更佳,因为事先准备好模板,事先编译完成,只需要往其中填充进数据,导出即可,省去的前面的设计和编译环节。第二种方式,采用较多的是使用拖拽工具进行设计,本章以及后续都采用iReport。

    使用iReport开发,事先需要准备好JAVA环境,目前最新版本为iReport-5.6.0。注意该版本目前不支持JDK8,需要JDK6或者7才能运行。安装完之后,可以根据情况设计一个简单的报表。本文主要讲述几个部分的占用空间,所以设计了如下的模板:

204535_D12N_2373894.png

具体的xml如下:

<?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="hello" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="761ac2a3-d6ed-4a5e-b00e-0a42c96858b3">
	<property name="ireport.zoom" value="1.0"/>
	<property name="ireport.x" value="0"/>
	<property name="ireport.y" value="0"/>
	<parameter name="detail" class="java.lang.String"/>
	<background>
		<band splitType="Stretch"/>
	</background>
	<title>
		<band height="35" splitType="Stretch">
			<staticText>
				<reportElement x="211" y="5" width="113" height="30" forecolor="#000099" uuid="d91ed968-d7fd-4c2a-9a14-bdba82d2cea3"/>
				<textElement>
					<font size="16" isBold="true"/>
				</textElement>
				<text><![CDATA[This is Title]]></text>
			</staticText>
			<textField pattern="yyyy/MM/dd">
				<reportElement x="24" y="15" width="100" height="20" uuid="f611afbf-084f-4d62-8207-aa847d9f850d"/>
				<textFieldExpression><![CDATA[new java.util.Date()]]></textFieldExpression>
			</textField>
		</band>
	</title>
	<pageHeader>
		<band height="35" splitType="Stretch">
			<staticText>
				<reportElement x="171" y="4" width="203" height="28" forecolor="#CC00CC" uuid="e58f784d-76e9-49c9-b0e4-f415bef975ba"/>
				<textElement>
					<font size="15" isBold="false"/>
				</textElement>
				<text><![CDATA[This is PageHeader]]></text>
			</staticText>
		</band>
	</pageHeader>
	<columnHeader>
		<band height="61" splitType="Stretch">
			<staticText>
				<reportElement x="171" y="15" width="169" height="26" forecolor="#FF6633" uuid="50c197ee-1c4d-44f5-8287-89a190518f41"/>
				<textElement>
					<font size="15"/>
				</textElement>
				<text><![CDATA[This is ColumnHeader]]></text>
			</staticText>
		</band>
	</columnHeader>
	<detail>
		<band height="125" splitType="Stretch">
			<textField isStretchWithOverflow="true">
				<reportElement stretchType="RelativeToBandHeight" x="0" y="0" width="555" height="125" forecolor="#003333" uuid="5a46fe2b-d19b-4ac3-8085-c6a9d7784c29"/>
				<textElement>
					<font size="13"/>
				</textElement>
				<textFieldExpression><![CDATA[$P{detail}]]></textFieldExpression>
			</textField>
		</band>
	</detail>
	<columnFooter>
		<band height="45" splitType="Stretch">
			<staticText>
				<reportElement x="176" y="10" width="169" height="26" forecolor="#FF6600" uuid="0014b3a9-92c0-470e-9772-e6b58b291dce"/>
				<textElement>
					<font size="15"/>
				</textElement>
				<text><![CDATA[This is ColumnFooter]]></text>
			</staticText>
		</band>
	</columnFooter>
	<pageFooter>
		<band height="54" splitType="Stretch"/>
	</pageFooter>
	<summary>
		<band height="42" splitType="Stretch">
			<staticText>
				<reportElement x="177" y="-38" width="203" height="28" forecolor="#990099" uuid="aa93eaad-d095-48fa-9716-20a82f5b0049"/>
				<textElement>
					<font size="15"/>
				</textElement>
				<text><![CDATA[This is PageFooter]]></text>
			</staticText>
			<staticText>
				<reportElement x="211" y="12" width="163" height="20" forecolor="#009999" uuid="c1722fde-c190-4b8e-9742-403b014d9961"/>
				<textElement>
					<font size="13"/>
				</textElement>
				<text><![CDATA[this is summary]]></text>
			</staticText>
		</band>
	</summary>
</jasperReport>

测试的代码如下:

package com.zzq.test.jasperreport.hello;

import java.io.File;
import java.net.URISyntaxException;
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.export.JRXlsExporter;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.export.SimpleExporterInput;
import net.sf.jasperreports.export.SimpleOutputStreamExporterOutput;
import net.sf.jasperreports.export.SimpleXlsReportConfiguration;

/**
 * 第一个jasperreport程序,通过例子说明title、pageHeader、pageFooter、Detail、ColumnHeader、ColumnFooter、Summary的结构关系
 * @author zzq0324@qq.com
 *
 */
public class HelloJasper {

    /** 前缀 */
    private static final String PREFIX = File.separator + "hello" + File.separator + "hello";
    /** classpath所在的目录 */
    private static File         DIR    = null;

    /**
     * 初始化当前类所在的编译目录
     */
    static {
        try {
            DIR = new File(HelloJasper.class.getResource("/").toURI());
        } catch (URISyntaxException e) {
            e.printStackTrace();
        }
    }

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

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

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

    /**
     * 打印成excel文件
     * @throws Exception
     */
    public static void printXls() throws Exception {
        JasperPrint jasperPrint = (JasperPrint) JRLoader.loadObject(new File(DIR + PREFIX + ".jrprint"));
        File destFile = new File(DIR + PREFIX + ".xls");
        JRXlsExporter exporter = new JRXlsExporter();

        exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
        exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(destFile));
        SimpleXlsReportConfiguration configuration = new SimpleXlsReportConfiguration();
        configuration.setOnePagePerSheet(false);
        exporter.setConfiguration(configuration);

        exporter.exportReport();
    }

    public static void main(String[] args) throws Exception {
        compile();
        fillData();
        printPDF();
        printXls();
    }

}

运行之后,会生成相应的pdf和xls。通过观察生成的PDF,可以总结出:

1、title为报表的标题,整个报表内只会出现一次;

2、PageHeader和PageFooter,页面的头部和尾部,根据生成的PDF发现,PageHeader在每页都会存在,而PageFooter则只在最后一页存在,目前不知道这个原因;

3、ColumnHeader和ColumnFooter将Detail夹在中间,每个页面都会出现;

4、Summary为存放汇总数据,之后最后一页才会出现。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值