JAVA开源报表技术:JasperReports和iReport 实战

数据源设计

JAVA开源报表技术:JasperReports和iReport 实战_第1张图片

点开上图红色标记,进行当前报表的数据源的设计,我们本节写的是Sql语句

JAVA开源报表技术:JasperReports和iReport 实战_第2张图片

输入SQL语句,会自动读取出查询的字段信息。

点击【OK】按钮,查询出的字段都会显示在Fields下,

JAVA开源报表技术:JasperReports和iReport 实战_第3张图片

报表结构

JAVA开源报表技术:JasperReports和iReport 实战_第4张图片

报表的结构包括如下部分:Title、Page Header、Column Header、Detail、Column Footer、Page Footer、Summary.


  • Title:为报表的标题部分,如果报表有多页,则只显示在第一页。

  • Page Header :为报表每页的一个头部名称,如果报表有多页,则每页都会显示。

  • Column Header:可以理解成表头,如果报表有多页,则每页都会显示。

  • Detail:详细记录,迭代列出所有的查询结果,有多少数据都会显示出来(分页)。

  • Column Footer:相当于表尾,如果报表有多页,则每页都会显示。

  • Page Footer:与Page Header对应,每页都会显示。

  • Summary:报表的一些统计信息。比如共有多少页,当前是第几页等信息。

报表设计

需求:列出系统所以用户的信息(由查询的SQL决定)

1、我们从组件面板中,拖出一个 Static Text 组件来,放置在报表的Title部分,输入“用户账户清单”。

2、在Page Header 也同样拖入一个 Static Text 组件,输入“管理员”

3、展开左侧的 Report Inspector,展开Fields子项,将所有字段,拖入Detail项中,此时会发现,Column Header项中自动填充了Static Text的表头,也可以对表头进行编辑,重命名等操作。可以调整各组件的位置、大小等信息。

JAVA开源报表技术:JasperReports和iReport 实战_第5张图片

4、点击【预览】

JAVA开源报表技术:JasperReports和iReport 实战_第6张图片

预览选择PDF模式,会输出信息,说明已经在目录下生成相应的PDF文件。

JAVA开源报表技术:JasperReports和iReport 实战_第7张图片

打开PDF文件,我们会发现中文居然没显示,这不是坑爹吗

JAVA开源报表技术:JasperReports和iReport 实战_第8张图片

别着急,我们需要配置下,在iReport的classpath里面导入包含了中文的字符的jar文件,还有供Pdf使用的字符jar包。

JAVA开源报表技术:JasperReports和iReport 实战_第9张图片

JAVA开源报表技术:JasperReports和iReport 实战_第10张图片

也可以添加自己所需要的字体。

JAVA开源报表技术:JasperReports和iReport 实战_第11张图片

更新生成PDF的字体

JAVA开源报表技术:JasperReports和iReport 实战_第12张图片

然后再次生成PDF,如下

JAVA开源报表技术:JasperReports和iReport 实战_第13张图片

导出不同格式的报表

1、生成HTML方式

创建web项目,导入 D:\jasperreports-5.6.0\dist 下4个包

jasperreports-5.6.0.jar

jasperreports-applet-5.6.0.jar

jasperreports-fonts-5.6.0.jar

jasperreports-javaflow-5.6.0.jar

导入 D:\jasperreports-5.6.0\lib 下包

commons-beanutils-1.8.0.jar

commons-collections-3.2.1.jar

commons-digester-2.1.jar

commons-javaflow-20060411.jar

commons-logging-1.1.1.jar

groovy-all-2.0.1.jar

jackson-annotations-2.1.4.jar

jackson-core-2.1.4.jar

jackson-databind-2.1.4.jar

以及oracle的jar 

ojdbc14-10.2.0.5.0.jar

导入使用ireport创建的报表文件,D:\My Documents\ireport

helloreport.jasper

所有如下:

JAVA开源报表技术:JasperReports和iReport 实战_第14张图片

创建测试页面 index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ page import="net.sf.jasperreports.engine.*"%>
<%@ page import="java.util.*"%>
<%@ page import="java.io.*"%>
<%@ page import="java.sql.*"%>

