博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA开源报表技术:JasperReports和iReport 实战
阅读量:7005 次
发布时间:2019-06-27

本文共 5595 字,大约阅读时间需要 18 分钟。

hot3.png

数据源设计


095721_Xrol_112937.png

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

100246_c3Tv_112937.png

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

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

100409_KOZD_112937.png

报表结构


100601_sWgZ_112937.png

报表的结构包括如下部分: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的表头,也可以对表头进行编辑,重命名等操作。可以调整各组件的位置、大小等信息。

101732_a9jo_112937.png

4、点击【预览】

102341_wxqx_112937.png

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

102616_xuvG_112937.png

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

102721_ys35_112937.png

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

103517_TFME_112937.png

103517_tPse_112937.png

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

112427_M9ND_112937.png

更新生成PDF的字体

112510_pbuw_112937.png

然后再次生成PDF,如下

112551_ab3w_112937.png

导出不同格式的报表

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

所有如下:

115213_LZXB_112937.png

创建测试页面 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服务器。运行结果如下:

115342_LfYi_112937.png

和我们在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();  %>

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

125502_6xuo_112937.png

导出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();              }          }      }  }

结果如下:130118_OZJy_112937.png

转载于:https://my.oschina.net/ihanfeng/blog/306710

你可能感兴趣的文章
【对讲机的那点事】你知道吗?对讲机天线决定了对讲机的通信效果
查看>>
Android GreenDao常用注解
查看>>
二十分钟教你如何将区块链应用与函数计算相结合
查看>>
Bootstrap wysiwyg,将富文本数据保存到mysql
查看>>
Linux cron crontab用法(转载)
查看>>
Window 编译Openssl
查看>>
SAMBA 生产环境应用实例
查看>>
WPF - Group分组对ListBox等列表样式的约束
查看>>
Android 位置服务——BaiduLocation的使用
查看>>
源码专题之spring设计模式:单例模式
查看>>
WPF 将图片进行灰度处理
查看>>
用Intellij idea搭建solr调试环境
查看>>
你用过不写代码就能完成一个简单模块的组件么?
查看>>
js循环POST提交添加辅助单位
查看>>
solr6.6教程-从mysql数据库中导入数据(三)
查看>>
[OpenGL] glTranslatef(); glScaled(); glRotatef(); 函数介绍
查看>>
node 模块开发的一个小坑
查看>>
HTML5+CSS3 为 input 添加一键删除按钮
查看>>
03.Java基础(线程池和Callable<T>)
查看>>
Intellij IDE破解步骤
查看>>