jasper--helloworld

本文介绍如何使用JasperReports创建报表,包括jrxml文件的基本结构和各元素的作用,并通过一个简单示例展示从jrxml文件的创建、编译到生成PDF文件的全过程。

主要内容参考http://blog.youkuaiyun.com/leafxx/archive/2006/03/16/626700.aspx

 

 

JasperReports的报表是用XML文件来定义的,约定用jrxml作后缀名。一个典型的jrxml文件包含以下元素:

    * <jsperReport> - 根元素

    * <title> - 报表的标题,一篇报表里只在开头打印一次

    * <pageHeader> - 页眉,报表每页开头打印一次

    * <detail> - 报表正文

    * <pageFooter> - 页脚,报表每页末尾打印一次

    * <band> - 定义报表部件,以上所有元素都包含一个band元素作为他们唯一的子元素

除了root元素,所有的元素都是可选的。这里是一个jrxml文件的例子,它将生成一个显示字符串“你好,世界!”的简单报表。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jasperReport
  PUBLIC "-//JasperReports//DTD Report Design//EN"
  "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">

<jasperReport name="structure">
  <detail>
    <band height="20">
      <staticText>
        <reportElement x="180" y="0" width="200" height="20"/>
        <textElement>
			<font fontName="宋体" size="12" pdfFontName="STSong-Light" pdfEncoding="UniGB-UCS2-H" isPdfEmbedded="true"/>
		</textElement>
        <text><![CDATA[你好,世界!]]></text>
      </staticText>
    </band>
  </detail>
</jasperReport>

在这个简单的例子中,我没有写可选项<title>, <pageHeader>还有<pageFooter>。<staticText>元素,顾名思义,在报表上显示静态的文本,就像你所看到的,它包含了一个单独的<text>元素定义将要显示的文本。

jrxml文件需要“编译”成JasperReports规范的二进制格式,可以调用类net.sf.jasperreports.engine.JasperCompileManager的方法compileReport()来实现。这个方法有几种重载的形式,在我们的例子中,我们将用到的是单个字符串为参数的方法。参考JasperReport文档以获得这个方法其他版本的详细信息。

package tutorial;

import java.util.HashMap;

import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;

public class Structure {

	@SuppressWarnings("unchecked")
	public static void main(String[] args) {

		JasperReport jasperReport;
		JasperPrint jasperPrint;
		try {
			//编译报表设计
			jasperReport = JasperCompileManager
					.compileReport("reports/structure.jrxml");
			//在模板中填充数据
			jasperPrint = JasperFillManager.fillReport(jasperReport,
					new HashMap(), new JREmptyDataSource());
			//输出pdf文件
			JasperExportManager.exportReportToPdfFile(jasperPrint,
					"reports/structure.pdf");

		} catch (JRException e) {
			e.printStackTrace();
		}

	}

}

 

一个jrxml文件只需要编译一次,但在这个简单例子中,每次执行程序都会被编译。在报表生成之前,需要用数据来“填充”它,在这里我们调用net.sf.jasperreports.engine.JasperFillManager类里的fillReport()方法。同样的,它也有许多重载的形式,这里我们用到了其中一个具有三个参数的方法,第一个是JasperReport的实例, 第二个是HashMap,它可以包含任何要传递给report的参数,第三个参数对象要实现JRDataSource接口。这个方法的使用在我们的例子里面是:
jasperPrint = JasperFillManager.fillReport(
          jasperReport, new HashMap(), new JREmptyDataSource());
因为我们的例子里的report类不需要任何参数,所以传给一个它一个空的HashMap,第三个参数net.sf.jasperreports.engine.JREmptyDataSource是一个实现了JRDataSource接口的简便类,这个基本类不包含任何数据。
The parameters are self-explanatory.
最后,在例子中,我们将报表导出为PDF文件,可以用Adobe Acrobat, XPDF, Evince或其他PDF阅读工具打开。在例子中的代码是:JasperExportManager.exportReportToPdfFile(
          jasperPrint, "reports/structure.pdf");

### 如何在 Eclipse 中创建和运行 JSP HelloWorld 示例 #### 创建 Maven 项目 为了构建一个能够支持 JSP 的 Spring Boot 应用程序,在 Eclipse 中首先需要创建一个新的 Maven 项目。这可以通过导航到菜单栏中的 `New` -> `Other...` 来完成,接着选择 `Maven Project` 并按照向导指示操作[^3]。 #### 配置 pom.xml 文件 确保项目的依赖项已正确定义以便于使用嵌入式的 Tomcat 和 JSP 模板引擎。编辑 `pom.xml` 添加必要的依赖关系来启用这些特性: ```xml <dependencies> <!-- 其他依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>javax.servlet.jsp.jstl</groupId> <artifactId>jstl-api</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>taglibs</groupId> <artifactId>standard</artifactId> <version>1.1.2</version> </dependency> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <scope>provided</scope> </dependency> </dependencies> ``` #### 编写控制器类 接下来编写 Java 控制器代码用于处理 HTTP 请求并将请求转发给相应的视图页面 (即 JSP 页面): ```java package com.example.demo; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class HomeController { @RequestMapping("/") public String home() { return "hello"; // 这里返回的是位于 src/main/webapp/WEB-INF/jsp 下面名为 hello.jsp 的文件名(不带扩展名) } } ``` #### 准备 JSP 视图模板 最后一步是在合适的位置放置实际的 JSP 文件 (`src/main/webapp/WEB-INF/jsp/hello.jsp`) ,该文件定义了当访问根路径时显示的内容: ```jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Hello World Example with JSP and Spring Boot</title> </head> <body> <h1>Hello, World!</h1> <p>This is a simple example of using JSP pages within a Spring Boot application.</p> </body> </html> ``` #### 构建并部署至 Eclipse WTP 容器 为了让这个应用可以在 Eclipse 内部启动起来,可以利用 Apache Maven 插件将此工程转化为适合 Eclipse Web Tools Platform(WTP) 使用的形式。通过命令行输入如下指令实现这一点: ```bash mvn eclipse:eclipse -Dwtpversion=2.0 ``` 之后就可以像平常一样右键点击项目->Run As->Run on Server 来测试应用程序了[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值