<% 
	String ctxpath = request.getContextPath(); 

	Class.forName("oracle.jdbc.driver.OracleDriver"); 
	tring url="数据库地址"; 
	String user="账号"; 
	String password="密码"; 

	Connection conn= DriverManager.getConnection(url,user,password); 

	//ireport生成的.jasper文件的存放位置,这里为了方便放置在根目录下面 
	
	File reportFile = new
	File(this.getServletContext().getRealPath("/helloreport.jasper")); 
	Map parameters = new HashMap(); 

	try { 

	//执行报表程序 
	JasperRunManager.runReportToHtmlFile(reportFile.getPath(),parameters, conn); 
	response.sendRedirect(ctxpath+"/helloreport.html");
	}catch(Exception e) { 
		System.out.println( e.getMessage() ); 
} 
finally { 

	try { 
		conn.close(); 
	} catch (Exception ex) { 
		System.out.println( ex.getMessage() ); 
	} 
} 
%>

部署到tomcat服务器。运行结果如下:

JAVA开源报表技术:JasperReports和iReport 实战_第15张图片

和我们在ireport软件下一样的哈。


2、生成PDF方式

导入:D:\Program Files (x86)\Jaspersoft\iReport-5.6.0\ireport\modules\ext

iText-2.1.7.js2.jar

iTextAsian.jar

进入D:\Program Files (x86)\Jaspersoft\iReport-5.6.0\ireport\fonts目录

使用cmd命令,打包字体成jar文件一并引入

 jar cf font.jar  *

创建pdf.jsp

<%@ page contentType="text/html;charset=utf-8"%>
<%@ page import="net.sf.jasperreports.engine.*"%>
<%@ page import="java.util.*"%>
<%@ page import="java.io.*"%>
<%@ page import="java.sql.*"%>
<%@ page import="com.lowagie.text.*"%>
<%  
	String ctxpath = request.getContextPath(); 

	Class.forName("oracle.jdbc.driver.OracleDriver"); 
	String url="数据库地址"; 
	String user="账号"; 
	String password="密码"; 

	Connection conn= DriverManager.getConnection(url,user,password); 

	//ireport生成的.jasper文件的存放位置,这里为了方便放置在根目录下面 
	
	File reportFile = new
	File(this.getServletContext().getRealPath("/helloreport.jasper")); 
	Map parameters = new HashMap(); 

	byte[]  bytes = JasperRunManager.runReportToPdf(reportFile.getPath(),parameters,conn);  

	response.setContentType("application/pdf");  
	response.setContentLength(bytes.length);  
	ServletOutputStream outStream = response.getOutputStream();  
	outStream.write(bytes,0,bytes.length);  
	outStream.flush();  
	outStream.close();  
	out.clear();  
	out = pageContext.pushBody();  
%>

部署到服务器,运行结果:

JAVA开源报表技术:JasperReports和iReport 实战_第16张图片


导出Excel格式

1、导入jxl-2.6.10.jar

2、创建测试文件

package ireportDemo;

import java.io.File;  
import java.io.FileOutputStream;  
import java.sql.Connection;  
import java.sql.DriverManager;  
import java.util.HashMap;  
import java.util.Map;  
import net.sf.jasperreports.engine.JRAbstractExporter;  
import net.sf.jasperreports.engine.JRExporterParameter;  
import net.sf.jasperreports.engine.JasperFillManager;  

import net.sf.jasperreports.engine.JasperPrint;  
import net.sf.jasperreports.engine.export.JExcelApiExporter;  

public class ReportExecl {  
public static void main(String[] args) {  
        File reportFile = new File(  
"WebRoot\\helloreport.jasper");  
        Map parameters = new HashMap();  
        Connection conn = null;  
        FileOutputStream output = null;  
try {  
            String driver = "oracle.jdbc.driver.OracleDriver";  
            String url = "地址";  
            Class.forName(driver);  
            conn = DriverManager.getConnection(url, "账号", "密码");  
            Map parameter = new HashMap();  
            JasperPrint report = null;  
            report = JasperFillManager.fillReport(reportFile.getPath(),  
                    parameter, conn);  
            JRAbstractExporter exporter = new JExcelApiExporter();  
            output = new FileOutputStream("D:\\excel.xls");  
            exporter.setParameter(JRExporterParameter.JASPER_PRINT, report);  
            exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, output);  
            exporter.exportReport();  
        } catch (Exception e) {  
            e.printStackTrace();  
        } finally {  
try {  
                output.close();  
            } catch (Exception e) {  
                e.printStackTrace();  
            }  
try {  
                conn.close();  
            } catch (Exception e) {  

                e.printStackTrace();  
            }  
        }  
    }  
}

结果如下:JAVA开源报表技术:JasperReports和iReport 实战_第17张图片


你可能感兴趣的:(JAVA开源报表技术:JasperReports和iReport 实战)